python处理大文件

问题:有一个比较大的文件,从几M到1G,如何快速获取其中的某一行?

解决方式:

如下,采用for in文件迭代器的方式,在加一个行计数器即可。禁止采用f.readline()的方式,readline效率极其低下,readlines对内存消耗过大。

def fn(which_line):
    f = open("abc.txt", "rt")
    counter = 0    
    for line in f:
        counter += 1
        if which_line == counter:
            print("find this line:{}".format(line))
            break    

问题:python读取文件时,如何判断文件是否到了末尾?

解决方式:

1)判断line的内容是否为空,即 if line == "", 则认为已经到了文件末尾,原因是空格实际也存在换行符。

2)捕获特定异常StopIteration。原因是在遍历的时候,我们不知道什么时候会跳出循环,

跳出循环后,我们可以给循环外部加一个   next(f)    语句,用异常捕获语句处理此行代码,如果捕获到了,则说明肯定到了文件末尾

def fn():
    f = open("abc.txt", "rt")
    for line in f:
        print(line)

    try:
        next(f)
        # 此处前后可加其他处理语句
    except StopIteration:
        is_file_end = True
    except Exception as e:
        pass
    finally:
     if f:
            f.close()
       do something else  

注意: StopIteration捕获语句必须在Exception之前,因为Exception包含了StopIteration异常

猜你喜欢

转载自www.cnblogs.com/zhanghaibin16/p/12326364.html