歡迎來到我們的系列部落格《Python全景系列》!在這個系列中,我們將帶領你從Python的基礎知識開始,一步步深入到高階話題,幫助你掌握這門強大而靈活的程式語言!
本文系列第四篇,介紹史上最全PYTHON檔案型別讀寫庫大盤點!包含常用和不常用的大量檔案格式!文字、音訊、影片應有盡有!廢話不多說!走起來!
先給大家快捷總結:
檔案格式 | Python庫 |
---|---|
文字檔案 | 內建open函式 |
CSV檔案 | csv |
JSON檔案 | json |
XML檔案 | xml.etree.ElementTree |
二進位制檔案 | 內建open函式 |
圖片檔案 | PIL (Python Imaging Library) |
Word檔案 | python-docx |
XLSX檔案 | openpyxl |
PDF檔案 | PyPDF2 |
SQLite資料庫檔案 | sqlite3 |
音訊檔案 | pydub |
影片檔案 | moviepy |
HTML檔案 | BeautifulSoup |
YAML檔案 | pyyaml |
ZIP檔案 | zipfile |
正文開始!
1. 文字檔案
在Python中,處理文字檔案是最基礎的檔案操作,我們使用內建的open函式開啟一個檔案,然後使用檔案物件的read或write方法進行讀寫操作。
# 寫入文字檔案
with open('example.txt', 'w') as f:
f.write('Hello, Python!')
# 讀取文字檔案
with open('example.txt', 'r') as f:
print(f.read())
在這裡,open函式的第一個引數是檔名,第二個引數是檔案模式,其中'r'代表讀模式,'w'代表寫模式。使用'with'語句可以確保檔案在操作完成後被正確關閉。這是一個標準的檔案操作模式,也適用於其他型別的檔案。
2. CSV檔案
CSV(Comma-Separated Values)檔案是一種常用的資料交換格式,每行表示一條記錄,各欄位之間由逗號分隔。Python的csv模組提供了用於讀寫CSV檔案的工具。
import csv
# 寫入CSV檔案
with open('example.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['name', 'age'])
writer.writerow(['Alice', 20])
writer.writerow(['Bob', 25])
# 讀取CSV檔案
with open('example.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
這裡,csv.writer和csv.reader函式分別返回一個寫入器和讀取器物件,我們可以使用這些物件進行CSV檔案的讀寫操作。
3. JSON檔案
JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,易於閱讀和編寫,同時也易於機器解析和生成。Python的json模組提供了用於讀寫JSON檔案的工具。
import json
# 寫入JSON檔案
data = {
'name': 'Alice',
'age': 20,
}
with open('example.json', 'w') as f:
json.dump(data, f)
# 讀取JSON檔案
with open('example.json', 'r') as f:
data = json.load(f)
print(data)
在這裡,json.dump和json.load函式分別用於將Python物件轉換為JSON格式並寫入檔案,以及從檔案中讀取JSON資料並轉換為Python物件。
4. XML檔案
XML(eXtensible Markup Language)是一種標記語言,可以用來描述資料的結構。Python的xml模組提供了用於讀寫XML檔案的工具。
from xml.etree import ElementTree as ET
# 寫入XML檔案
root = ET.Element('root')
child = ET.Element('child')
child.text = 'Hello, Python!'
root.append(child)
tree = ET.ElementTree(root)
tree.write('example.xml')
# 讀取XML檔案
tree = ET.parse('example.xml')
root = tree.getroot()
for child in root:
print(child.text)
在這裡,我們使用xml.etree.ElementTree模組建立一個XML檔案的樹形結構,然後使用ElementTree物件的write方法將其寫入檔案。讀取XML一個ElementTree物件,然後透過遍歷這個物件來讀取XML資料。
5.二進位制檔案
二進位制檔案是直接包含二進位制資料的檔案,例如影像檔案、音訊檔案等。Python使用'b'模式開啟二進位制檔案,然後使用檔案物件的read或write方法進行讀寫操作。
# 寫入二進位制檔案
data = b'Hello, Python!'
with open('example.bin', 'wb') as f:
f.write(data)
# 讀取二進位制檔案
with open('example.bin', 'rb') as f:
data = f.read()
print(data)
在這裡,'wb'和'rb'分別代表二進位制寫模式和二進位制讀模式。注意我們使用bytes型別的資料進行二進位制寫操作。
6. 圖片檔案
處理圖片檔案一般需要藉助第三方庫,如PIL(Python Imaging Library)。
from PIL import Image
# 讀取圖片檔案
img = Image.open('example.jpg')
# 修改圖片
img = img.rotate(45) # 旋轉45度
# 寫入圖片檔案
img.save('example_rotated.jpg')
這裡,Image.open和Image.save函式分別用於讀取和儲存圖片檔案。PIL庫提供了豐富的影像處理功能,例如旋轉、裁剪、縮放等。
7. Word檔案
處理Word檔案,我們可以使用python-docx庫,這是一個建立、修改和提取Microsoft Word檔案的Python庫。
from docx import Document
# 建立新的Word檔案
doc = Document()
doc.add_paragraph('Hello, Python!')
doc.save('example.docx')
# 讀取Word檔案
doc = Document('example.docx')
for para in doc.paragraphs:
print(para.text)
在這裡,我們首先建立一個Document物件,然後使用add_paragraph方法新增段落,最後使用save方法儲存文件。讀取Word檔案時,我們遍歷Document物件的paragraphs屬性,列印出每個段落的文字。
8. XLSX檔案
處理Excel檔案,我們可以使用openpyxl庫,這是一個讀寫Excel 2010 xlsx/xlsm/xltx/xltm檔案的Python庫。
from openpyxl import Workbook, load_workbook
# 建立新的Excel檔案
wb = Workbook()
ws = wb.active
ws['A1'] = 'Hello,'
ws['B1'] = 'Python!'
wb.save('example.xlsx')
# 讀取Excel檔案
wb = load_workbook('example.xlsx')
ws = wb.active
print(ws['A1'].value, ws['B1'].value)
在這裡,我們首先建立一個Workbook物件和Worksheet物件,然後使用字典方式訪問單元格並賦值,最後使用save方法儲存工作簿。讀取Excel檔案時,我們使用load_workbook函式載入工作簿,然後訪問啟用的工作表的單元格。
9. PDF檔案
PDF是一種常見的檔案格式,我們可以使用Python的PyPDF2庫來處理PDF檔案。
import PyPDF2
# 讀取PDF檔案
with open('example.pdf', 'rb') as f:
reader = PyPDF2.PdfFileReader(f)
page = reader.getPage(0)
print(page.extractText())
# 注意:PyPDF2不能直接建立PDF檔案,但可以合併、裁剪和旋轉PDF檔案
在這裡,我們使用PdfFileReader物件讀取PDF檔案,然後使用getPage方法獲取某一頁,最後使用extractText方法提取文字。注意PyPDF2不能直接建立PDF檔案,但可以合併、裁剪和旋轉PDF檔案。
10. SQLite資料庫檔案
SQLite是一種嵌入式資料庫,它的資料庫全都儲存在一個單獨的檔案中。Python的sqlite3模組提供了對SQLite資料庫的支援。
import sqlite3
# 建立並寫入SQLite資料庫
conn = sqlite3.connect('example.db')
c = conn.cursor()
c.execute("CREATE TABLE test (name text, age integer)")
c.execute("INSERT INTO test VALUES ('Alice', 20)")
conn.commit()
conn.close()
# 讀取SQLite資料庫
conn = sqlite3.connect('example.db')
c = conn.cursor()
for row in c.execute("SELECT * FROM test"):
print(row)
conn.close()
在這裡,我們首先建立一個資料庫連線和遊標物件,然後使用execute方法執行SQL語句,最後使用commit方法提交事務。讀取SQLite資料庫時,我們遍歷execute方法的結果,列印出每一行。
11. 音訊檔案
處理音訊檔案,我們可以使用pydub庫,這是一個處理音訊的Python庫。
from pydub import AudioSegment
# 讀取音訊檔案
audio = AudioSegment.from_file('example.mp3')
# 修改音訊
audio = audio.reverse() # 反轉音訊
# 儲存音訊檔案
audio.export('example_reversed.mp3', format='mp3')
在這裡,AudioSegment.from_file函式用於讀取音訊檔案。pydub庫提供了豐富的音訊處理功能,例如反轉、裁剪、合併等。最後使用export方法儲存音訊檔案。
12. 影片檔案
處理影片檔案,我們可以使用moviepy庫,這是一個用於影片編輯的Python庫。
from moviepy.editor import VideoFileClip
# 讀取影片檔案
clip = VideoFileClip('example.mp4')
# 修改影片
clip = clip.subclip(10, 20) # 擷取第10秒到第20秒的片段
# 儲存影片檔案
clip.write_videofile('example_subclip.mp4')
在這裡,VideoFileClip函式用於讀取影片檔案。moviepy庫提供了豐富的影片處理功能,例如裁剪、拼接、新增音訊等。最後使用write_videofile方法儲存影片檔案。
13. HTML檔案
HTML是網頁的主要構成元素。我們可以使用Python的beautifulsoup庫解析HTML檔案。
from bs4 import BeautifulSoup
# 讀取HTML檔案
with open('example.html', 'r') as f:
soup = BeautifulSoup(f, 'html.parser')
# 解析HTML
print(soup.title.text) # 列印標題
# 注意:BeautifulSoup不能直接建立HTML檔案,但可以修改HTML檔案
在這裡,我們使用BeautifulSoup物件解析HTML檔案,然後透過標籤名訪問HTML元素。
14. YAML檔案
YAML(YAML Ain't Markup Language)是一種直觀的資料序列化格式,常用於配置檔案。Python的pyyaml庫提供了用於讀寫YAML檔案的工具。
import yaml
# 寫入YAML檔案
data = {'name': 'Alice', 'age': 20}
with open('example.yaml', 'w') as f:
yaml.dump(data, f)
# 讀取YAML檔案
with open('example.yaml', 'r') as f:
data = yaml.load(f, Loader=yaml.FullLoader)
print(data)
在這裡,yaml.dump和yaml.load函式分別用於將Python物件轉換為YAML格式並寫入檔案,以及從檔案中讀取YAML資料並轉換為Python物件。
15. ZIP檔案
ZIP是一種常用的壓縮檔案格式。Python的zipfile模組提供了用於讀寫ZIP檔案的工具。
from zipfile import ZipFile
# 建立ZIP檔案
with ZipFile('example.zip', 'w') as zf:
zf.write('example.txt')
# 讀取ZIP檔案
with ZipFile('example.zip', 'r') as zf:
print(zf.namelist())
在這裡,我們使用ZipFile物件建立一個ZIP檔案,然後使用write方法新增檔案。讀取ZIP檔案時,我們使用namelist方法列出所有檔案。
One More Thing
在處理檔案時,一個常被忽視但又極其有用的技巧是使用Python的pathlib模組來處理檔案路徑。pathlib模組提供了一種物件導向的方式來處理檔案和目錄路徑,使得路徑的處理變得更加直觀和簡潔。
from pathlib import Path
# 建立Path物件
p = Path('example.txt')
# 檢查檔案是否存在
if p.exists():
print('File exists.')
# 獲取檔案的字尾名
print(p.suffix)
在這個例子中,我們使用Path物件表示一個檔案路徑,然後使用Path物件的方法和屬性來進行各種操作,例如檢查檔案是否存在,獲取檔案的字尾名等。這是一個非常強大且易用的模組,可以極大地提高我們處理檔案路徑的效率。
以上就是Python全檔案格式輸入輸出的介紹。希望透過本文,你能夠對Python的檔案操作有更深入的理解,並能夠在實際程式設計中靈活運用。如果你有任何問題或想法,歡迎在評論區留言分享。