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:breakyield dataf = 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 linecachelinecache.getline(linecache.__file__, 8)

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

    import timesum = 0start = time.time()with open('file', 'r') as f:for i in f:new = i.count('root')sum+=newend = 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

Read a large file with python相关推荐

  1. Java – Reading a Large File Efficiently--转

    原文地址:http://www.baeldung.com/java-read-lines-large-file 1. Overview This tutorial will show how to r ...

  2. 80m的mysql文件要导入多久_mysql导入数据库文件最大限制更改解决方法:You probably tried to upload too large file...

    最近一次在用phpmyadmin导入mysql数据库时,偶的15M的数据库不能导入,mysql数据库最大只能导入2M.. phpmyadmin数据库导入出错: You probably tried t ...

  3. windows安装 Git Large File Storage大文件下载工具ge

    下载地址 导航到 git-lfs.github.com 并单击Download开始下载 git-lfs的用法指南 验证安装成功 打开Git Bash 验证安装成功,使用命令 git lfs insta ...

  4. esp8266 刷 MicroPython固件,并使用MicroPython File Uploader python文件上传工具上传python文件

    1.使用模块esp8266 2.进入固件官网:https://micropython.org/download/esp8266/ 3.将下载的esp8266-20220618-v1.19.1.bin放 ...

  5. python的错误 File E:/Python 的代码大大/文件的读写操作.py, line 1 SyntaxError: Non-UTF-8 code starting with '\xcf

    错误: File "E:/Python 的代码大大/文件的读写操作.py", line 1 SyntaxError: Non-UTF-8 code starting with '\ ...

  6. git 上传大文件失败,提示remote: error: GH001: Large files detected. You may want to try Git Large File Storage

    commit 时提示错误信息 Writing objects: 100% (231/231), 112.31 MiB | 18.65 MiB/s, done. Total 231 (delta 84) ...

  7. batch downloading file in python

    import urllib.requesturl_prefix = 'http://nptel.ac.in/courses/111103021/'for i in range(1,42):url = ...

  8. Git LFS(Large File Storage)使用简介

    前言 将二进制文件与存储库文件的其余部分一起存储的最佳方法之一是使用 Git 大型文件存储 (LFS).Git LFS 用称为 OID 的 SHA-256 哈希指针替换音频样本.视频.数据集和图形等大 ...

  9. python 读取文本文件_如何在Python中读取大文本文件

    python 读取文本文件 Python File object provides various ways to read a text file. The popular way is to us ...

最新文章

  1. python【Matlibplot绘图库】-主要概念
  2. vue切换class_Vue点击切换Class变化,实现Active当前样式操作
  3. 技术分享:游戏中的 2D 可见性
  4. CSS实现的阴影效果
  5. 在Linux下编写C++程序,使用gcc编译c++出错
  6. 大变革!苹果设计团队三名核心元老离职
  7. 计算机复试考研专业课,2018计算机考研专业课复试复习攻略
  8. android点滴9:模拟器中如何输入中文
  9. samba服务器的设置
  10. win10字体模糊发虚怎么回事?win10字体模糊发虚电脑问题还是系统问题?
  11. 方舟生存进化服务器怎么开?方舟生存进化架设服务器教程
  12. 数据包络分析方法与maxdea软件_奥林巴斯OmniScan X3探伤仪软件升级,缺陷图像无处藏...
  13. 微模块、冷通道监控系统解决方案
  14. 电脑分屏没有声音_电脑分屏声音怎么分
  15. sklearn 5.18.3 SGD - Maximum margin separating hyperplane
  16. java中的super和this_在Java中super和this的区别
  17. 太真实,北上广深年薪20W、30W、40W的程序员的生活状态!
  18. 《计算机网络面试题目总结》
  19. 地址转换成百度经纬度,数据太多!不愿意花钱?
  20. 11g ocm认证考试经历

热门文章

  1. 计算机网络(二)计算机网络 体系结构和OSI参考模型 | 思维导图
  2. 双指针算法之快慢指针(二):力扣【寻找链表的第N个点】leetcode-876、19
  3. 基于ZXing的二维码,你可以这样改造它
  4. Oracle 解决4031错误
  5. 宜信(刘志波)技术培训
  6. concat 不是可以识别的 内置函数名称。_新特性解读 | MySQL 8.0 窗口函数详解
  7. rfc3095中文版_RFC3095
  8. python 生成001开始的序号_你知道嘛:Python内建序列通用操作有6种实现方法(赶快收藏)...
  9. linux中find命令的35个实际例子
  10. Dubbo 迈出云原生重要一步 - 应用级服务发现解析