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 = 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:
- dumps():将python中的 字典 转换为 字符串
- loads(): 将 字符串 转换为 字典
- dump(): 将数据写入json文件中
- 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_实战应用_读取大文件相关推荐
- pythonselenium实战 excel读取和写入_Python3.6+selenium2.53.6自动化测试_读取excel文件的方法...
环境: 编辑工具: 浏览器: 安装xlrd 安装DDT 一 分析 1 目录结构 2 导入包 二 代码 import xlrd class ExcelUtil(): def __init__(self, ...
- python读取大文件性能_强悍的Python读取大文件的解决方案
Python 环境下文件的读取问题,请参见拙文 Python基础之文件读取的讲解 这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适 ...
- python读取大文件太慢_强悍的Python读取大文件的解决方案
Python 环境下文件的读取问题,请参见拙文 Python基础之文件读取的讲解 这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适 ...
- python01g内存读取10g文件并排序_将大文件逐行读取到Python2.7中时的内存使用
堆栈溢出, 我正在从事一个涉及一些大文件(10-50Gb)的基因组学项目,我想将这些文件读入Python 2.7进行处理.我不需要将整个文件读到内存中,而是简单地逐行读取每个文件,执行一个小任务,然后 ...
- python读取大文件-Python如何读取、拆分大文件
简述 最近和第三方数据接触较多,数据量也开始陡增,从一开始的1KW行,最大到了1亿行,这让我这个常年处理"小数据'的人有点捉襟见肘.本来数据放在hive中也是可以操作的,但是有时候需求是做一 ...
- C#实战027:socket实现大文件传输
前面写了一个单文件传输的,后来发现当传送的文件大于设置的缓存空间时,文件就会出现丢包的现象,导致文件无法使用,所以为了适应大文件的传输,这里我将代码进行了下修改,实现大文件传输. 不过socket实现 ...
- Python读取大文件的坑与内存占用检测
Python读取大文件的"坑"与内存占用检测 1.read()与readlines() with open(file_path, 'rb') as f:sha1Obj.update ...
- java 读取txt,java读取大文件
java 读取txt,java读取大文件 package com.bbcmart.util; import java.io.File; import java.io.RandomAccessFile; ...
- Windows/Linux上使用fopen相关函数读取大文件
在介绍读取大文件之前,先了解下<cstdint>文件,标准头文件,存放固定宽度整数类型,如int32_t, uint32_t,不管在32位上还是64位上,长度都为4个字节:int64_t, ...
- php读取大文件某行内容,php读取大文件最后几行数据的实现代码
/* * 读取大文件最后几行数据 * by www.jbxue.com */ $file = $handledir.'/venocap.1'; $fp = fopen($file, "r&q ...
最新文章
- OA项目12:系统管理之用户管理
- 有没有一种方法可以缓存GitHub凭证来推送提交?
- 无服务器架构正在蚕食基础设施
- 编写EasyCluster V2.0 Portal主界面时的HTML心得(NOWRAP)
- 为什么说美团终将放弃打车?
- Little Sub and Counting
- linux安装卷管理,Linux安装管理ISCSI卷(initiator端)
- WSARecv() 函数使用解析
- 外参矩阵(旋转矩阵+平移向量)以及外方位元素的关系
- 记录‘launch_simulation‘failed due to earlier errors的一个解决方法
- [转]介绍“Razor”— ASP.NET的一个新视图引擎
- dell linux raid 查看,Ubuntu Linux下Dell服务器使用硬Raid后查看磁盘信息方法
- STC89C52RC烧录程序
- 使用Audition将PCM格式转Wav格式
- 生信技能树课程记录笔记(六)20220530
- Matlab求解微分、积分方程
- 在线查询QQ信息API QQAPI
- WIN10完全卸载anaconda
- 明明没PS,看起来却像PS过的照片!
- java计算机毕业设计科普网站源码+mysql数据库+系统+lw文档+部署