第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取從 Go 中的文本文件中刪除行的空行

獲取從 Go 中的文本文件中刪除行的空行

Go
幕布斯7119047 2023-02-14 15:19:40
我有一個使用 cobra 用 Go 編寫的 CLI,其中一個命令是從文本文件的用戶名列表中刪除特定用戶名。例如,我在文件中有一個用戶名列表,user1user2user3user4user5這是我的 cobra 命令中的 Go 代碼,Run: func(cmd *cobra.Command, args []string) {    userBlacklist, _ := cmd.Flags().GetString("blacklist-file-path")     userName, _ := cmd.Flags().GetString("user-name")    if info, err := os.Stat(userBlacklist); err == nil && !info.IsDir() {        data, err := ioutil.ReadFile(userBlacklist)        if err != nil {                logger.Fatal("Failed to read in blacklist: %s", err)        }        lines := strings.Split(string(data), "\n")        file, err := os.Create(userBlacklist)        if err != nil {                logger.Fatal("Could not overwrite blacklist file %s\n", err)        }        defer file.Close()        for _, line := range lines {            if line != userName{                if _, err := file.WriteString(line + "\n"); err != nil {                    logger.Fatal("Failed to write user to open blacklist file %s\n", err)                                       }            }         }    } else {        if err != nil {            logger.Fatal("Error stating blacklist %s\n", err )        } else {            logger.Fatal("--blacklist-file-path is a directory, not a file\n")        }    }},當我運行它時,例如,將 userName 設置為“user3”,生成的輸出文件中確實沒有 user3。但是它在文件末尾確實有一個空行“”。如果我然后運行要求它刪除另一個用戶的命令,它也會刪除該用戶,但生成的文件現(xiàn)在將在末尾有兩個空行,等等。我可以通過將第 22 行更改為來防止空行,if !(line == userName || line == "") {                我不明白這是怎么回事。似乎不太明智?空白行來自哪里?我在 Ubuntu 20.04、Go 版本 go1.16.5 linux/amd64 和 github.com/spf13/cobra v1.5.0提前感謝您的任何見解。
查看完整描述

2 回答

?
當年話下

TA貢獻1890條經(jīng)驗 獲得超9個贊

該文件以\n. 的最后一個元素strings.Split(string(data), "\n")是空字符串。程序在處理最后一個元素時將空字符串添加到文件末尾。


通過使用bufio.Scanner解析行來修復:


    scanner := bufio.NewScanner(bytes.NewReader(data))

    for scanner.Scan() {

        line := scanner.Text()

        if line != userName {

            if _, err := file.WriteString(line + "\n"); err != nil {

                logger.Fatal("Failed to write user to open blacklist file %s\n", err)

            }

        }

    }


查看完整回答
反對 回復 2023-02-14
?
藍山帝景

TA貢獻1843條經(jīng)驗 獲得超7個贊

當您將行寫入文件時,您正在添加一個換行符:

file.WriteString(line + "\n")

這就是文件末尾的空換行符的來源。



查看完整回答
反對 回復 2023-02-14
  • 2 回答
  • 0 關(guān)注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號