【发布时间】:2017-02-05 07:29:33
【问题描述】:
我有以下 Python 代码,我在其中将标准输入中的数据收集到一个列表中并在其上运行 syntaxnet。数据采用 json 对象的形式,我将从中提取文本字段并将其提供给 syntaxnet。
data = []
for line in sys.stdin:
data.append(line)
run_syntaxnet(data) ##This is a function##
我这样做是因为我不希望 Syntaxnet 为每条推文都运行,因为这会花费很长时间并因此降低性能。
另外,当我在非常大的数据上运行此代码时,我不想永远收集它并耗尽内存。所以我想分块收集数据——一次可能像 10000 条推文并在它们上运行 Syntaxnet。有人可以帮我怎么做吗?
另外,我想了解data 列表的最大长度是多少,以免内存不足。
编辑:
我使用了代码:
data = []
for line in sys.stdin:
data.append(line)
if len(data) == 10000:
run_syntaxnet(data) ##This is a function##
data = []
如果输入数据中的行数是 10000 的倍数,它运行得非常好。我不确定如何处理其余的行。
例如,如果总行数为 12000,则前 10000 行将按我的意愿进行处理,但由于不满足条件 len(data) > 10000,因此将忽略接下来的 2000 行。
我想做这样的事情:
if len(data) > 10000 or 'EOF of input file is reached':
run_syntaxnet(data)
谁能告诉我如何检查输入文件的EOF?提前致谢!
PS:python文件的所有数据都来自Pig Streaming。此外,我无法计算输入数据中的行数并将其作为参数发送,因为我有数百万行并且计数本身将花费很长时间。
【问题讨论】:
-
看看生成器
标签: python python-2.7 stream stdin eof