如何在Go中跳过文件的第一行?
如何在Go中读取文件并跳过第一行/标题 在Python中,我知道我可以做到如何在Go中跳过文件的第一行?,go,Go,如何在Go中读取文件并跳过第一行/标题 在Python中,我知道我可以做到 counter = 0 with open("my_file_path", "r") as fo: try: next(fo) except: pass for _ in fo: counter = counter + 1 这是我的申请表 package main import ( "bufio" "flag" "
counter = 0
with open("my_file_path", "r") as fo:
try:
next(fo)
except:
pass
for _ in fo:
counter = counter + 1
这是我的申请表
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,我不想计算每一行。您可以尝试类似的方法
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
}
编辑:
比如说,
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
$
在循环之前移动到下一个令牌如何
scanner := bufio.NewScanner(file)
scanner.Scan() // this moves to the next token
for scanner.Scan() {
fmt.Println(scanner.Text())
}
文件
输出
2
3
这是我第一次使用goland,但为什么我们需要先循环?我们可以使用fileScanner.Text()和第二个循环吗?我们已经进行了编辑。在第一个循环中错过了break语句。关键是要读第一行,如果它存在的话,忽略它。你也可以用一个普通的if块来做。如果你在第一次迭代后无条件中断,为什么会有一个循环呢
1
2
3
2
3