(一)python 格式化 excel 格式
发布时间:2020-12-20 13:00:06 所属栏目:Python 来源:网络整理
导读:需求: 客户通过 sftp 上传了一个 poc测试的 excel文件, 下到 云桌面 查看,发现一堆格式问题, 怎么办呢? 公司又不允许 吧文件下载到本地处理, 只能在 服务器上进行处理。 一堆的类型需要转换, 时间格式也是错误的,想想 可以借助 python 来做处理, 转
需求:
客户通过 sftp 上传了一个 poc测试的 excel文件, 下到 云桌面 查看,发现一堆格式问题, 怎么办呢? 公司又不允许 吧文件下载到本地处理, 只能在 服务器上进行处理。
一堆的类型需要转换, 时间格式也是错误的,想想 可以借助 python 来做处理, 转成 csv格式,都转成 string 格式,接口也符合。
?
说罢,就这么干。 因为没怎么写过 python, 内心还是 恐惧的。
找了一个 解析 excel 的demo, 找个 改了改,以前处理excel 文件,打印字段测试是可以的,
问题1、这次 放到 服务器上运行 居然 读取第一个 单元格的字段就报 编码问题。
知道是编码问题,但是不知道why(以前在本地也处理过文件,没有问题。) 咨询了以前python 大神, 让我 encode(‘utf-8‘) 试试。
?
再执行成功了。 虽然还是不知道why ,文件本身就是 设置为 utf8 的编码。(还没去深究!!!!!)
?
2、内容转成 csv文件后,发现 顺序 不符合要求,想了一下,也想不出什么高端的方法,只得用最low的方法
?
庆幸的是处理的 内容还是比较少。不存在性能之说。
问题3: 字符串中有 表情符,没处理成功【网上找了几个 demo 都测试 不通过,就先不管了,直接先存库了】 总结:
在用python 处理 格式过程中,感觉也不是很难,难点是不知道可以用 哪些 包 可以处理,一些基本的 语法问题。 只是文本处理的话,还是不难的。
?
主要代码如下:(别笑,我只是个python小白)
‘‘‘ 读 excel文件 ‘‘‘ def read_from_excel(filepath): data = xlrd.open_workbook(filepath) table = data.sheets()[0] nor = table.nrows nol = table.ncols print ‘row: %d,colume: %d‘ % (nor,nol) resutl = [] for i in range(1,nor): dict = {} flag = True # if i == 10: # break for j in range(nol): title = table.cell_value(0,j).encode(‘utf-8‘) print(str(i) + ‘--‘ + str(j) + ‘---‘+ title) #print(chardet.detect(table.cell_value(i,j))) value = (str(table.cell_value(i,j).encode(‘utf-8‘)).replace(‘n‘,‘‘)) print(str(i) + ‘--‘ + str(j) + ‘---‘+value) # print value if title == ‘identitu_type‘: if value == ‘SSS‘: value = ‘SSS card‘ elif value == ‘PASSPORT‘: value = ‘Passport‘ elif value == ‘DRIVERLICENCE‘: value = "Driver‘s license" elif value == ‘PHILHEALTH‘: value = "PhilHealth" elif value == ‘UMID‘: value = "UMID" else: flag = False print(str(i) + ‘--‘ + str(j) + ‘---‘+value) dict[title] = remove_emoji(value) if flag: resutl.append(dict) return resutl ‘‘‘ 字典转 csv文件 ‘‘‘ def nestedlist2csv(list,out_file): with open(out_file,‘wb‘) as f: title = [] w = csv.writer(f) fieldnames=list[0].keys() # solve the problem to automatically write the header print fieldnames title = [‘Name‘,‘id_card‘,‘phone‘,‘identitu_type‘,‘Date‘] w.writerow(title) for row in list: print(row.values) value = [row[‘Name‘],row[‘id_card‘],row[‘phone‘],row[‘identitu_type‘],row[‘Date‘]] w.writerow(value) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |