Python基础 — 文件操作

1.有一个jsonline格式的文件fifile.txt大小约为10K

def get_lines():
    with open('file.txt', 'rb') as f:
        return f.readlines()

if __name__ == '__main__':
    for e in get_lines():
        process(e)  # 处理每一行数据
        现在要处理一个大小为10G 的文件,但是内存只有 4G ,如果在只修改 get_lines 函数而其他代码保持不变的情况下,应该如何实现?需要考虑的问题都有那些?
def get_lines():
    with open('file.txt', 'rb') as f:
        for i in f:
            yield i
        最好设置下每次返回的行数,否则读取次数太多。
def get_lines(): 
    l = []
    with open('file.txt','rb') as f: 
        data = f.readlines(60000)
    l.append(data) 
    yield l

        Pandaaaa906提供的方法:

from mmap import mmap


def get_lines(fp):
    with open(fp, "r+") as f:
        m = mmap(f.fileno(), 0)
        tmp = 0
        for i, char in enumerate(m):
            if char == b"\n":
                yield m[temp: i+1].decode()
                tmp = i + 1
                

if __name__ == "__main__":
    for i in get_lines("fp_some_huge_file"):
        print(i)
        要考虑的问题有:内存只有4G 无法一次性读入 10G 文件,需要分批读入分批读入数据要记录每次读入数据的位置。分批每次读取数据的大小,太小会在读取操作花费过多时间。
https://stackoverflflow.com/questions/30294146/python-fastest-way-to-process-large-fifile

python使用mmap模块实现进程间通信与文件映射

深度分析mmap

2.补充缺失的代码

def print_directory_contents(sPath): 
"""
这个函数接收文件夹的名称作为输入参数
返回该文件夹中文件的路径
以及其包含文件夹中文件的路径
"""
import os
for s_child in os.listdir(s_path):
    s_child_path = os.path.join(s_path, s_child) 
    if os.path.isdir(s_child_path):
        print_directory_contents(s_child_path) 
    else:
        print(s_child_path)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值