切分一个大文件并分装成Excel文件
来源:互联网 发布:财务审批流程软件 编辑:程序博客网 时间:2024/06/07 02:38
最近在搞活动,给用户发代金券,发了大约300万张,昨天遇到审计提出的要求,要求把用户的id和手机号做个Excel发给他们。我第一反映是应该电话通知他们,这不合适,但沟通的结果是,文件照做,分成多个文件,保证每个文件能打开。
于是有两个要解决的问题,第一:把大文件切分成小文件。第二,把文本转成excel。
目前的情况,文件行数300万,列数2中间以竖线("|")分隔,文件大小150M。
第一:解决切分大文件为小文件的方法:
(1)按大小分,每15M分为一个文件,共10个split -b 15m userIdMobile.txt m15_ 由于总文件大小为150M,每个文件15M会生成10个文件,m15_是文件的前缀,如果不指定,则默认为x,不指生成的文件为xaa,xab,xac,...xaj命名为m15_ aa m15_ ab...m15_aj,但是按文件大小分的问题在于,有时候一行会被拆开,比如把用户的id分到两个文件中,所以在处理的时候采用以行分的情况为多。
(2)按行分,文件总行数300万,每个文件30万行,则生成10个文件, split -l 300000userIdMobile.txt line30000_,生成的文件为line30000_aa到line30000_aj
第二:把文件转成Excel文件,最简单的想法是把刚才的文本文件直接改为以逗号分隔的.csv文件,双击自动使用excel打开,cat line30000_aa | tr "|" "," > line30000_aa.cvs ,通过把竖线替换为逗号并重新输入到文件line30000_aa.cvs 中,实现刚才的想法。结果打开后,由于用户ID过长,以科学计数法显示,而且一但编辑过一个单元格,数据的最低位被改成了0,导致数据错误。
于是,需要使用程序把内容转换一下:
由于文件的行数超过了65535,所以不能使用2003格式的xls,之前使用的写文件的库xlrd(https://pypi.python.org/pypi/xlrd)被我抛弃了,改用openpyxl( https://pypi.python.org/pypi/openpyxl)
[下载,及安装如下:
wget https://pypi.python.org/packages/source/o/openpyxl/openpyxl-1.7.0.tar.gz --no-check-certificate
tar -zxvf openpyxl-1.7.0.tar.gz
cd openpyxl-1.7.0
python setup.py install】
源码:
#!/usr/bin/env python# -*- coding: utf-8 -*-__author__ = 'zhang-long'import os,sysfrom openpyxl.workbook import Workbook#ExcelWriter,封装了很强大的excel写的功能from openpyxl.writer.excel import ExcelWriterif __name__ == '__main__': base = "line30000_a" ch = ord('a') #97 for i in range(10): file_name = base + chr(ch + i) file = open(file_name) lines = file.readlines() w = Workbook() #新建一个excelWriter ew = ExcelWriter(workbook = w) ws = w.worksheets[0] row = 0L for line in lines: # user_id|mobile # 123|13426301234 arrs = line.split("|") if len(arrs) == 2: ws.cell(row=row, column=0).value = "'%s" % arrs[0] ws.cell(row=row, column=1).value = "'%s" % arrs[1] row +=1 ew.save(filename = "%s.xlsx" % file_name) file.close()
- 切分一个大文件并分装成Excel文件
- linux split命令切分大文件
- EXCEL:创建一个新的EXCEL文件并保存
- excel文件的多个sheet表合并成一个csv文件并导入数据库
- python读取大文件并逐行写入另外一个文件
- 如何在VB中打开一个Excel文件并调用Excel文件自身的VBA宏?
- Linux命令之大文件切分与合并
- Linux命令之大文件切分与合并
- Linux命令之大文件切分与合并
- Linux命令之大文件切分与合并
- 写一个excel文件
- Windows下切分文件
- C语言产生一个大txt文件,并进行排序
- 读取EXCEL文件并查询
- 上传并解析excel文件
- PHP读取大excel文件
- 如何将多个excel文件合并成一个
- c# 选择excel文件,并打开excel
- win7下sqlserver 2000安装补丁
- C++接口的设计——析构函数
- WebService部署时“需要ORACLE客户端软件8.1.7或更高版本”等问题的解决
- 封装获取MAP
- Android基础之Adapter
- 切分一个大文件并分装成Excel文件
- OCP-1Z0-052-V8.02-135题
- 安装与配置JSTL
- 分类栏目Thinkphp实现无限极分类
- 关于快速分享代码和分享指定的程序的代码,如分享到新浪微博
- mysql 查询缓存 query_cache_type
- QT原理之显示机制
- Spring培训笔记
- oracle数据库完全卸载的方法