【Python】用python對excel進行讀寫
Description
- 0014 :純文字檔案 student.txt為學生資訊, 裡面的內容(包括花括號)如下所示:
{
"1":["張三",150,120,100],
"2":["李四",90,99,95],
"3":["王五",60,66,68]
}
請將上述內容寫到 student.xls 檔案中。 - 0015:純文字檔案 city.txt為城市資訊, 裡面的內容(包括花括號)如下所示:
{
"1" : "上海",
"2" : "北京",
"3" : "成都"
}
請將上述內容寫到 city.xls 檔案中。 - 0016:純文字檔案 numbers.txt, 裡面的內容(包括方括號)如下所示:
[
[1, 82, 65535],
[20, 90, 13],
[26, 809, 1024]
]
請將上述內容寫到 numbers.xls 檔案中。 - 0020:本來此題題意是對excel表格應用formula。原題有點麻煩,所以把此題改為對numbers.xls進行按列求和操作。
Notes
這個小專案中涉及用python操作excel的方法。
1. 首先觀察到這三個txt文件中的內容非常像dict或list這些基本資料結構的寫法,於是考慮能否將其轉化成基本資料結構。參考了python中將string轉化為dict的方法。這個小專案中選擇了eval()函式,這個函式能直接返回引數執行的結果,但是有一些危險性,可以參看python eval()函式的妙用和濫用
2. 查詢什麼python中什麼模組能夠對excel進行操作,參看了以下資料:
(1)
(2)Python處理Excel資料
(3)How to write .xls (Excel) files in Python - Tutorial
這個視訊比較老,裡面的方法對03及以前的excel能用,07及以後就不行了。
(4)OpenPyXL官方手冊
.
3. 最後選擇用openpyxl模組對excel進行操作。
寫excel操作
(1)為了寫excel,首先可以建立一個Workbook類物件,對應著一個excel文件。
wb = Workbook() # 對應著一個xlsx檔案
(2)接著,對Workbook類物件呼叫create_sheet()函式,建立新的表單,引數為表單的名字,還有其他引數(加入的位置?)。
sheet = wb.create_sheet(title = fileName.replace('.txt', '')) # xlsx檔案中的一張表,加在後面
(3)對sheet中的cell的value進行寫操作:
sheet.cell(row = lineNum, column = 1).value = c_key
為了指定cell,可以採用以上方式,也可以:
print(ws3['AA10'].value)
對excel進行寫操作時,也可以一下子寫一行:
for row in range(1, 40):
sheet.append(range(600))
以上程式碼實現的內容是對sheet的前四十行,每行的格子裡都依次放上1到600。
(4)最後要進行儲存操作:
wb.save(new_fileName)
讀excel操作
(1)用load_workbook()函式開啟一個已存在的excel檔案:
wb = load_workbook(fileName.replace('txt', 'xlsx'))
(2)選擇一個excel文件中的一個表格:
sheet = wb['numbers']
其他操作同上。
4. dictionary的遍歷
(1)dict.items()方法會返回一個list,list中元素是dict中鍵-值對,元組的形式。
(2)d.keys(), d.values()分別返回一個有全部的key或全部value的list。
.
5. excel中的formula,直接寫在相應的單元格中就行:
sheet["A1"] = "=SUM(1, 1)"
My Code
"""
* 0014 && 0015 && 0016
txt轉化成excel
by VegB
2017/1/28
* 0020
excel中formula的使用
by VegB
2017/1/29
"""
from openpyxl import Workbook, load_workbook
def T2E(fileName): # txt to excel
fd = open(fileName, 'r')
context = fd.read() # 讀入所有內容
container = eval(context) # 把string轉化成dictionary/list,這個小專案中只有這兩種情況
wb = Workbook() # 對應著一個xlsx檔案
sheet = wb.create_sheet(fileName.replace('.txt', '')) # xlsx檔案中的一張表,加在後面
# d.items()方法會將鍵-值對作為元組返回, d.keys(), d.values()
if type(container) == type({}):
lineNum = 1
for (c_key, c_value) in container.items():
sheet.cell(row = lineNum, column = 1).value = c_key
if type(c_value) == type([]):
for j in range(0, len(c_value)):
sheet.cell(row = lineNum, column = j + 2).value = c_value[j]
else:
sheet.cell(row = lineNum, column = 2).value = c_value
lineNum += 1
elif type(container) == type([]):
for i in range(0, len(container)):
for j in range(0, len(container[i])):
sheet.cell(row = i + 1, column = j + 1).value = container[i][j]
fd.close()
new_fileName = fileName.replace('txt', 'xlsx')
wb.save(new_fileName)
def Calc(fileName):
wb = load_workbook(fileName.replace('txt', 'xlsx')) # 開啟excel表格
sheet = wb['numbers'] # 選擇一個sheet
for j in range(0, 3):
sheet.cell(row = 4, column = j + 1).value = '=SUM(%s%d:%s%d)'% (chr(ord('A') + j), 1, chr(ord('A') + j), 3)
wb.save(fileName.replace('txt', 'xlsx'))
T2E('student.txt')
T2E('city.txt')
T2E('numbers.txt')
Calc('numbers.txt')
Result
執行結果後,資料夾中如願以償地出現了三個相應的xlsx檔案,點開看看裡面的內容:
student.xlsx:
city.xlsx:
numbers.xlsx: