问题:有一个比较大的文件,从几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之前,因为StopIteration继承了Exception