Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python |如果文件包含超过X行,则退出并打印消息_Python_Python 3.x_Python 2.7 - Fatal编程技术网

Python |如果文件包含超过X行,则退出并打印消息

Python |如果文件包含超过X行,则退出并打印消息,python,python-3.x,python-2.7,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 然后,如果i>95000打印“错误”假设文件中没有空行,您可以使用linecache库,它直接提供行的内

我正在尝试用python创建错误处理程序,python将检查该文件,如果该文件包含超过95000行,它将停止并打印错误消息

这样做容易吗

这是我找到的解决方案:

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

然后,如果i>95000打印“错误”

假设文件中没有空行,您可以使用
linecache
库,它直接提供行的内容。试试这个:

file_path="path_to_file"  
line_content=linecache.getline(file_path,95000)
if line_content:
   print "Lines goes beyond limit error"

更多详细信息,请参见

假设文件中没有空行,您可以使用直接提供行内容的
linecache
库。试试这个:

file_path="path_to_file"  
line_content=linecache.getline(file_path,95000)
if line_content:
   print "Lines goes beyond limit error"

有关详细信息,请参见你的方法很好:

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\u length=os.path.getsize(fspec)
,您就可以非常快速地计算
估计的\u num\u line=int(file\u length/avg\u line\u length)
,并与之进行比较。

您的方法很好:

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\u length=os.path.getsize(fspec)
,您就可以非常快速地计算
估计的\u num\u line=int(file\u length/avg\u line\u length)
,并与之进行比较。

尝试以下简单方法:

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!")
以开放(,'r')作为abc的
:
lines=[i代表abc.readlines()中的i,如果len(i)>1]
如果长度(线)>95000:
引发StopIteration(“文件太大!”)

试试这个简单的方法:

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!")
以开放(,'r')作为abc的
:
lines=[i代表abc.readlines()中的i,如果len(i)>1]
如果长度(线)>95000:
引发StopIteration(“文件太大!”)

请向我们展示您迄今为止所做的工作。您是否真的需要一个同时适用于和的解决方案?@tripleee理想情况下,这就是我正在寻找的内容。您找到的代码有什么问题?只要在循环中用
if i>95000:raise ValueError(“文件太大”)
替换
pass
。@tripleee以及我找到的-num_lines=sum(1代表打开的行('myfile.txt')),我正在寻找一种合适的错误处理方法,(我对这一点还不熟悉……也许这是一种使用任何类型的异常等来处理此问题的方法)…???请告诉我们您到目前为止做了什么?您真的需要一个同时在和中工作的解决方案吗?@tripleee理想情况下,这就是我正在寻找的问题。您找到的代码有什么问题吗?只需将
过程替换为
如果I>95000:raise ValueError('文件太大')
。@tripleee以及我发现的-num\u lines=sum(1对于open('myfile.txt')中的行,我正在寻找一种合适的错误处理方法,(我对这一点还不熟悉……也许这是一种使用任何类型的异常等来处理此问题的方法)…不错的替代方案,尽管我也对另一个答案投了赞成票。不错的替代方案,尽管我也对另一个答案投了反对票。这是浪费,因为它会在决定之前将整个文件读入内存。如果在100000行之后才知道它们太多,则读取1000万行将不必要地为d分配大量内存ata您永远不会使用,这可能会导致许多服务器上的交换和整体性能下降。这是一种浪费,因为它会在做出决定之前将整个文件读入内存。当您在100000行之后知道它们太多时,读取1000万行将不必要地为您永远不会使用的数据分配大量内存,可能会导致n许多服务器上的交换和整体性能下降。