python 处理xls遇到的坑
生活随笔
收集整理的這篇文章主要介紹了
python 处理xls遇到的坑
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
再用pandas.read_csv,read_excel都處理不了xls文件,會遇到各種編碼錯誤,
在網上查到的大多數都是對源文件進行修改格式,轉換成utf-8格式(例如使用sublime,或者記事本)
不過對低版本的xls文件進行轉換編碼操作會損壞源文件
最開始我手動使用excel對xls另存為保存為csv文件在用pd.read_csv進行處理,部分數據確實可以處理
不過對于長整形數類型會修改數據,例如xls中的數據是‘10000000001’,在wps,excel(我都嘗試了一下轉換成csv文件),在處理后的csv文件中原來的數據變成了‘1E01’,變成了一個字符串類型,在沒有這種數據的時候可以這么處理,也確實快
有這種數據只能使用xlrd庫來處理xls文件了,寫入新文件我用的是xlsxwriter庫,來進行將數據寫入新的表格中,部分代碼如下:
for i in type1:wb = xlrd.open_workbook(r'{}.xls'.format(i), encoding_override='gbk')sheet = wb.sheet_names()ws = wb.sheet_by_index(0)nrows = ws.nrowsfor num in range(3, nrows - 1):l = ws.row_values(num)for biaotou in flag:dic[biaotou].append(l[flag.index(biaotou)])encoding_override這個參數主要針對的是編碼問題,大家視情況而定
寫入新文件函數如下:
def write_into_column(sheet,all_data,left_up,step):#以列寫入eng_li = [chr(i) for i in range(65, 91)] + ['AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ', 'BA', 'BB', 'BC', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BK', 'BL', 'BM', 'BN', 'BO', 'BP', 'BQ', 'BR', 'BS', 'BT', 'BU', 'BV', 'BW', 'BX', 'BY', 'BZ', 'CA', 'CB', 'CC', 'CD', 'CE', 'CF', 'CG', 'CH', 'CI', 'CJ', 'CK', 'CL', 'CM', 'CN', 'CO', 'CP', 'CQ', 'CR', 'CS', 'CT', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DA', 'DB', 'DC', 'DD', 'DE', 'DF', 'DG', 'DH', 'DI', 'DJ', 'DK', 'DL', 'DM', 'DN', 'DO', 'DP', 'DQ', 'DR', 'DS', 'DT', 'DU', 'DV', 'DW', 'DX', 'DY', 'DZ', 'EA', 'EB', 'EC', 'ED', 'EE', 'EF', 'EG', 'EH', 'EI', 'EJ', 'EK', 'EL', 'EM', 'EN', 'EO', 'EP', 'EQ', 'ER', 'ES', 'ET', 'EU', 'EV', 'EW', 'EX', 'EY', 'EZ', 'FA', 'FB', 'FC', 'FD', 'FE', 'FF', 'FG', 'FH', 'FI', 'FJ', 'FK', 'FL', 'FM', 'FN', 'FO', 'FP', 'FQ', 'FR', 'FS', 'FT', 'FU', 'FV', 'FW', 'FX', 'FY', 'FZ', 'GA', 'GB', 'GC', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GJ', 'GK', 'GL', 'GM', 'GN', 'GO', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GV', 'GW', 'GX', 'GY', 'GZ', 'HA', 'HB', 'HC', 'HD', 'HE', 'HF', 'HG', 'HH', 'HI', 'HJ', 'HK', 'HL', 'HM', 'HN', 'HO', 'HP', 'HQ', 'HR', 'HS', 'HT', 'HU', 'HV', 'HW', 'HX', 'HY', 'HZ', 'IA', 'IB', 'IC', 'ID', 'IE', 'IF', 'IG', 'IH', 'II', 'IJ', 'IK', 'IL', 'IM', 'IN', 'IO', 'IP', 'IQ', 'IR', 'IS', 'IT', 'IU', 'IV', 'IW', 'IX', 'IY', 'IZ', 'JA', 'JB', 'JC', 'JD', 'JE', 'JF', 'JG', 'JH', 'JI', 'JJ', 'JK', 'JL', 'JM', 'JN', 'JO', 'JP', 'JQ', 'JR', 'JS', 'JT', 'JU', 'JV', 'JW', 'JX', 'JY', 'JZ', 'KA', 'KB', 'KC', 'KD', 'KE', 'KF', 'KG', 'KH', 'KI', 'KJ', 'KK', 'KL', 'KM', 'KN', 'KO', 'KP', 'KQ', 'KR', 'KS', 'KT', 'KU', 'KV', 'KW', 'KX', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LD', 'LE', 'LF', 'LG', 'LH', 'LI', 'LJ', 'LK', 'LL', 'LM', 'LN', 'LO', 'LP', 'LQ', 'LR', 'LS', 'LT', 'LU', 'LV', 'LW', 'LX', 'LY', 'LZ', 'MA', 'MB', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MI', 'MJ', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NB', 'NC', 'ND', 'NE', 'NF', 'NG', 'NH', 'NI', 'NJ', 'NK', 'NL', 'NM', 'NN', 'NO', 'NP', 'NQ', 'NR']first_eng = re.findall('^[A-Z]+', left_up)[0]index = eng_li.index(first_eng)num = re.findall('\d+', left_up)[0]if step==0:for i,value in enumerate(all_data):res_eng = eng_li[index+i]if is_last_float(value):sheet.write_column(res_eng + num, value[:-1])#插入除了最后一個 (縱向插入)sheet.write(res_eng + str(int(num)+len(value[:-1])), value[-1],percent_format)#插入最后一個else:sheet.write_column(res_eng+num,value)else:for i,value in enumerate(all_data):res_eng = eng_li[index+i*step]if is_last_float(value):sheet.write_column(res_eng + num, value[:-1])#插入除了最后一個 (縱向插入)sheet.write(res_eng + str(int(num)+len(value[:-1])), value[-1],percent_format)#插入最后一個else:sheet.write_column(res_eng+num,value)這個是以列來寫入新文件,傳入的參數分別是對應的sheet,data是傳入的數據eg:[[1,2,3],[4,5,6]] 結果就是第一列寫入1,2,3,姐跟著右邊數第一列寫入4,5,6,left_up是寫入的位置,step是跳躍寫入。
workbook = xlsxwriter.Workbook('aaa1.xlsx') sheet_first = workbook.add_worksheet("sheet1") ... workbook.close()主要就這些
?
總結
以上是生活随笔為你收集整理的python 处理xls遇到的坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作140:封装写法
- 下一篇: 工作127:子向父亲传值