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

标签 python parsing stdin

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

有时 header 会有所不同,因此我将其设置为尝试读取文件,但如果无法解析,则尝试使用替代 header 规范。

这适用于文件,但如果我使用 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...

最佳答案

没有一种完美的方法来“重置”标准输入,至少没有一种可以跨不同操作系统工作。不过,您可以尝试“重新绑定(bind)”STDIN,它实际上会清除它。

on unixoid systems, something like this could work:

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

引用:http://www.gossamer-threads.com/lists/python/python/467361

关于python - 在Python中重置或重新读取stdin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36488278/

相关文章:

python - 这些用于检测有限语法歧义的 Python 程序是否正确?

c - execve() 从文件重定向标准输入

c - 如何使用管道和 fork 系统调用将标准输入通过管道传输到文件

python - 如何沟通两个独立的python进程?

python - XML Python 中的条件搜索

python - 把字典分成两半?

python - Pandas:将 JSON 列表值拆分为新列

python - 在 python 中使用 dateutil.parser 处理缺失值

java - 寻找开源 Java whois 解析器

dart - 为什么Dart隔离中的流在没有接收端口的情况下无法工作