- 避免資源浪費會使用
with ... as...:
操作檔案''' 覆寫檔案 '''
with open('./demo.txt', 'w') as file_object:
# 縮排
file_object.write('Python is awesom')
''' 增加檔案內容(接在最後寫下去) '''
with open('./demo.txt', 'a') as file_object:
# 縮排
file_object.write('Python is awesom')
''' 讀取檔案 '''
with open('./demo.txt', 'r') as file_object:
# 縮排
file_content = file_object.read()
print(file_content)
- 資料寫入CSV檔案,將 list 轉成有多筆 dict 的資料結構
''' 寫入 .CSV 檔案 '''
# 引入 csv 套件模組
import csv
# CSV 檔案第一列標題會是 name, author,記得要和 dict 的 key 相同,不然會出現錯誤
headers = ['name', 'author']
# 欲存入的資料內容,格式為 [{'name': 'xx', 'author': 'xx'}, {'name': 'xx', 'author': 'xx'}]
row_list = [
{
'name': '笑傲江湖',
'author': '金庸'
},
{
'name': '老人與海',
'author': '海明威'
},
{
'name': '哈利波特',
'author': 'JK羅琳'
},
]
# 使用檔案 with ... open 開啟 write (w) 寫入檔案模式,透過 csv 模組將資料寫入
with open('books.csv', 'w') as output_file:
dict_writer = csv.DictWriter(output_file, headers)
# 寫入標題
dict_writer.writeheader()
# 寫入值
dict_writer.writerows(row_list)
''' 讀取 .CSV 檔案 '''
import csv
# 使用 with ... open 開啟讀取 read (r) 檔案模式,透過 csv 模組的 reader 方法將已經存成檔案的資料讀入
with open('books.csv', 'r') as input_file:
rows = csv.reader(input_file)
# 以迴圈輸出每一列,每一列是一個 list
for row in rows:
print(row)
- Excel 檔案處理:使用
openpyxl
模組
Excel 試算表文件 = 活頁簿(workbook
)
-> workbook 副檔名 = .xlsx
or .xls
(舊版)
Excel 工作表 = worksheet
-> 填寫資料的區域
-> 一個 workbook 可以有多個 worksheet
p.s. 多個 worksheet 使用 tab 進行區隔
使用中的資料表 = active worksheet
儲存格 = cell
(1) 寫入 Excel:import openpyxl
workbook = openpyxl.Workbook()
sheet = workbook.worksheets[0]
### exercise 4 - 指定欄位 ###
sheet['A1'] = 'name'
sheet['B1'] = 'authour'
sheet['A2'] = '笑傲江湖'
sheet['B2'] = '金庸'
workbook.save('books.xlsx')
### exercise 5 - 使用 list ###
sheet.append(['name', 'authour'])
sheet.append(['貓戰士', '艾琳杭特'])
sheet.append(['半生緣', '張愛玲'])
workbook.save('books2.xlsx')
(2) 讀取 Excel:import openpyxl
workbook = openpyxl.load_workbook('books2.xlsx')
# 取得第一個工作表
sheet = workbook.worksheets[0]
''' 讀取單一欄位值和列/欄數: '''
# print(sheet.cell(row = 1, column = 1).value) # print row 1, column 1 數值
# print(sheet.max_row) # row 數量
# print(sheet.max_column) # column 數量
''' 取出所有資料 '''
'''
使用 max_row 和 max_column 分別取出欄位和列的最大值當作迴圈終點。
由於 range 會產生 range(開始, 結束) 不包含結束值的可迭代序列,所以要 + 1 才可以把所有值取出
'''
for i in range(1, sheet.max_row + 1):
for j in range(1, sheet.max_column + 1):
print(sheet.cell(row = i, column = j).value)
- JSON 檔案:
key:value
構成物件 {}
的鍵值(長得有點像 dict 但使用雙引號包起鍵值)
-> 若有多筆資料則由陣列 []
表示
-> 輕量資料格式,常見於網路 API 資料傳遞
-> Python 中內建了 json
套件可以進行操作 JSON 檔案
P.S. 讀寫各有兩種方式,load/loads
,dump/dumps
ex. {
"name": "Jack",
"address":
{
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber":
[
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}
]
}
(1) 寫入 json:使用 dumpimport json
# dict 透過寫入後轉成 JSON 檔案格式 -> dump()
data = {
'name': 'Jack',
'address':
{'streetAddress': '21 2nd Street',
'city': 'New York',
'state': 'NY',
'postalCode': '10021'
},
'phoneNumber':
[
{
'type': 'home',
'number': '212 555-1234'
},
{
'type': 'fax',
'number': '646 555-4567'
}
]
}
print(data)
print(type(data))
# 寫入 JSON 檔案
with open('demo.json','w') as f:
json.dump(data, f)
# 將 dict 轉換成 JSON 字串 -> 使用 dumps()
data_2 = {
'name': 'Jack',
'age': 26
}
json_str = json.dumps(data_2)
print(json_str)
print(type(json_str))
(2) 讀取 json:使用 load/loadsimport json
with open('demo.json') as f:
data = json.loads(f.read())
print(data)
print(data['name'])
# 讀取 JSON 字串轉為 dict -> 使用 loads()
# """ 代表保留原格式(ex. 原來的縮排)的字串
json_str = """{
"key1": "value",
"key2": [
{
"key1": "value"
},
{
"key2": "value"
}
]
}
"""
json_dict = json.loads(json_str)
print(json_dict)