日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python 处理带中文 Excel 文件

發(fā)布時(shí)間:2025/4/5 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 处理带中文 Excel 文件 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python 處理帶中文 Excel 文件

  • Python-Excel常規(guī)操作
    • 安裝庫(kù)
    • 寫入 Excel
    • 讀取 Excel
      • 測(cè)試文件
    • 處理中文
    • Ref
    • 所遇到問(wèn)題

Python-Excel常規(guī)操作

注意,是 xls 文件,不是 xlsx 文件

安裝庫(kù)

$ pip3 install xlrd xlwt xlutils

安裝比較簡(jiǎn)單,直接用 pip 工具安裝三個(gè)庫(kù)即可,安裝命令如下:

安裝完成提示 Successfully installed xlrd-1.2.0 xlutils-2.0.0 xlwt-1.3.0 即表示安裝成功。

寫入 Excel

接下來(lái)我們就從寫入 Excel 開(kāi)始,話不多說(shuō)直接看代碼如下:

# excel_w.py# 導(dǎo)入 xlwt 庫(kù) import xlwt# 創(chuàng)建 xls 文件對(duì)象 wb = xlwt.Workbook()# 新增兩個(gè)表單頁(yè) sh1 = wb.add_sheet('成績(jī)') sh2 = wb.add_sheet('匯總')# 然后按照位置來(lái)添加數(shù)據(jù),第一個(gè)參數(shù)是行,第二個(gè)參數(shù)是列 # 寫入第一個(gè)sheet sh1.write(0, 0, '姓名') sh1.write(0, 1, '成績(jī)') sh1.write(1, 0, '張三') sh1.write(1, 1, 88) sh1.write(2, 0, '李四') sh1.write(2, 1, 99.5)# 寫入第二個(gè)sheet sh2.write(0, 0, '總分') sh2.write(1, 0, 187.5)# 最后保存文件即可 wb.save('test_w.xls')

讀取 Excel

測(cè)試文件


# excel_r.py# 導(dǎo)入 xlrd 庫(kù) import xlrd# 打開(kāi)剛才我們寫入的 test_w.xls 文件 wb = xlrd.open_workbook("test_w.xlsx")# 獲取并打印 sheet 數(shù)量 print("sheet 數(shù)量:" + str(wb.nsheets))# 獲取并打印 sheet 名稱 # Python 編碼問(wèn)題,需要單獨(dú)輸出 print( "sheet 名稱如下:") for i in wb.sheet_names():print i lis = (1)# 根據(jù) sheet 索引獲取內(nèi)容 sh1 = wb.sheet_by_index(0) # 或者也可根據(jù) sheet 名稱獲取內(nèi)容 # sh = wb.sheet_by_name('成績(jī)')# 獲取并打印該 sheet 行數(shù)和列數(shù) # print( u"sheet" + str(sh1.name) + "共" + str(sh1.nrows) + "行" +str(sh1.ncols)+ "列") print ("sheetName:") print (sh1.name) print ("行數(shù):") print (sh1.nrows) print ("列數(shù):") print (sh1.ncols)# 獲取并打印某個(gè)單元格的值 print ("第一行第二列的值為:") print (sh1.cell_value(0, 1))# 獲取整行或整列的值 rows = sh1.row_values(0) # 獲取第一行內(nèi)容 cols = sh1.col_values(1) # 獲取第二列內(nèi)容# 打印獲取的行列值 print ("第一行的值為:") for i in rows:print (i) print ("第二列的值為:") for j in cols:print (j)# 獲取單元格內(nèi)容的數(shù)據(jù)類型 print ("第二行第一列的值類型為:") print (sh1.cell(1, 0).ctype)# 遍歷所有表單內(nèi)容 # 遍歷所有表單 for sh in wb.sheets():# 遍歷所有行數(shù)for r in range(sh.nrows):# 遍歷所有列數(shù)for l in range(sh.ncols):# 打印指定單元格內(nèi)容print (sh.cell_value(r, l))

細(xì)心的朋友可能注意到,這里我們可以獲取到單元格的類型,上面我們讀取類型時(shí)獲取的是數(shù)字1,那1表示什么類型,又都有什么類型呢?別急下面我們通過(guò)一個(gè)表格展示下:

數(shù)值類型說(shuō)明
0empty
1string字符串
2number數(shù)字
3date日期
4boolean布爾值
5error錯(cuò)誤

通過(guò)上面表格,我們可以知道剛獲取單元格類型返回的數(shù)字1對(duì)應(yīng)的就是字符串類型。

處理中文

import xlrd #import chardet data = xlrd.open_workbook("emotion.xlsx") table = data.sheets()[0] nrows = table.nrows for i in range(nrows): #print chardet.detect(str(table.row_values(i)))print table.row_values(i)

可是這樣在Linux Terminal 打印出來(lái)的是亂碼,把打印語(yǔ)句改成:

print str(table.row_values(i)).decode("unicode_escape").encode("utf8")

為什么是這樣? 可以從Ubuntu 的系統(tǒng)設(shè)置中看到,控制器顯示的字符是UTF8的,所以最后需要encode成UTF8的,2.為什么要用decode? 因?yàn)橐猠ncode成UTF8,得是unicode格式的字符串才行,但是默認(rèn)的字符串是str型的,所有需要把其他的字符編碼轉(zhuǎn)成UNICODE才行,然后,因?yàn)榇蛴〕鰜?lái)的亂碼是. u’\XXX’ 這種形式, 所以根據(jù)經(jīng)驗(yàn)應(yīng)該是unicode_escape形式。

Ref

  • Python 操作 Excel
  • 官方文檔
  • Python 處理中文 Excel
  • ‘a(chǎn)scii’ codec can’t decode byte 0xef in position 0: ordinal not in range(128)
  • Python——str字符串和unicode字符串
  • 用python操作excel的強(qiáng)大工具:openpyxl(附上實(shí)例腳本)
  • Python讀寫Excel表格,就是這么簡(jiǎn)單粗暴又好用
  • 所遇到問(wèn)題

  • 使用了 pip3 install xlrd xlutils xlwt 安裝擴(kuò)展包,也使用 pip list 和 pip3 list 指令均可以查找到此擴(kuò)展包已被安裝,但只能在 python2 中執(zhí)行 import xlrd 指令,在 python3 中無(wú)法導(dǎo)入。
    暫未解決。
  • Python 編碼指令問(wèn)題。讀取 Excel 文件后,執(zhí)行 print 打印出來(lái)的是 \xe6\x95\xb0\xe9\x87\x8f 或 u'\u6210\u7ee9'
  • ‘a(chǎn)scii’ codec can’t encode characters in position 0-1: ordinal not in range(128)
  • 總結(jié)

    以上是生活随笔為你收集整理的Python 处理带中文 Excel 文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。