3

是否有 Python 的fileinput.input的 Go 类似物?

import fileinput
for line in fileinput.input():
    process(line)

这可以让你的程序像grepie 一样工作。它可以从命令行指定的文件program input.txt或标准输入中读取cat input.txt | program

Perl 的菱形运算符<>和 Ruby 的 ARGF 类似。

4

2 回答 2

2

你有几个选择。尽管该fileinput.input()函数还将检查sys.args[1:]任何文件名,但我将重点关注从 stdin 读取。

使用Scanner. 文档中的示例(http://play.golang.org/p/_Nar8-uBDs):

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    for scanner.Scan() {
        fmt.Println(scanner.Text()) // Println will add back the final '\n'
    }
    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stderr, "reading standard input:", err)
    }
}

较低级别的替代方法是bufio.Reader使用它的ReadString()方法(http://play.golang.org/p/h2sobrWNYd):

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    rbuf := bufio.NewReader(os.Stdin)
    for {
        line, err := rbuf.ReadString('\n')
        fmt.Print(line)
        if err != nil {
            // line contains the last remaining characters or is empty
            // it is only empty if '\n' was the last character in the input
            break
        }
    }
}

有关最低级别的替代方案,请参阅ReadLine()

于 2013-07-13T11:07:56.417 回答
0

不,标准库中没有类似的 Go。但是,读取标准或命名文件只是几行(示例

于 2013-07-13T10:52:37.123 回答