猿问

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

如何在 Go 中读取文件并跳过第一行/标题?


在 Python 中我知道我能做到


counter = 0

with 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,我不想评估每一行。


胡说叔叔
浏览 146回答 3
3回答

www说

如何移动到循环之前的下一个标记scanner := bufio.NewScanner(file)scanner.Scan() // this moves to the next tokenfor scanner.Scan() {    fmt.Println(scanner.Text())}文件123输出23https://play.golang.org/p/I2w50zFdcg0

至尊宝的传说

例如,package mainimport (    "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.file1234567890abc$ go run count.go1$ 

jeck猫

你可以尝试这样的事情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        }
随时随地看视频慕课网APP

相关分类

Go
我要回答