IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python_yield_实战应用_读取大文件 -> 正文阅读

[Python知识库]Python_yield_实战应用_读取大文件

  • 当我们在操作大文件(GB以上)时,最简单的是要把文件的一行一行全部取出来放到容器里面,这时会加载这个大文件到我们的内存空间中,但我们可能担心自己电脑内存不足。使用yield这个关键字便可以优雅的处理这个问题。
    关于yield的基础概念可以参阅
    https://blog.csdn.net/wyh1618/article/details/120371494?spm=1001.2014.3001.5501
def read_tab(fp: str, n: int) -> Iterable[List[str]]:
    i = 0
    lines = []  # a buffer to cache lines
    with open(fp, mode='rb') as f:
        # f = f.read()
        next(f)
        for line in f:
            i += 1
            lines.append(line.strip())  # append a line
            if i >= n:
                yield lines
                # reset buffer
                i = 0
                lines.clear()
    # remaining lines
    if i > 0:
        yield lines


lines_gen = read_tab(filename, 1000)  # 1000_yield
for lines in lines_gen:
    for each_l in lines:
        each_l_str = str(each_l, encoding="gbk")
        # print(each_l_str)
        each_l_list = list(each_l_str.split('\t'))
  • 再就是注意在Linux机器下读文件时要注意编码问题,跟Windows下处理文件还是有点区别的。
def save_json_file(filename):
    lines_gen = read_tab(filename, 1000) 
    dict_all = dict()
    for lines in lines_gen:
        for each_l in lines:
            each_l_str = str(each_l, encoding="gbk")
            each_l_str = each_l_str.split('\t')
            dict_all[each_l_str[0]] = each_l_str[5]
    jsObj = json.dumps(dict_all, indent=4, ensure_ascii=False)
    fileObject = open('JsonFileNewTab.json', mode='w', encoding='utf-8')
    fileObject.write(jsObj)
    fileObject.close()
  • Python处理Json小tips:
  1. dumps():将python中的 字典 转换为 字符串
  2. loads(): 将 字符串 转换为 字典
  3. dump(): 将数据写入json文件中
  4. load():把文件打开,并把字符串变换为数据类型
def find_diffs_tab(file_name):
    old_files = {}
    with open('JsonFileOldTab.json', mode='r', encoding='utf-8') as load_old:
        old_files = json.load(load_old)

    new_files = {}
    with open('JsonFileNewTab.json', mode='r', encoding='utf-8') as load_new:
        new_files = json.load(load_new)

    all_have = old_files.keys() & old_files.keys()  # 共有的key
    not_all_have = old_files.keys() ^ new_files.keys()  # 不共有的key
    old_have_new_not = list(old_files.keys() - new_files.keys())  # 旧有新无
    new_have_old_not = list(new_files.keys() - old_files.keys())  # 旧无新有
    all_items = old_files.items() & new_files.items()  # 相同的键值对
    all_differ = set(old_files.items()) ^ set(new_files.items())  # 所有差异

    diff = old_files.keys() & new_files
    diff_values = [(k, old_files[k], new_files[k]) for k in diff if old_files[k] != new_files[k]]
    # 相同key,不同value

上述这个例子其实是处理两个大数据库文件某个字段的差异性,想起用Json去比较,比在数据库中两表直接join要快很多。

完整代码库整理完再更新。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 13:57:17  更:2022-01-08 13:59:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:38:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码