(一)python 格式化 excel 格式

需求:

  客户经过 sftp 上传了一个 poc测试的 excel文件, 下到 云桌面 查看,发现一堆格式问题, 怎么办呢? 公司又不容许 吧文件下载到本地处理, 只能在 服务器上进行处理。
一堆的类型须要转换, 时间格式也是错误的,想一想 能够借助 python 来作处理, 转成 csv格式,都转成 string 格式,接口也符合。
 
说罢,就这么干。 由于没怎么写过 python, 心里仍是 恐惧的。
找了一个 解析 excel 的demo, 找个 改了改,之前处理excel 文件,打印字段测试是能够的,

问题一、此次 放到 服务器上运行 竟然 读取第一个 单元格的字段就报 编码问题。

知道是编码问题,可是不知道why(之前在本地也处理过文件,没有问题。) 咨询了之前python 大神, 让我 encode(‘utf-8') 试试。
 
再执行成功了。 虽然仍是不知道why ,文件自己就是 设置为 utf8 的编码。(还没去深究!!!!!)
 

二、内容转成 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)
相关文章
相关标签/搜索