Read a large file with python

python读取大文件

  1. 较pythonic的方法,使用with结构

    • 文件可以自动关闭
    • 异常可以在with块内处理
        with open(filename, 'rb') as f:
            for line in f:
                <do someting with the line>  

最大的优点:对可迭代对象 f,进行迭代遍历:for line in f,会自动地使用缓冲IO(buffered IO)以及内存管理,而不必担心任何大文件的问题。

There should be one – and preferably only one – obvious way to do it.

  1. 使用生成器generator

如果想对每次迭代读取的内容进行更细粒度的处理,可以使用yield生成器来读取大文件

    def readInChunks(file_obj, chunkSize=2048):
        """
        Lazy function to read a file piece by piece.
        Default chunk size: 2kB.
        """
        while True:
            data = file_obj.read(chunkSize)
            if not data:
                break
            yield data
    f = open('bigFile')
    for chunk in readInChunks(f):
        do_something(chunk)
    f.close()
  1. linux下使用split命令(将一个文件根据大小或行数平均分成若干个小文件)
    wc -l BLM.txt  # 读出BLM.txt文件一共有多少行
    # 利用split进行分割
    split -l 2482 ../BLM/BLM.txt -d -a 4 BLM_
    # 将 文件 BLM.txt 分成若干个小文件,每个文件2482行(-l 2482),文件前缀为BLM_ ,系数不是字母而是数字(-d),后缀系数为四位数(-a 4)  

    # 按行数分割
    split -l 300 large_file.txt new_file_prefix
    # 文件大小分割
    split -b 10m server.log waynelog

    # 对文件进行合并:使用重定向,'>' 写入文件  , '>>' 追加到文件中
    cat file_prefix* > large_file

在工作中的日常: 用户信息,log日志缓存,等都是大文件

补充:linecache模块

当读取一个文件的时候,python会尝试从缓存中读取文件内容,优化读取速度,提高效率,减少了I/O操作

linecache.getline(filename, lineno) 从文件中读取第几行,注意:包含换行符
linecache.clearcache() 清除现有的文件缓存
linecache.checkcache(filename=None) 检查缓存内容的有效性,可能硬盘内容发生改变,更新了,如果没有参数,将检查缓存中的所有记录(entries)

    import linecache
    linecache.getline(linecache.__file__, 8)

题目:
现给一个文件400M(该文件是由/etc/passwd生成的),统计其中root字符串出现的次数

    import time
    sum = 0
    start = time.time()
    with open('file', 'r') as f:
        for i in f:
            new = i.count('root')
            sum+=new
    end = time.time()
    print(sum, end-start)

:有时候这个程序比c,shell快10倍,原因就是,python会读取cache中的数据,使用缓存在内部进行优化,减少i/o,提高效率

References : How to read a large file

原文地址:https://www.cnblogs.com/panlq/p/10618852.html

时间: 2024-11-05 13:46:56

Read a large file with python的相关文章

Read Large Files in Python

I have a large file ( ~4G) to process in Python. I wonder whether it is OK to "read" such a large file. So I tried in the following several ways: The original large file to deal with is not "./CentOS-6.5-i386.iso", I just take this fil

How to handle csv file using python

As i need to read something from a csv file using python.  I got something and put it here. Module: csv import csv FILE_FULL_PATH = 'D:\\Work\\script\\My Script\\Book1.csv' def f(): with open(FILE_FULL_PATH,'rb') as csvfile: for row in csv.reader(csv

Java – Reading a Large File Efficiently--转

原文地址:http://www.baeldung.com/java-read-lines-large-file 1. Overview This tutorial will show how to read all the lines from a large file in Java in an efficient manner. This article is part of the “Java – Back to Basic” tutorial here on Baeldung. 2. R

3 Ways to Write Text to a File in Python

https://cmdlinetips.com/2012/09/three-ways-to-write-text-to-a-file-in-python/ 1 with open("myOutFile.txt", "w") as outF: 2 for line in textList: 3 print(line, file=outF) all_lines = ['1', '2', '3'] with open("myOutFile.txt",

github的large file storeage

https://git-lfs.github.com/ 1.从这个网址下载git-lfs-windows-amd64-1.1.0.exe,运行这个安装包 2.然后打开git bash 输入git lfs install 3.根据需求来处理大文件 $ git lfs track "*.wav"Tracking *.wav $ git lfs track "*.asset"Tracking *.asset 这2个命令会在对应的目录下生成不同的.gitattributes

python 提示 :OverflowError: Python int too large to convert to C long

一次在使用orm进行联表查询的时候,出现   Python int too large to convert to C long 的问题: 在分析错误之后,在错误最后面提示中有: File "F:\python\python3.6\lib\sqlite3\dbapi2.py", line 64, in convert_date return datetime.date(*map(int, val.split(b"-"))) 在查看我的model.py文件的时候我的模

python高效运用(十)———文件(File)、输入输出的基本操作

1. Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 2.打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你传递的表达式转换成一个字符串表达式,并将结果写到标准输出如下: 示例1: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2016/9/25 15:12 # @Author : wwyx print "python 是一门面向

python之最强王者(10)———文件(File)、输入输出的基本操作

1. Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 2.打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你传递的表达式转换成一个字符串表达式,并将结果写到标准输出如下: 示例1: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2016/9/25 15:12 # @Author : wwyx print "python 是一门面向

python学习记录8 ----------file文件操作

----------------------------复制菜鸟教程---------------------------- 链接:https://www.runoob.com/python3/python3-file-methods.html ------------------------------------------------------------------------- 对文件进行操作需要三个步骤:1.file.open():2.文件操作:3.file.close() ope