(一)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)
相關文章
相關標籤/搜索