输出stdin的每个第n个字节

时间:2014-11-08 23:00:22

标签: python unix io

从stdin读取并输出每个第n个字节最简单有效的方法是什么? 我想要一个适用于OS X的命令行实用程序,并且宁愿避免使用compiled languages

这个Python脚本相当慢(当n = 100000000时,3GB文件为25秒):

#!/usr/bin/env python
import sys
n = int(sys.argv[1])
while True:
    chunk = sys.stdin.read(n)
    if not chunk:
        break
    sys.stdout.write(chunk[0])

很遗憾,我们无法使用sys.stdin.seek来避免阅读整个文件。

编辑:我想优化n是文件大小的重要部分。例如,我经常使用此实用程序从大文件中等间隔位置采样500个字节。

1 个答案:

答案 0 :(得分:1)

注意:OP将示例n从100更改为100000000,这有效地使我的代码比他慢,通常我会删除我的答案,因为它不再比原始示例更好,但我的答案得到了投票,所以我会保持原样。


我能想到让它更快的唯一方法是一次读取所有内容并使用切片

#!/usr/bin/env python
import sys
n = int(sys.argv[1])
data = sys.stdin.read()
print(data[::n])

尽管如此,尝试将3GB文件放入ram可能是一个非常糟糕的主意