我正在尝试阅读前100行大文本文件。执行此操作的简单代码如下所示。然而,挑战在于我必须防止没有任何换行符的腐败或其他棘手的文件(是的,人们以某种方式找出生成这些的方法)。在那些情况下,我仍然喜欢读取数据(因为我需要查看那里发生了什么),但是将其限制为n个字节。
我能想到的唯一方法是通过char读取char文件。除了速度慢(可能只有100行问题)我担心当遇到使用非ASCII编码的文件时我会遇到麻烦。
是否可以使用readline()限制读取的字节数?或者有更优雅的方式来处理这个?
line_count = 0
with open(filepath, 'r') as f:
for line in f:
line_count += 1
print('{0}: {1}'.format(line_count, line))
if line_count == 100:
break
修改
正如@Fredrik正确指出的那样,readline()接受一个限制读取的字符数的arg(我以为它是一个缓冲区大小参数)。因此,就我的目的而言,以下效果非常好:
max_bytes = 1024*1024
bytes_read = 0
fo = open(filepath, "r")
line = fo.readline(max_bytes)
bytes_read += len(line)
line_count = 0
while line != '':
line_count += 1
print('{0}: {1}'.format(line_count, line))
if (line_count == 100) or (bytes_read == max_bytes):
break
else:
line = fo.readline(max_bytes - bytes_read)
bytes_read += len(line)
答案 0 :(得分:4)
如果您有文件:
f = open("a.txt", "r")
f.readline(size)
size参数指示要读取的最大字节数
答案 1 :(得分:0)
这将检查没有换行符的数据:
f=open('abc.txt','r')
dodgy=False
if '\n' not in f.read(1024):
print "Dodgy file - No linefeeds in the first Kb"
dodgy=True
f.seek(0)
if dodgy==False: #read the first 100 lines
for x in range(1,101):
try: line = next(f)
except Exception as e: break
print('{0}: {1}'.format(x, line))
else: #read the first n bytes
line = f.read(1024)
print('bytes: '+line)
f.close()