用Python实现大文本文件切割的方法


Posted in Python onJanuary 12, 2019

在实际工作中,有些场景下,因为产品既有功能限制,不支持特大文件的直接处理,需要把大文件进行切割处理。

当然可以通过UltraEdit编辑工具,或者从网上下载一些文件切割器之类的。但这些要么手工操作太麻烦,要么不能满足自定义需求。

而且,对程序员来说,DIY一个轮子还是有必要的。

Python作为快速开发工具,其代码表达力强,开发效率高,因此用Python快速写一个,还是可行的。

需求描述:

输入:给定一个带列头的csv文件,或者txt文件,或者其他文本文件。

输出:指定单文件内部行数的一系列可区分小文件。

开发环境:Python 3.6

代码如下:

# -*- coding: cp936 -*-
import os
import time
 
def mkSubFile(lines,head,srcName,sub):
 [des_filename, extname] = os.path.splitext(srcName)
 filename = des_filename + '_' + str(sub) + extname
 print( 'make file: %s' %filename)
 fout = open(filename,'w')
 try:
  fout.writelines([head])
  fout.writelines(lines)
  return sub + 1
 finally:
  fout.close()
 
def splitByLineCount(filename,count):
 fin = open(filename,'r')
 try:
  head = fin.readline()
  buf = []
  sub = 1
  for line in fin:
   buf.append(line)
   if len(buf) == count:
    sub = mkSubFile(buf,head,filename,sub)
    buf = []
  if len(buf) != 0:
   sub = mkSubFile(buf,head,filename,sub) 
 finally:
  fin.close()
 
if __name__ == '__main__':
 begin = time.time()
 splitByLineCount('盂县.csv',600000)
 end = time.time()
 print('time is %d seconds ' % (end - begin))

测试结果:

1.4GB的csv文件,13列数据,切分成23个小文件,耗时55秒。

以上这篇用Python实现大文本文件切割的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python自定义函数的创建、调用和函数的参数详解
Mar 11 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
Jun 30 Python
pandas的唯一值、值计数以及成员资格的示例
Jul 25 Python
python版本五子棋的实现代码
Dec 11 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
Dec 28 Python
如何使用Python进行OCR识别图片中的文字
Apr 01 Python
Python Subprocess模块原理及实例
Aug 26 Python
Python enumerate函数遍历数据对象组合过程解析
Dec 11 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
python怎么判断素数
Jul 01 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 Python
python实时获取外部程序输出结果的方法
Jan 12 #Python
python实现控制台打印的方法
Jan 12 #Python
python 自定义对象的打印方法
Jan 12 #Python
python设定并获取socket超时时间的方法
Jan 12 #Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 #Python
Python构建图像分类识别器的方法
Jan 12 #Python
使用python opencv对目录下图片进行去重的方法
Jan 12 #Python
You might like
php简单静态页生成过程
2008/03/27 PHP
PHP 第三节 变量介绍
2012/04/28 PHP
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
使用webpack搭建vue项目实现脚手架功能
2019/03/15 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
python使用turtle库与random库绘制雪花
2018/06/22 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
Django ModelForm操作及验证方式
2020/03/30 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
杭州联环马网络笔试题面试题
2013/08/04 面试题
面向对象概念面试题(.NET)
2016/11/04 面试题
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
药品采购员岗位职责
2014/02/08 职场文书
元宵节晚会主持人串词
2014/03/25 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
学习雷锋活动总结
2014/04/29 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
2014年终个人总结报告
2015/03/09 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
mysql分表之后如何平滑上线详解
2021/11/01 MySQL
Hive常用日期格式转换语法
2022/06/25 数据库