在Python中重置或重新读取stdin?

时间:2016-04-07 22:24:46

标签: python parsing stdin

我有一些解析脚本接受来自文件或stdin的输入,并使用pandas read_csv解析它们,它将类似文件的对象作为其输入。

有时标题不同,所以我设置了try-except尝试读取文件,但是如果它无法解析,那么尝试使用替代标头规范。

这适用于文件,但是如果我使用stdin作为输入,那么标题行似乎会消耗掉"第一次尝试read_csv

我想知道是否有办法缓冲这一行,或者重置stdin以便第二次尝试解析,就像pandas所希望的那样。

不确定示例代码会有所帮助,但是:

if Opt.Args:
    FileName = Opt.Args[0]
    print >> sys.stderr, "READING from FILE",FileName
elif not sys.stdin.isatty():
    print >> sys.stderr, "READING from STDIN"
    FileName = sys.stdin

try:
    df = pd.read_csv(FileName,header=0,sep="\t", parse_dates=['RecordedDate'])
except ValueError:
    try:
        df = pd.read_csv(FileName,header=0,sep="\t",parse_dates=['RecordedDate_10'])
...etc...

1 个答案:

答案 0 :(得分:2)

没有一种完美的方法来“重置”标准输入,至少没有一种可以在不同的操作系统上运行。然而,您可以尝试“重新绑定”STDIN,它几乎可以清除它。

  

在unixoid系统上,类似这样的东西可以起作用:

     

import sys
  text = sys.stdin.read()
  sys.stdin = open(“/ dev / tty”)   sel = raw_input(“Selection?:”)

参考:http://www.gossamer-threads.com/lists/python/python/467361