(一)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('\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)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM