最近工作中出现了很多excel文件,尝试使用了SSIS将excel转化为txt,但是效率不高,每个feed都需要拉mapping,并且后续的ETL换了别的工具,有点浪费资源。
网上很多资料都是使用pandas模块,将excel转化为txt, 过于复杂,不太符合个人需求。
只需要最简单的,类似save as式的转换,能处理\n就可以了。
# -*- coding: UTF-8 -*-
import re
import codecs
import csv
import openpyxl
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
# 将excel转化为txt文件
def exceltotxt(excel_dir):
print "source file %r" % excel_dir
txt_dir = re.sub(r'.xlsx','',excel_dir) + '.txt'
print "target file %r" % txt_dir
wb = openpyxl.load_workbook(excel_dir, read_only=True)
sh1 = wb["Sheet1"]
with codecs.open(txt_dir, 'w', 'utf-8') as f:
c = csv.writer(f,delimiter='\t')
for r in sh1.rows:
out_val_list = list()
for cell in r:
out_val = str(cell.value)
val = re.sub(r'\n', '', out_val)
out_val_list.append(val)
c.writerow(out_val_list)
exceltotxt('xxx.xlsx')
PS:
- 读取large file时,记得一定要加上read_only=True。
- 出现 UnicodeEncodeError: 'ascii' codec can't encode characters in ordinal not in range(128) 问题,使用以下code解决。
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
网友评论