python 读取大文件

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

近期在处理数据时,发现对于几百兆甚至几G的数据,我们是没有办法用notepad++或者sublime等文本编译器打开的,会直接崩溃掉。在程序处理时,也没办法使用普通的文件读法,一下全部加载到内存中。后来查阅网上的几种方法,在这里做个整理。

对于有多行的数据 —— 按行读取

with语句打开和关闭文件,包括抛出一个内部块异常。for line in f文件对象f视为一个迭代器,会自动的采用缓冲IO和内存管理,所以你不必担心大文件。

#If the file is line based
with open(...) as f:
    for line in f:
        process(line) # <do something with line>

参考:https://chenqx.github.io/2014/10/29/Python-fastest-way-to-read-a-large-file/

对于一行或者不好分行的数据 —— 分块读取

对于难以分行读取的文件,可以按照下面的方式。将大文件分割成若干小文件处理,处理完每个小文件后释放该部分内存。这里有一点需要注意,可以根据你自己的处理需求,改变chunk_size的大小,有时候小一点的chunk_size可以读完整个文件,如果太大,还是会爆内存的。

def read_in_chunks(file_object, chunk_size=1024):
    """Lazy function (generator) to read a file piece by piece.
    Default chunk size: 1k."""
    while True:
        data = file_object.read(chunk_size)
        if not data:
            break
        yield data


f = open('really_big_file.dat')
for piece in read_in_chunks(f):
    process_data(piece)

参考:https://www.cnblogs.com/bonelee/p/8446421.html

使用mmap

mmap是一种虚拟内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。

with open(path) as infile:
    m = mmap.mmap(infile, 0, access=mmap.ACCESS_READ)
import mmap

# write a simple example file
with open("hello.txt", "wb") as f:
    f.write("Hello Python!\n")

with open("hello.txt", "r+b") as f:
    # memory-map the file, size 0 means whole file
    mm = mmap.mmap(f.fileno(), 0)
    # read content via standard file methods
    print mm.readline()  # prints "Hello Python!"
    # read content via slice notation
    print mm[:5]  # prints "Hello"
    # update content using slice notation;
    # note that new content must have same size
    mm[6:] = " world!\n"
    # ... and read again using standard file methods
    mm.seek(0)
    print mm.readline()  # prints "Hello  world!"
    # close the map
    mm.close()

关于mmap的介绍:https://docs.python.org/2/library/mmap.html
用法介绍:https://www.cnblogs.com/zhoujinyi/p/6062907.html

Python 高效分割大文件 按行数拆分大文件 阅读详情

相关推荐

Python读取大文件

要理解Python中如何高效读取大文件,我们必须首先从最底层的存储机制和操作系统如何管理文件I/O开始。这不仅是理解上层Python代码行为的基础,更是优化策略的根本所在。硬盘,作为数据持久化存储的核心介质,其物理结构和工作方式直接决定了文件I/O的效率。 对I/O性能的影响:因此,为了高效读取大文件,我们应尽量减少寻道次数和旋转延迟,即尽可能进行顺序读写和大块读写。操作系统管理文件的方式是理解其I/O机制的关键。inode (索引节点):在类Unix文件系统中,每个文件(或目录)都有一个唯一的inode。

宅男很神经 777

Python多进程分块读取大文件的方法

主要介绍了Python多进程分块读取大文件的方法,涉及Python多进程操作与文件分块读取的相关技巧,需要的朋友可以参考下

Pythonpyreadstat 的安装与数据处理功能指南

pyreadstat是一个Python库,专门为统计和数据处理提供支持。它使得Python用户能够读取和写入多种统计文件格式,如SPSS、Stata和SAS等,极大地方便了数据分析和数据处理工作。通过pyreadstat,我们可以轻松地从复杂的统计软件包中提取数据,转换为Python可操作的数据结构(如Pandas DataFrame),反之亦然。在处理大型数据文件时,采用合适的内存管理和数据处理策略对于优化性能至关重要。

weixin_42607969的博客 1335

Python初学(11)两种文件读取和写入

在计算机中,文件都以二进制保存在磁盘中 文本文件和二进制文件 文本文件本质上还是二进制文件,但可用文本编辑器查看 二进制文件不能直接查看,要用对应的软件查看 一、文本文件读取和写入 1.打开文本文件的方法 打开方法 说明 r 以只读的方式打开文件文件指针在文件开头,调用open()时,为选择方法时,默认以只读打开。当文件不存在时,抛出异常 w 以只写的方式打开文件。如果文件存在会被覆盖,如果文件不存在,创建新文件 a 以追加的方式打开文件。如果文件已存在,会

qq_61822522的博客 3209

python读取大文件 Python读取大文件(GB)

最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法。 我们谈到“文本处理”时,我们通常是指处理的内容。Python 将文本文件的内容读入可以操作的字符串变量非常容易。文件对象提供了三个“读”方法...

从零开始学习python --zeropython 2万+

Python 如何处理大文件读取

本文介绍了多种在 Python 中处理大文件的技巧和方法,包括逐行读取、按块读取、使用生成器以及处理二进制文件的方法。通过合理选择合适的文件读取方式,我们可以高效处理超出内存限制的大文件。处理大文件的核心思想是避免将整个文件一次性加载到内存中,而是通过逐步读取、分块处理等技术来降低内存消耗。这些方法在处理大规模数据集、日志文件或二进制文件时非常有用。

chusheng1840的博客 2854

Python 读取大文件

Python读取文件大小大于内存,这么处理就有问题了,会造成MemoryError … 也就是发生内存溢出。那么改如何避免或者定位呢

未来在这儿的专栏 2788

使用python读取大文件

使用python读取大文件

IT之一小佬的博客 7153

python高效读取大文件_python 如何读取大文件

一般的读取文件的方法:with open(file_path, "r") as f:print f.read()或者with open(file_path,"r") as f:for line in f.readlines():print lineread()是一次性把文件内容以字符串的方式读到内存,放到一个字符串变量中readlines() 是一次性读取所有内容,并按行生成一个list因一次性读...

weixin_39881155的博客 2101

python 读取大文件_python读取大文件

最近在学习python的过程中接触到了python文件读取python读取文件一般情况是利用open()函数以及read()函数来完成:f = open(filename,'r')f.read()这种方法读取文件,即读取远远大小小于内存的文件显然没有什么问题。但是如果是将一个10G大小的日志文件读取,即文件大于内存的大小,这么处理就有问题了,会造成MemoryError ... 也就是发生...

weixin_39618456的博客 131

linecache安装包(python2和python3兼容)

linecache模块可以读取文件并将文件内容缓存起来,方便后面多次读取。这个模块原本被设计用来读取Python模块的源代码,所以当一个文件名不在指定路径下的时候,模块会通过搜索路径(search path)来尝试读取文件

Python多线程超大日志文件解析转储写入mysql/postgresql

Python多线程超大日志文件解析转储,实现几十G超大文件并发处理。 实现功能如下: 1.多线程分块解析某超大日志文件,实现超大文件多线程分块处理 2.多线程写入数据到数据库postgresql/mysql 3.线程之间通过队列queue通讯 4.出错消息通过logging写日志 @author: ray ----------web日志格式如下----------------- 21.106.138.118 - - [02/Mar/2015:16:27:22 +0800] "GET / HTTP/1.1" 200 53 21.106.138.118 - - [02/Mar/2015:16:27:22 +0800] "GET /login.jsp HTTP/1.1" 200 5464 21.106.138.118 - - [02/Mar/2015:16:27:22 +0800] "GET /CMFKMProject/KMProjectWeb/KMProWeb_Css/CM.css HTTP/1.1" 200 5941

python读取大文件-使用Python读取大文件的方法

背景最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法。准备工作我们谈到“文本处理”时,我们通常是指处理的内容。Python 将文本文件的内容读入可以操作的字符串变量非常容易。文件对象提供了三个“读”方法: .read()、.readline() 和 .readlin...

weixin_37988176的博客 360

python读取大文件太慢_强悍的Python读取大文件的解决方案

Python 环境下文件读取问题,请参见拙文 Python基础之文件读取的讲解这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适合读取大文件。1. read() 接口的问题f = open(filename, 'rb')f.read()我们来读取 1 个 nginx 的日至文件,规模为 3Gb 大小。read() 方法执行的操作...

weixin_39923806的博客 2714

python读取大文件目录_python简单读取大文件的方法

python简单读取大文件的方法更新时间:2016年07月01日 10:42:14 作者:holybin这篇文章主要介绍了python简单读取大文件的方法,通过非常简单的方式实现对GB级别大文件读取功能,并给出了外文参考站点stackoverflow的参考地址,需要的朋友可以参考下本文实例讲述了python简单读取大文件的方法。分享给大家供大家参考,具体如下:Python读取大文件(GB级别...

weixin_39526185的博客 84

python读取大文件内容_总算发现python如何读取大文件

总算发现python如何读取大文件日期:2019-08-25 12:18:37浏览:332核心提示:在处理大数据时,有可能会碰到好几个G大小文件。如果通过一些工具(例如:NotePad++)打开它,会发生错误,无法读取任何内容。在处理大数据时,有可能会碰到好几个 G 大小文件。如果通过一些工具(例如:NotePad++)打开它,会发生错误,无法读取任何内容。那么python如何读取大文件呢?一...

weixin_39656853的博客 348

python 读取大文件优化示例

本文介绍了多种高效读取大文件的方法,包括逐行读取(内存占用O(1))、分块读取(适合超大文件)、内存映射(高性能)和缓冲读取(平衡性能与内存)。针对CSV、JSONLines等结构化数据提供了专用处理方案,并展示了内存高效的单词计数实现。关键优化建议包括:使用生成器、合理设置块大小、进度监控和错误处理。根据文件大小推荐不同方案:小于100MB直接读取,100MB-1GB用逐行读取,大于1GB采用内存映射或分块处理。文末附有完整Python实现代码,包含文件大小检测、多种读取方式和结构化数据处理示例,可有效处

灵光通码的博客 1148
上一篇: pytorch 学习笔记6 —— 一步步解析nn模块
下一篇: Ubuntu 反复登陆解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值