我正在尝试在python中创建错误处理程序,python将检查该文件,如果文件包含95000行以上,它将停止并显示错误消息。
这是一种简单的方法吗?
这是我发现的解决方案:
def file_len(fname):
with open(fname) as f:
for i, l in enumerate(f):
pass
return i + 1
然后类似,如果我> 95000打印'错误'
答案 0 :(得分:2)
您的方法很好:
def get_bounded_num_lines(k, infile):
"""Returns min(K, number of lines in infile).
Max running time is proportional to K rather than total file length,
similar to /usr/bin/head -K.
"""
try:
for i in range(k + 1):
next(infile)
except StopIteration:
pass
infile.close()
return i
if __name__ == '__main__':
k, fspec = 95000, '/tmp/foo.txt'
if get_bounded_num_lines(k, open(fspec)) >= k:
raise ValueError('File is too big')
这避免了在发信号错误之前浪费大量时间读取多TB文件的每一行。
如果不需要完全准确的结果并且文件具有可预测的内容,请读取文件的开头(大约前100行),加长它们的长度,然后计算avg_line_length = total_head_length / 100
。有了这些,并有了file_length = os.path.getsize(fspec)
,您就可以非常快速计算estimated_num_lines = int(file_length / avg_line_length)
并与之进行比较。
答案 1 :(得分:1)
假设文件中没有空行,则可以使用linecache
库,该库直接提供行的内容。试试这个:
file_path="path_to_file"
line_content=linecache.getline(file_path,95000)
if line_content:
print "Lines goes beyond limit error"
答案 2 :(得分:0)
尝试这种简单的方法:
with open(<your_file>, 'r') as abc:
lines = [i for i in abc.readlines() if len(i)>1]
if len(lines) >95000:
raise StopIteration("File too big!")