Python 使用readline限制读取量

Python 使用readline限制读取量,python,Python,我正在尝试读取前100行大型文本文件。下面显示了执行此操作的简单代码。然而,我面临的挑战是,我必须防止出现没有任何换行符的腐败或扭曲的文件(是的,人们不知怎么找到了生成这些文件的方法)。在这些情况下,我仍然希望读入数据(因为我需要查看数据中发生了什么),但将其限制在n字节以内 我能想到的唯一方法是逐字符读取文件。除了速度慢(可能只有100行没有问题)之外,我担心遇到使用非ASCII编码的文件时会遇到麻烦 是否可以使用readline()限制读取的字节数?还是有更优雅的方式来处理这个问题 line

我正在尝试读取前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()接受一个限制读取字符数的参数(我原以为是缓冲区大小参数)。因此,就我而言,以下方法非常有效:

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)
如果您有文件:

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

有关
文件
对象上可用方法的更多信息,读者可以查看
readlines()
的documentation.idem。参见
http://stupidpythonideas.blogspot.fr/2013/06/readlines-considered-silly.html
最佳方法。正是这样。我问这个问题感到很愚蠢。不知怎的,我在脑海中意识到readline()上的size参数只是一个初始缓冲区猜测,而不是对要读取的字符数的限制。使用最终解决方案进行编辑,以防对任何人都有用。