我需要在python中获取大文件(数十万行)的行数.记忆和时间方面最有效的方法是什么?
目前我这样做:
def file_len(fname):
with open(fname) as f:
for i, l in enumerate(f):
pass
return i + 1
Run Code Online (Sandbox Code Playgroud)
有可能做得更好吗?
我在 git 文件中有一个令人讨厌的 CRLF / LF 冲突,这可能是从 Windows 机器提交的。是否有一种跨平台的方式(最好在 Python 中)来检测文件中占主导地位的换行符类型?
我有这个代码(基于来自/sf/answers/739358091/ 的想法):
import sys
if not sys.argv[1:]:
sys.exit('usage: %s <filename>' % sys.argv[0])
with open(sys.argv[1],"rb") as f:
d = f.read()
crlf, lfcr = d.count('\r\n'), d.count('\n\r')
cr, lf = d.count('\r'), d.count('\n')
print('crlf: %s' % crlf)
print('lfcr: %s' % lfcr)
print('cr: %s' % cr)
print('lf: %s' % lf)
print('\ncr-crlf-lfcr: %s' % (cr - crlf - lfcr))
print('lf-crlf-lfcr: %s' % (lf - crlf - lfcr))
print('\ntotal (lf+cr-2*crlf-2*lfcr): %s\n' % (lf + …Run Code Online (Sandbox Code Playgroud) 每个人都这样做 - 从shell开始,你需要一些关于文本文件的细节(不仅仅是ls -l给你),特别是那个文件的行数,所以:
@ > wc -l iris.txt
149 iris.txt
Run Code Online (Sandbox Code Playgroud)
我知道我可以从python访问shell实用程序,但我正在寻找一个内置的python,如果有的话.
我的问题的关键是在不打开文件的情况下获取此信息(因此我引用了unix实用程序*wc - *l)
(正在'嗅探'这个正确的术语 - 也就是说,在没有打开它的情况下偷看文件?')