title: 【Python】讀取與寫入 xlsx 檔案 date: 2020-12-21 22:08 is_modified: false disqus: cynthiahackmd categories:
那天,我媽的同事傳了份檢驗結果文件給她,但格式超級奇怪,既不是人工閱讀的文件格式、也不是資料系統的處理格式。我媽想把它轉成資料系統格式,可偏偏 Excel 的轉置、公式什麼的都沒辦法處理、公式什麼的都沒辦法處理,只能人工處理。粗估下來,一份小資料大概 2 小時跑不掉。
我看了一下資料內容,是可以抓到一些規律的,因此打算寫程式幫她轉了,如果一切順利 15 分鐘就可以解決了。漏氣的是,第一關讀檔就卡住,我之前好像還沒有讀過 Excel 檔的文件。
原本想說它跟 CSV 檔案類似,可以用一般讀檔的方式讀進來,結果一開始就吃鱉了。
with open("原料年檢資料.xlsx", "r", encoding="utf-8") as fr:
for line in fr :
print(line)
立刻給了我個編碼問題,看來不能偷吃步了,只好來研究怎麼讀 Excle 檔了。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x90 in position 16: invalid start byte
拜了一下大神,發現有 openpyxl、 xlrd、 Pandas 幾種函式庫有支援 xlsx 的讀寫。最決定用 Pandas,因為我平常資料操作都是用它,就不用另外裝函式庫了。
import pandas as pd
df=pd.read_excel("原料年檢資料.xlsx")
# 印出前四筆資料
df.head(4)
# 轉成 numpy.ndarray 格式
nmp=df.values
讀進來之後就變 Pandas 格式了,可以接續一般的操作了。不過我在執行程式碼時遇到下面的錯誤訊息:
Pandas pd.read_excel giving ImportError: Install xlrd >= 0.9.0 for Excel support
看起來是安裝 xlrd 0.9.0 以上的版本就可以了,結果還是得裝套新的函式庫:
$pip install xlrd
至於寫檔的部分我其實偷懶,寫了 CSV 出去,反正給 CSV 我媽他們系統也可以接受。
不過為了寫網誌,還是稍微看了一下如何寫檔,算是留個記錄方便日後找查,絕對不是我不想再多裝個函式庫 XDDD
# 因為我要寫中文檔案 engine 要換成 openpyxl
writer = pd.ExcelWriter('pandas_simple.xlsx', engine='openpyxl')
# df 指要寫出的內容
df.to_excel(writer, sheet_name='Sheet1')
writer.save()
看這段程式碼沒意外還是得安裝 openpyxl:
$pip install openpyxl
本文作者: 辛西亞.Cynthia
本文連結: 辛西亞的技能樹 / hackmd 版本
版權聲明: 部落格中所有文章,均採用 姓名標示-非商業性-相同方式分享 4.0 國際 (CC BY-NC-SA 4.0) 許可協議。轉載請標明作者、連結與出處!
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing