zoukankan      html  css  js  c++  java
  • 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之前,因为StopIteration继承了Exception

  • 相关阅读:
    树链剖分学习笔记(未完)
    VI 配置文件(略全)
    linux之awk
    指针之基础篇
    linux之sed
    sqlplus命令手册
    Leetcode复习: 堆和栈
    leetcode 的shell部分4道题整理
    Regular Expression Matching [leetcode]
    深入浅出JAVA
  • 原文地址:https://www.cnblogs.com/zhanghaibin16/p/12326364.html
Copyright © 2011-2022 走看看