前天看到后台有一兄弟发消息说目前自己有很多txt 文件,领导要转成xls文件,问用python怎么实现,我在后台简单回复了下,其实完成这个需求方法有很多,因为具体的txt格式不清楚,当然如果是有明确分隔符的会更好处理些,可以直接把txt文件转成csv文件,这样可以用excel打开后就是表格的样式了,如果直接要转成xls,那就需要用到python的读写excle文件的模块,具体实现如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#!/usr/bin/env python import xlwt import xlrd from os import listdir from os.path import isfile, join #用户输入目录 mypath = raw_input("Please enter thedirectory path for the input files: ") #获得所有txt 文件 textfiles = [ join(mypath,f) for f inlistdir(mypath) if isfile(join(mypath,f)) and '.txt' in f] #判断是否为数字 def is_number(s): try: float(s) return True except ValueError: return False #创建格式 style = xlwt.XFStyle() #定义数值格式 style.num_format_str = '#,###0.00' #读取每行数据生成新文件 for textfile in textfiles: f= open(textfile, 'r+') row_list = [] for row in f: row_list.append(row.split()) column_list = zip(*row_list) workbook = xlwt.Workbook() worksheet = workbook.add_sheet('Sheet1') i= 0 for column in column_list: for item in range(len(column)): value = column[item].strip() if is_number(value): worksheet.write(item, i, float(value),style=style) else: worksheet.write(item, i, value) i+=1 workbook.save(textfile.replace('.txt','.xls')) |
其中比较有意思的是zip函数的使用,zip(*row_list),具体什么意思呢,还是看下面一个例子吧:
1 2 3 4 5 6 7 8 9 |
>>> x = [1, 2, 3] >>> y = [4, 5, 6] >>> z = [7, 8, 9] >>> xyz = zip(x, y, z) >>> print xyz [(1, 4, 7), (2, 5, 8), (3, 6, 9)] >>> newxyz = zip(*xyz) >>> print newxyz [(1,2, 3), (4, 5, 6), (7, 8, 9)] |
看例子还是比较直观的,文档上叫压缩解压缩操作,另外这行worksheet.write(item, i, float(value), style=style),这个函数的参数分别对应的意思是行,列,值和格式,最后建议把脚本拷贝到自己电脑上运行下试试,别的不多说了,这篇到就到这里,希望对大家有用。