考虑这个python程序:
import sys
lc = 0
for line in open(sys.argv[1]):
lc = lc + 1
print lc, sys.argv[1]
Run Code Online (Sandbox Code Playgroud)
在我的6GB文本文件上运行它,它在~2分钟内完成.
问题:是否有可能加快速度?
请注意,同一时间需要:
wc -l myfile.txt
Run Code Online (Sandbox Code Playgroud)
所以,我怀疑对我的问题的回答只是一个简单的"不".
另请注意,我的真实程序正在做一些比计算线条更有趣的事情,所以请给出一个通用答案,而不是行计数技巧(比如在文件中保留行数元数据)
PS:我在这个问题上标记了"linux",因为我只对linux特定的答案感兴趣.如果有的话,请随意提供与操作系统无关的内容,甚至是其他操作系统的答案.
另见后续问题
在Perl中,为了小写文本文件,我可以执行以下操作lowercase.perl:
#!/usr/bin/env perl
use warnings;
use strict;
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
while(<STDIN>) {
print lc($_);
}
Run Code Online (Sandbox Code Playgroud)
并在命令行上: perl lowercase.perl < infile.txt > lowered.txt
在Python,我可以做lowercase.py:
#!/usr/bin/env python
import io
import sys
with io.open(sys.argv[1], 'r', 'utf8') as fin:
with io.open(sys.argv[2], 'r', 'utf8') as fout:
fout.write(fin.read().lower())
Run Code Online (Sandbox Code Playgroud)
并在命令行上: python lowercase.py infile.txt lowered.txt
Perl lowercase.perl与Python有lowercase.py什么不同?
是否输出输入并在输出时将其小写?或者它是否像Python一样读取整个文件lowercase.py?
有没有一种方法可以将输入流式传输到Python并逐字节输出降低的大小写或者通过char输出char?
有没有办法控制命令行语法,使其遵循Perl STDIN和STDOUT?比如python lowercase.py < infile.txt > lowered.txt?