• (一)python 格式化 excel 格式


    需求:

      客户通过 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('
    ', ''))
                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)
     
  • 相关阅读:
    ora29861:域索引标记为loading/failed/unusable(转载)
    总遇到些莫名奇妙的问题,很不爽!
    dul 10恢复oracle lob数据方法(转载)
    C#用GDAL/OGR库创建与写Shape文件(转载)
    缺陷跟踪系统Mantis之安装篇(转载)
    Oracle10g闪回恢复区详细解析(转载)
    五大最受欢迎的BUG管理系统(转载)
    使用dul恢复数据(转载)
    DUL使用(转载)
    gdul 1.0.2 使用
  • 原文地址:https://www.cnblogs.com/idea-persistence/p/11222525.html
Copyright © 2020-2023  润新知