限制使用readline的读取数量

2024-05-21 01:39:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着读前100行大文本文件。下面显示了执行此操作的简单代码。不过,挑战在于,我必须防范腐败或其他扭曲的文件没有任何换行符(是的,人们总能找到生成这些文件的方法)。在这些情况下,我仍然希望读入数据(因为我需要查看其中发生了什么),但将其限制在,比如说,n个字节。在

我能想到的唯一方法就是逐个读取文件。除了速度慢(可能对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()接受一个限制读取字符数的参数(我以为它是一个缓冲区大小参数)。因此,就我的目的而言,以下方法非常有效:

^{pr2}$

Tags: 文件数据方法代码编码参数readline字节
2条回答

如果您有文件:

f = open("a.txt", "r")
f.readline(size)

size参数指示要读取的最大字节数

这将检查没有换行符的数据:

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()

相关问题 更多 >