最近,需要用python批量处理一些超过4G的文本数据,在此记录一些处理思路。

1 文本查看

拿到新数据,总是想先打开数据,看看字段和数据情况。然而,我的电脑运存只有16G,超过4G的文本数据如果用记事本或notepad++等文本编辑器直接打开,会一下子涌入运存中,打开很慢或者直接打不开。

EmEditor软件读取大文件很方便。不是免费的,需要注册:EmEditor (Text Editor) – Text Editor for Windows supporting large files and Unicode!

2 文本读取

2.1 文本分块读取

import pandas as pdtable = pd.read_csv(r"G:data.txt",sep = '\t', #制表符分隔header = None, #我这份数据无表头encoding = 'utf-8',error_bad_lines = False, #遇到错误数据行忽略warn_bad_lines = True,iterator=True, #开启迭代器chunksize=10000 #读取10000个数据为一个块)path = r"G:\test"i = 0
for item in table:i += 1print("正在处理第{}个文件".format(i))item.to_csv(path + "_test_" + str(i) + ".csv", index=False,encoding = 'utf-8')

2.2 中文文本编码获取

用pandas的read_csv读取中文文本时,首先要知道文本的编码是什么,并在encoding这个参数这里设置正确的编码。否则,读取到的数据会是乱码。EmEditor软件可以直接查看文本编码和文本分隔符类型。

也可以python中的chardet包来获取文本编码。

#方法一
import pandas as pd   import os  import chardetdef get_encoding(filename): """ 返回文件编码格式,因为是按行读取,所以比较适合小文件""" with open(filename,'rb') as f: return chardet.detect(f.read())['encoding']original_file = r"G:\data.txt"print(get_encoding(original_file))#方法二
from chardet.universaldetector import UniversalDetectororiginal_file = r"G:\data.txt"usock = open(original_file, 'rb')
detector = UniversalDetector()
for line in usock.readlines():detector.feed(line)if detector.done: break
detector.close()
usock.close()
print (detector.result)#chardet不可能总是正确的猜测。如果你需要正确处理样本,你真的需要知道它们的编码

2.3 中文文本编码转换

EmEditor软件可以转换编码,也可以用如下代码转换编码。下面的代码是将编码转换为“utf-8”。

import codecs
def handleEncoding(original_file,newfile):#newfile=original_file[0:original_file.rfind(.)]+'_copy.csv'f=open(original_file,'rb+')content=f.read()#读取文件内容,content为bytes类型,而非string类型source_encoding='utf-8'#####确定encoding类型try:content.decode('utf-8').encode('utf-8')source_encoding='utf-8'except:try:content.decode('gbk').encode('utf-8')source_encoding='gbk'except:try:content.decode('gb2312').encode('utf-8')source_encoding='gb2312'except:try:content.decode('gb18030').encode('utf-8')source_encoding='gb18030'except:try:content.decode('big5').encode('utf-8')source_encoding='big5'except:try:content.decode('cp936').encode('utf-8')source_encoding='cp936'except:content.decode('gbk').encode('utf-8')source_encoding='gbk'f.close()#####按照确定的encoding读取文件内容,并另存为utf-8编码:block_size=10000with codecs.open(original_file,'r',source_encoding) as f:with codecs.open(newfile,'w','utf-8') as f2:while True:content=f.read(block_size)if not content:breakf2.write(content)original_file = r"G:\data.txt"
newfile = r"G:\data_new.txt"
handleEncoding(original_file,newfile)

2.3 文本并行处理

想对分块后的数据,同时运行函数Fuction_test(x),考虑并行处理。

#GPU并行 dask包
还在研究中……

#CPU并行 joblib包的Parallel函数
还在研究中……

from joblib import Parallel, delayed def Fuction_test(x):y = x + 10return yParallel(n_jobs=-1)(delayed(Fuction_test)(item) for item in table)

Python处理大数据量文本数据思路相关推荐

  1. 计算机视觉:从数据量、数据质量、数据复杂度、数据隐私介绍图片数据处理难度

    本文重点 计算机视觉是一门研究如何让计算机处理和理解图像的学科,其应用范围非常广泛,包括图像识别.目标检测.人脸识别.车辆识别.医学图像处理等.在计算机视觉领域中,图片数据的处理是非常重要的一环,但也 ...

  2. Mysql大数据量查询优化的思路

    项目场景: Mysql大表查询优化,理论上千万级别以下的数据量Mysql单表查询性能处理都是可以的. 问题描述: 在我们线上环境中,出现了mysql几千万级别的日志查询.几百万级别的黑名单库查询分页查 ...

  3. python处理大数据量json数据的方法_python-利用json模块处理json数据几个函数总结...

    1.前言 json是一种轻量级的数据交换格式,它是JavaScript的子集,易于人阅读和编写. 前端和后端进行数据交互,其实就是JS和Python进行数据交互. 接口间或者前后端间的语言不一致,不同 ...

  4. python爬虫大作业爬多少数据_爬虫大作业

    1.选一个自己感兴趣的主题(所有人不能雷同). 2.用python 编写爬虫程序,从网络上爬取相关主题的数据. 3.对爬了的数据进行文本分析,生成词云. 4.对文本分析结果进行解释说明. 5.写一篇完 ...

  5. 大数据的说法 正确的是_数据量——让数据分析师永远头疼的指标

    在现在社会的节奏里,IT部门的脚步是停不下来的,那么对他们来说,大数据的到来意味着一系列新的挑战.那么,不可避免的就是,有一些挑战就会远远超过现有的令人头疼的问题,这就意味着企业需要新的数据管理平台. ...

  6. Python深度学习之处理文本数据

    Deep Learning with Python 这篇文章是我学习<Deep Learning with Python>(第二版,François Chollet 著) 时写的系列笔记之 ...

  7. 大数据量树形数据表格展示, 虚拟表格,el-table, umy-ui, 表格懒加载

    1. 出现的问题 要展示树形数据表格,根据当前点击的表格行去请求新的数据并展示, 基于这种情况遇到以下问题 1). 当树形表格数据层级大于五级且数据量较多时, 浏览器崩溃 2). 当数据条数展示超出5 ...

  8. 打破数据量瓶颈 数据堂推出超大规模英语发音词典

    英语是最具影响力的全球性交流语言之一,与其相关的英语语音识别系统也在学术界和工业界受到广泛关注. 英语语音识别技术取得了非常可观的落地应用成果,AI企业和相关机构持续发力,致力于不断提升英语语音识别准 ...

  9. kettle 提交数据量_Kettle数据同步速度调优记录

    Msyql到Vertica 1.mysql中在openshop 数据库中选择其中一个300W左右数据的表 create table ip_records_tmp_01 AS SELECT * FROM ...

最新文章

  1. android 自定义核心服务
  2. graphpad做折线图坐标轴数字_多组数据制作折线图,四步让你的图表实用又美观,老板看了都说好...
  3. [ATF]-ATF文档和代码的深度解读
  4. stmt在java中的应用_JDBC技术基础总结转载,非原创
  5. 今日arXiv精选 | 9篇ICCV 2021最新论文
  6. TomcatNginx源码笔记分析
  7. 终极Java日志字典:开发人员最常记录的单词是什么?
  8. alientek ministm32液晶显示程序_佳显12864中文字库液晶专业生产液晶显示模块
  9. 企业实战04:Oracle数据库_管理表
  10. jQuery.理解选取更新范围
  11. NYOJ 58 步数最少 【BFS】
  12. angular学习笔记
  13. React+Webpack+Antd+Babel 兼容低版本浏览器(上)
  14. C# 创建XML文档
  15. struts如何使用命名空间_Python基础篇:作用域和命名空间
  16. 【MySQL源码】01 MySQL源码总述
  17. 杭州银行面试题【杭州多测师】【杭州多测师_王sir】
  18. crc java代码_Java ZipEntry getCrc()用法及代码示例
  19. Vivo Android9.0 精简内置应用列表
  20. 天使轮和种子轮投资降温!2019风投趋势如何走?

热门文章

  1. 如何选购晨检机器人_扫地机器人好不好用?如何选购?答案在这
  2. 添加halcon图像显示控件_初级应用实战来咯!C#联合Halcon读取图像,带讲解!!...
  3. mysql charindex_mysql中替代charindex的函数substring_index、find_in_set | 学步园
  4. php处理二进制,PHP应用:PHP处理二进制数据的实现方法
  5. java split()方法_Java 性能优化的 50 个细节(珍藏版)
  6. centos ipv6 网卡_CentOS 6配置IPv6地址
  7. java内存 phd文件抓取_您可以从IBM PHD Java堆转储中提取字符串的值吗?
  8. mysql开发java心得_关于mysql 一些优化心得
  9. 图形界面不卡的linux,图形化界面linux(linaro)的安装小结
  10. 数据库中的实体、元组、字段、属性、码、分量、依赖关系、完全部份传递依赖、范式等你了解吗?【笔记自用】