< Python全景系列-4 > 史上最全檔案型別讀寫庫大盤點!什麼?還包括音訊、影片?

techlead_krischang發表於2023-05-18

歡迎來到我們的系列部落格《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的檔案操作有更深入的理解,並能夠在實際程式設計中靈活運用。如果你有任何問題或想法,歡迎在評論區留言分享。

相關文章