去类比Python的fileinput.input()?

时间:2013-07-13 10:48:37

标签: go

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

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

这可以让您的程序像grep一样工作,即。它可以从comma行[{1}}指定的文件或标准输入program input.txt中读取。

Perl的钻石操作员cat input.txt | program和Ruby的ARGF是相似的。

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

不,标准库中没有Go类似的东西。但是,读取stding或命名文件只是少数几行(example