我有一些解析脚本接受来自文件或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...
答案 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