为了账号安全,请及时绑定邮箱和手机立即绑定

如何跳过 Go 中文件的第一行?

如何跳过 Go 中文件的第一行?

Go
胡说叔叔 2023-06-05 18:17:13
如何在 Go 中读取文件并跳过第一行/标题?在 Python 中我知道我能做到counter = 0with open("my_file_path", "r") as fo:    try:        next(fo)    except:        pass    for _ in fo:         counter = counter + 1这是我的 Go 应用程序package main    import (    "bufio"    "flag"    "os")func readFile(fileLocation string) int {    fileOpen, _ := os.Open(fileLocation)    defer fileOpen.Close()    fileScanner := bufio.NewScanner(fileOpen)    counter := 0    for fileScanner.Scan() {        //fmt.Println(fileScanner.Text())        counter = counter + 1    }    return counter}func main() {    fileLocation := flag.String("file_location", "default value", "file path to count lines")    flag.Parse()    counted := readFile(*fileLocation)    println(counted)}我将读取一个巨大的文件,如果索引为 0,我不想评估每一行。
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

如何移动到循环之前的下一个标记


scanner := bufio.NewScanner(file)

scanner.Scan() // this moves to the next token

for scanner.Scan() {

    fmt.Println(scanner.Text())

}

文件


1

2

3

输出


2

3

https://play.golang.org/p/I2w50zFdcg0


查看完整回答
反对 回复 2023-06-05
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

例如,


package main


import (

    "bufio"

    "fmt"

    "os"

)


func readFile(filename string) (int, error) {

    f, err := os.Open(filename)

    if err != nil {

        return 0, err

    }

    defer f.Close()


    count := 0

    s := bufio.NewScanner(f)

    if s.Scan() {

        for s.Scan() {

            count++

        }

    }

    if err := s.Err(); err != nil {

        return 0, err

    }

    return count, nil

}


func main() {

    filename := `test.file`


    count, err := readFile(filename)

    if err != nil {

        fmt.Fprintln(os.Stderr, err)

        return

    }

    fmt.Println(count)

}

输出:


$ cat test.file

1234567890

abc

$ go run count.go

1


查看完整回答
反对 回复 2023-06-05
?
jeck猫

TA贡献1909条经验 获得超7个赞

你可以尝试这样的事情


func readFile(fileLocation string) int {

            fileOpen, _ := os.Open(fileLocation)

            defer fileOpen.Close()

            fileScanner := bufio.NewScanner(fileOpen)

            counter := 0

            for fileScanner.Scan() {

                // read first line and ignore

                fileScanner.Text()

                break

            }


           for fileScanner.Scan() {

                // read remaining lines and process

                txt := fileScanner.Text()

                counter = counter + 1

               // do something with text

            



            return counter

        }

编辑:


func readFile(fileLocation string) int {

            fileOpen, _ := os.Open(fileLocation)

            defer fileOpen.Close()

            fileScanner := bufio.NewScanner(fileOpen)

            counter := 0

            if fileScanner.Scan() {

                // read first line and ignore

                fileScanner.Text()

            }


           for fileScanner.Scan() {

                // read remaining lines and process

                txt := fileScanner.Text()

               // do something with text

               counter = counter + 1

            }



            return counter

        }



查看完整回答
反对 回复 2023-06-05
  • 3 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信