• 当我们在操作大文件(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 = 0lines = []  # a buffer to cache lineswith open(fp, mode='rb') as f:# f = f.read()next(f)for line in f:i += 1lines.append(line.strip())  # append a lineif i >= n:yield lines# reset bufferi = 0lines.clear()# remaining linesif i > 0:yield lineslines_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()  # 共有的keynot_all_have = old_files.keys() ^ new_files.keys()  # 不共有的keyold_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_filesdiff_values = [(k, old_files[k], new_files[k]) for k in diff if old_files[k] != new_files[k]]# 相同key,不同value

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

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

Python_yield_实战应用_读取大文件相关推荐

  1. pythonselenium实战 excel读取和写入_Python3.6+selenium2.53.6自动化测试_读取excel文件的方法...

    环境: 编辑工具: 浏览器: 安装xlrd 安装DDT 一 分析 1 目录结构 2 导入包 二 代码 import xlrd class ExcelUtil(): def __init__(self, ...

  2. python读取大文件性能_强悍的Python读取大文件的解决方案

    Python 环境下文件的读取问题,请参见拙文 Python基础之文件读取的讲解 这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适 ...

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

    Python 环境下文件的读取问题,请参见拙文 Python基础之文件读取的讲解 这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适 ...

  4. python01g内存读取10g文件并排序_将大文件逐行读取到Python2.7中时的内存使用

    堆栈溢出, 我正在从事一个涉及一些大文件(10-50Gb)的基因组学项目,我想将这些文件读入Python 2.7进行处理.我不需要将整个文件读到内存中,而是简单地逐行读取每个文件,执行一个小任务,然后 ...

  5. python读取大文件-Python如何读取、拆分大文件

    简述 最近和第三方数据接触较多,数据量也开始陡增,从一开始的1KW行,最大到了1亿行,这让我这个常年处理"小数据'的人有点捉襟见肘.本来数据放在hive中也是可以操作的,但是有时候需求是做一 ...

  6. C#实战027:socket实现大文件传输

    前面写了一个单文件传输的,后来发现当传送的文件大于设置的缓存空间时,文件就会出现丢包的现象,导致文件无法使用,所以为了适应大文件的传输,这里我将代码进行了下修改,实现大文件传输. 不过socket实现 ...

  7. Python读取大文件的坑与内存占用检测

    Python读取大文件的"坑"与内存占用检测 1.read()与readlines() with open(file_path, 'rb') as f:sha1Obj.update ...

  8. java 读取txt,java读取大文件

    java 读取txt,java读取大文件 package com.bbcmart.util; import java.io.File; import java.io.RandomAccessFile; ...

  9. Windows/Linux上使用fopen相关函数读取大文件

    在介绍读取大文件之前,先了解下<cstdint>文件,标准头文件,存放固定宽度整数类型,如int32_t, uint32_t,不管在32位上还是64位上,长度都为4个字节:int64_t, ...

  10. php读取大文件某行内容,php读取大文件最后几行数据的实现代码

    /* * 读取大文件最后几行数据 * by www.jbxue.com */ $file = $handledir.'/venocap.1'; $fp = fopen($file, "r&q ...

最新文章

  1. OA项目12:系统管理之用户管理
  2. 有没有一种方法可以缓存GitHub凭证来推送提交?
  3. 无服务器架构正在蚕食基础设施
  4. 编写EasyCluster V2.0 Portal主界面时的HTML心得(NOWRAP)
  5. 为什么说美团终将放弃打车?
  6. Little Sub and Counting
  7. linux安装卷管理,Linux安装管理ISCSI卷(initiator端)
  8. WSARecv() 函数使用解析
  9. 外参矩阵(旋转矩阵+平移向量)以及外方位元素的关系
  10. 记录‘launch_simulation‘failed due to earlier errors的一个解决方法
  11. [转]介绍“Razor”— ASP.NET的一个新视图引擎
  12. dell linux raid 查看,Ubuntu Linux下Dell服务器使用硬Raid后查看磁盘信息方法
  13. STC89C52RC烧录程序
  14. 使用Audition将PCM格式转Wav格式
  15. 生信技能树课程记录笔记(六)20220530
  16. Matlab求解微分、积分方程
  17. 在线查询QQ信息API QQAPI
  18. WIN10完全卸载anaconda
  19. 明明没PS,看起来却像PS过的照片!
  20. java计算机毕业设计科普网站源码+mysql数据库+系统+lw文档+部署

热门文章

  1. 小爱同学控制ESP8266点灯
  2. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第一章 课后答案
  3. 2019《中国智慧城市建设产业全景图谱》
  4. java 本地文件上传到服务器,java本地文件上传到远程服务器
  5. 通过gps计算间距(WGS84坐标系)
  6. Spotfire 对 列 数据进行自定义排序
  7. 解决hash冲突的三种方法
  8. zynq7000从emmc启动,使用ext4文件系统
  9. 易辅客栈第六套零基础开发商业脚本_网页游戏篇
  10. 如何用R语言做深度学习