如何从 python 中的标准输入读取固定的行块(比如 100)?
How to read fixed chunk of lines (say 100) from stdin in python?
我想从 stdin 读取前 100 行,将其转换为数据帧,并对其进行一些处理。然后从 stdin 读取接下来的 100 行(101-200),将其转换为数据帧,进行一些处理......等等
readlines() in python 没有任何参数来指定要读取的行数。
R 中的 readLines() 有这个但我不能在 python 中做同样的事情。
在此感谢任何帮助。
尝试使用 sys.stdin
。它有一个文件接口,符合 unix 哲学。这意味着您可以对其进行迭代以获取行。之后,您只需像任何迭代器一样对它进行切片——我建议使用 itertools https://docs.python.org/2/library/itertools.html。
import sys
import itertools
CHUNK_LENGTH = 200
lines_chunk = itertools.islice(sys.stdin, CHUNK_LENGTH)
更好的是,使用石斑鱼的 itertools 配方并获得可迭代的块(参见上面 link)
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
chunks_of_200 = grouper(sys.stdin, CHUNK_LENGTH, fillvalue="")
for chunk_of_200 in chunks_of_200:
# do something with chunk
如果你想要原版 Python 3,你可以
import sys
lines = [line for _,line in zip(range(200),sys.stdin)]
我想从 stdin 读取前 100 行,将其转换为数据帧,并对其进行一些处理。然后从 stdin 读取接下来的 100 行(101-200),将其转换为数据帧,进行一些处理......等等
readlines() in python 没有任何参数来指定要读取的行数。
R 中的 readLines() 有这个但我不能在 python 中做同样的事情。
在此感谢任何帮助。
尝试使用 sys.stdin
。它有一个文件接口,符合 unix 哲学。这意味着您可以对其进行迭代以获取行。之后,您只需像任何迭代器一样对它进行切片——我建议使用 itertools https://docs.python.org/2/library/itertools.html。
import sys
import itertools
CHUNK_LENGTH = 200
lines_chunk = itertools.islice(sys.stdin, CHUNK_LENGTH)
更好的是,使用石斑鱼的 itertools 配方并获得可迭代的块(参见上面 link)
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
chunks_of_200 = grouper(sys.stdin, CHUNK_LENGTH, fillvalue="")
for chunk_of_200 in chunks_of_200:
# do something with chunk
如果你想要原版 Python 3,你可以
import sys
lines = [line for _,line in zip(range(200),sys.stdin)]