对于某些大文件,
lines_a = len(fa.readlines())
print(lines_a)
对于Bash(在Mac上):
wc -l
结果不同!
可能的原因是什么?
答案 0 :(得分:7)
wc -l
在输入中打印number of newlines。换句话说,它在“行数”中对“行”的定义要求行以换行结束,实际上是defined by POSIX。
如果文件中的最后一行不以换行符结尾,则此行的定义会产生令人惊讶的行为。尽管在文本编辑器和寻呼机中显示这样的行很好,但wc
不会将其视为一行。例如:
$ printf 'foo\nbar\n' | wc -l
2
$ printf 'foo\nbar' | wc -l
1
另一方面,Python的readlines()
方法旨在提供文件中的数据,以便可以完美地重建它。出于这个原因,它为每行提供最终换行符,并为最后一个非空行提供(有或没有最终换行符)。对于上面的示例,它分别返回列表["foo\n", "bar\n"]
和["foo\n", "bar"]
,长度为2:
$ printf 'foo\nbar' | python -c 'import sys; print len(sys.stdin.readlines())'
2
$ printf 'foo\nbar\n' | python -c 'import sys; print len(sys.stdin.readlines())'
2
答案 1 :(得分:0)
刚才提到我在做机器翻译任务时遇到了类似的问题。行号不正确的主要原因可能是因为您没有在'b'模式下打开文件。 所以试着
SeekBar sk=(SeekBar) findViewById(R.id.seekBar1);
sk.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {
// TODO Auto-generated method stub
//Change visibility here based on "progress" value
}
});
您将获得与with open('some file', 'rb') as f:
print(len(f.readlines()))
答案 2 :(得分:0)
如果您的文本文件中有 \r,也可能发生这种情况。
<块引用>从流中读取输入时,如果换行符为None,则通用 换行模式已启用。输入中的行可以以 '\n'、'\r' 或 '\r\n',这些在返回之前被翻译成 '\n' 来电者。
^ 来自 python textiowrapper documentation.