Python |如果文件包含多于X行,请退出并打印消息

时间:2018-08-05 15:27:16

标签: python python-3.x python-2.7

我正在尝试在python中创建错误处理程序,python将检查该文件,如果文件包含95000行以上,它将停止并显示错误消息。

这是一种简单的方法吗?

这是我发现的解决方案:

def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return i + 1

然后类似,如果我> 95000打印'错误'

3 个答案:

答案 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"

更多详情,请访问https://docs.python.org/3/library/linecache.html

答案 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!")