使用python读写大文件

文章介绍了如何处理大文件,避免一次性加载到内存中。通过使用生成器和open()的迭代器读取大文件,以及采用writelines方法分批写入文件以提高效率。分别展示了每行写入、每100行写入和每1000行写入的示例,强调选择合适的批量大小能优化性能。
摘要由CSDN通过智能技术生成

        当读写大文件时,如果文件较大,会一次性全部读取到内存中,容易造成内存不足,所以呢需要对大文件进行批量读写。

1、生成大数据文件

参考博文:python测试写入文件时一次打开open和多次打开open的效率_IT之一小佬的博客-CSDN博客

2、读取大文件

        常见方法有yield生成器和open()自带方法生成迭代器对象。

详见博文:使用python读取大文件_python 读取大文件_IT之一小佬的博客-CSDN博客

3、写入大文件

        对文件的修改,通常有两种模式,一是直接在原文件中进行修改并直接保存,二是对修改之后的文件存储在一个新文件中进行存储。如果遇到大文件,那么就需要使用模式一了。

3.1 小文件内容写入大文件中

        直接将小文件读取到内存中,然后追加写入大文件即可。

3.2 修改大文件中数据

3.2.1 每行数据使用write写入

示例代码:

import time

start_time = time.time()
with open('./data/big_data.txt', 'r', encoding='utf-8') as rf, \
        open('./data/new_big_data.txt', 'a', encoding='utf-8') as af:
    for line in rf:
        if "英语" in line:
            line = line.replace('英语', 'English')
        print(line)
        af.write(line)
print(f"程序耗时:{time.time() - start_time}")

运行结果:

3.2.2 每100行数据使用writelines写入

示例代码:

import time

start_time = time.time()
data_list = []
with open('./data/big_data.txt', 'r', encoding='utf-8') as rf, \
        open('./data/new_big_data2.txt', 'a', encoding='utf-8') as af:
    for line in rf:
        if "英语" in line:
            line = line.replace('英语', 'English')
        print(line)
        data_list.append(line)
        if len(data_list) > 100:
            af.writelines(data_list)
            data_list = []
    if len(data_list) > 0:
        af.writelines(data_list)
print(f"程序耗时:{time.time() - start_time}")

运行结果:

3.2.3 每1000行数据使用writelines写入

示例代码:

import time

start_time = time.time()
data_list = []
with open('./data/big_data.txt', 'r', encoding='utf-8') as rf, \
        open('./data/new_big_data3.txt', 'a', encoding='utf-8') as af:
    for line in rf:
        if "英语" in line:
            line = line.replace('英语', 'English')
        print(line)
        data_list.append(line)
        if len(data_list) > 1000:
            af.writelines(data_list)
            data_list = []
    if len(data_list) > 0:
        af.writelines(data_list)
print(f"程序耗时:{time.time() - start_time}")

运行结果:

综上所述:在上面三个示例代码中,可以看出使用writelines方法,选择适当的行数写入效率是最好的。

参考博文:

Python怎么修改文件内容?Python修改文件内容的3种方法详解 - 优草派

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值