最近在搞活动,给用户发代金券,发了大约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_ aam15_ ab...m15_aj,但是按文件大小分的问题在于,有时候一行会被拆开,比如把用户的id分到两个文件中,所以在处理的时候采用以行分的情况为多。
(2)按行分,文件总行数300万,每个文件30万行,则生成10个文件,cat userIdMobile.txt | split -l 300000 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,sys
from openpyxl.workbook import Workbook
#ExcelWriter,封装了很强大的excel写的功能
from openpyxl.writer.excel import ExcelWriter
if __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()
分享到:
相关推荐
java开发的文件,里面有源码,用于切分大数据文件,并且支持合并切分后的文件,主要用于文件的转移
CC# 如何 切分组合大尺寸文件 使用WinRAR压缩文件 使用WinRAR解压缩文件 将文件转换成网页 显示帮助文件内容 显示帮助文件索引
java开发的文件,里面有源码,用于切分大数据文件,并且支持合并切分后的文件,主要用于文件的转移
按行把一个txt文件平均拆分成N个txt文件,结果是一行文本组成一个txt文件,适用于语料的按行切分。
由公司的项目需要根据日期和文件大小切分log4j日志,所以实现来该appender。本人测试通过,并且在公司的其它项目中已有线上使用,暂时还没发现问题。本人代码有写得不好或者错误的地方,欢迎大家指正,谢谢!!!
C#源码,分割文件,C#切分组合文件
由公司的项目需要根据日期和文件大小切分log4j日志,所以实现来该appender。本人测试通过,并且在公司的其它项目中已有线上使用,暂时还没发现问题。本人代码有写得不好或者错误的地方,欢迎大家指正,谢谢!!!
1.把pdf文档拖动到此exe上面 2.在相同文件夹生成同名前缀的切分后的小pdf文件 3.每个小文件25页 同Go语言编写 不得用于违法活动 仅限个人使用
C#超大文件分割工具,可对任意文件(按指定数目、指定大小)进行分割拆解 ,以便于移动、复制 和 存储。 一键分割、一键合并。 C#超大文件分割工具,可对任意文件(按指定数目、指定大小)进行分割拆解 ,以便于...
把大的PDF文件拆分成指定大小文件,但是因为每页的文件大小不一定,就不能通过固定页数来拆分文件,这样子的话就需要我们通过计算来将文件拆分这指定大小的文件
c#文件操作,切分组合,多线程的,代码简单优化过,保留原文件,速度快
切分CSV文件为多个子文件。将CSV文件中的数据按照设定范围的区间进行切分,并将每个切分的区间进行分别存储在一个文件夹下。。
切分文件 最近遇到需要切分文件的需求,当然首选用python来解决,网上搜了下感觉都太复杂了,其实用python自带函数即可解决。 f = open('path&filename','r') #打开文件 i = 0 #设置计数器 while i<12345 : #...
java语言编写,用于文本切分,可按段落或固定长度
VC实现单文档切分窗口
vc单文档切分窗口,该资源将单文档程序切分为3个区域。
python语言实现将一目录下有相同前缀的文件切分到同一个目录下。
日志文件有时在阅读时加载几乎缓慢,大部分...使用教程,仅需把需要切割的.log文件放入"需分割文件",然后点击data.exe运行即可,(固定值以100w行为一次切割,不足100w行另算一个切割文件), 仅限".log"使用,如需其他可私信
对h264编码的MP4文件进行切分,基于libMp4V2,ActiveX控件,IE可用
一个简单的单文档切分视图源码. 一个简单的单文档切分视图源码.