Python 的檔案處理能力是程式開發的根本,特別在資料處理和持久化儲存方面扮演關鍵角色。本文從檔案處理基礎出發,介紹 Python 的檔案開啟模式、讀寫方法以及錯誤處理機制,並以電話簿目錄專案為例,示範如何運用這些技巧進行資料管理。專案涵蓋新增、排序、儲存、顯示和搜尋聯絡人等功能,並提供詳細的程式碼解析。此外,文章也涵蓋了 Python 模組匯入、關鍵字、ASCII 表格等重要知識點,最後以 Python 程式設計索引大全總結全文,方便讀者快速查閱和學習。
Python 檔案處理與問題解決
檔案處理是程式設計中一個非常重要的部分,尤其是在處理大量資料或需要持久儲存資料的情況下。Python 提供了一系列強大的檔案處理功能,使得開發者能夠輕鬆地讀取、寫入和操作檔案。
檔案處理基礎
在 Python 中,檔案處理主要涉及開啟、讀取、寫入和關閉檔案等操作。以下是一些基本的檔案處理方法:
- 開啟檔案:使用
open()函式開啟檔案,指設定檔案名稱和開啟模式(如讀取模式'r'、寫入模式'w'或附加模式'a')。 - 讀取檔案:使用
read()、readline()或readlines()方法讀取檔案內容。 - 寫入檔案:使用
write()或writelines()方法將資料寫入檔案。 - 關閉檔案:使用
close()方法關閉已開啟的檔案。
檔案開啟模式
Python 中的檔案開啟模式包括:
'r':讀取模式(預設模式)'w':寫入模式(會覆寫原有內容)'a':附加模式(在原有內容後面追加新內容)'x':建立模式(如果檔案已存在,則會引發錯誤)'b':二進位模式(用於讀取或寫入二進位檔案)'t':文字模式(預設模式,用於讀取或寫入文字檔案)'+':更新模式(可同時讀取和寫入)
內容解密:
'r'和'w'是最常用的檔案開啟模式,分別用於讀取和寫入檔案。'a'模式用於在檔案末尾追加新內容,而不會覆寫原有的內容。'b'和't'模式分別用於處理二進位和文字檔案。'+'模式允許同時進行讀取和寫入操作。
檔案操作方法
以下是一些常用的檔案操作方法:
read():讀取整個檔案內容。readline():讀取檔案中的一行內容。readlines():讀取檔案中的所有行,並傳回一個列表。write():將字串寫入檔案。writelines():將字串列表寫入檔案。seek():移動檔案指標到指定位置。tell():傳回當前檔案指標的位置。
內容解密:
read()方法用於讀取整個檔案的內容,適合小型檔案。readline()和readlines()方法分別用於讀取一行和多行內容。write()和writelines()方法用於將資料寫入檔案。seek()方法允許移動檔案指標到指定的位置,以便進行隨機存取。tell()方法傳回當前檔案指標的位置。
專案實戰:建立電話簿目錄
以下是一個建立電話簿目錄的專案範例,展示瞭如何使用 Python 進行檔案處理和資料管理。
功能需求
- 新增聯絡人資訊(姓名和電話號碼)。
- 將聯絡人資訊儲存到檔案中。
- 從檔案中讀取並顯示所有聯絡人資訊。
- 搜尋特定聯絡人的電話號碼。
程式碼範例
def add_details():
entry = []
name = input('請輸入姓名:')
ph_no = input('請輸入電話號碼:')
entry.append(name)
entry.append(ph_no)
return entry
def bub_sort(dir_list):
length = len(dir_list) - 1
unsorted = True
while unsorted:
unsorted = False
for element in range(0, length):
if dir_list[element] > dir_list[element + 1]:
temp = dir_list[element + 1]
dir_list[element + 1] = dir_list[element]
dir_list[element] = temp
unsorted = True
def save_data_to_file(dir_list):
with open('Phone_Directory.txt', 'w') as f:
for n in dir_list:
f.write(n[0] + ',' + n[1] + '\n')
def display():
try:
with open('Phone_Directory.txt', 'r') as f:
text = f.read()
print(text)
except FileNotFoundError:
print('抱歉,您尚未建立電話簿。')
def search():
name = input('請輸入要搜尋的姓名:')
try:
with open('Phone_Directory.txt', 'r') as f:
for line in f.readlines():
if line.startswith(name + ','):
print(line.strip())
return
print('找不到該聯絡人。')
except FileNotFoundError:
print('抱歉,您尚未建立電話簿。')
# 主程式
while True:
print('1. 新增聯絡人')
print('2. 顯示所有聯絡人')
print('3. 搜尋聯絡人')
print('4. 離開')
choice = input('請選擇操作:')
if choice == '1':
entry = add_details()
# 這裡應該有程式碼將entry加入到dir_list中,並排序後儲存
# 為了簡化範例,這部分程式碼被省略
pass
elif choice == '2':
display()
elif choice == '3':
search()
elif choice == '4':
break
else:
print('無效的選擇,請重新選擇。')
內容解密:
- 該專案範例展示瞭如何使用 Python 建立一個簡單的電話簿應用程式,包括新增聯絡人、顯示所有聯絡人和搜尋聯絡人等功能。
- 程式碼中使用了
open()函式來開啟檔案,並進行讀取和寫入操作。 - 使用了
with陳述式來自動關閉檔案,避免了手動呼叫close()方法。 - 程式設計時考慮了錯誤處理,例如當檔案不存在時的情況。
電話簿目錄專案完整實作
電話簿目錄專案是一個綜合性的Python應用程式,旨在實作電話號碼的管理功能,包括新增、排序、儲存、顯示和搜尋聯絡人資訊。本專案將詳細介紹各功能模組的實作方法及其背後的邏輯。
專案架構與主要功能
本專案採用模組化設計,主要包含以下功能模組:
- 新增聯絡人資訊 (
Add_Details函式) - 排序聯絡人資訊 (
bub_sort函式) - 儲存資料到檔案 (
Save_Data_To_File函式) - 顯示電話簿內容 (
Display函式) - 搜尋聯絡人資訊 (
Search函式) - 選單介面 (
get_choice函式)
核心功能實作與程式碼解析
1. 新增聯絡人資訊
def Add_Details():
entry = []
name = input('請輸入姓名:')
ph_no = input('請輸入電話號碼:')
entry.append(name)
entry.append(ph_no)
return entry
內容解密:
- 該函式用於新增聯絡人資訊,首先建立一個空列表
entry來儲存輸入的資料。 - 使用
input函式分別讀取使用者輸入的姓名和電話號碼。 - 將輸入的資料加入
entry列表中並傳回。
2. 排序聯絡人資訊
def bub_sort(dirList):
length = len(dirList) - 1
unsorted = True
while unsorted:
unsorted = False
for element in range(0, length):
if dirList[element] > dirList[element + 1]:
temp = dirList[element + 1]
dirList[element + 1] = dirList[element]
dirList[element] = temp
unsorted = True
內容解密:
- 本函式實作氣泡排序演算法,用於對聯絡人資訊進行排序。
dirList是包含聯絡人資訊的列表,每個元素是一個包含姓名和電話號碼的子列表。- 排序依據是子列表的第一個元素(即姓名)進行升序排列。
- 當列表仍存在未排序的元素時,持續進行比較和交換操作。
3. 儲存資料到檔案
def Save_Data_To_File(dirlist):
f = open('Phone_Directory.txt', 'w')
for n in dirlist:
f.write(n[0]) # 寫入姓名
f.write(',') # 寫入逗號分隔符
f.write(n[1]) # 寫入電話號碼
f.write('\n') # 寫入換行符
f.close()
內容解密:
- 該函式將
dirlist中的聯絡人資訊儲存到名為Phone_Directory.txt的檔案中。 - 使用寫入模式 (
'w') 開啟檔案,如果檔案已存在則會被覆寫。 - 遍歷
dirlist中的每個元素,將姓名和電話號碼以逗號分隔的形式寫入檔案。 - 每筆資料後面加上換行符以便於檔案的閱讀和後續處理。
4. 顯示電話簿內容
def Display():
if os.path.isfile('Phone_Directory.txt') == 0:
print('抱歉,您尚未建立任何聯絡人資訊。')
print('請建立後再試!')
elif os.stat('Phone_Directory.txt').st_size == 0:
print('通訊錄為空')
else:
f = open('Phone_Directory.txt', 'r')
text = f.read()
print(text)
f.close()
內容解密:
- 首先檢查
Phone_Directory.txt檔案是否存在。如果不存在,提示使用者建立新的通訊錄。 - 如果檔案存在但為空,則顯示「通訊錄為空」的訊息。
- 若檔案存在且包含資料,則開啟檔案並讀取全部內容,然後列印到控制檯。
5. 搜尋聯絡人資訊
def Search():
name = input('請輸入要搜尋的姓名:')
f = open('Phone_Directory.txt', 'r')
for line in f:
if name in line:
found = True
break
else:
found = False
if found:
print('已找到該聯絡人:')
print(line.replace(',', ':'))
else:
print('查無此人')
f.close()
內容解密:
- 使用者輸入要搜尋的姓名。
- 開啟
Phone_Directory.txt檔案並逐行讀取。 - 在每一行中搜尋輸入的姓名。如果找到匹配,則顯示該聯絡人的資訊(姓名和電話號碼),並將逗號替換為冒號以提高可讀性。
- 如果遍歷完所有行仍未找到匹配,則顯示「查無此人」。
6. 選單介面
def get_choice():
print('1)\t新增聯絡人到電話簿')
print('2)\t按姓名排序聯絡人')
print('3)\t儲存聯絡人資訊到檔案')
print('4)\t顯示所有聯絡人資訊')
print('5)\t搜尋聯絡人')
print('6)\t離開程式')
ch = input('請選擇操作:')
return ch
內容解密:
- 提供使用者一個互動式的選單介面,讓使用者可以選擇不同的操作。
- 使用
input函式取得使用者的選擇,並將其作為字串傳回給主程式。
主程式邏輯
# 主程式
if os.path.isfile('Phone_Directory.txt') == 0:
print('抱歉,您尚未建立任何聯絡人資訊。')
directory = []
else:
directory = []
f = open('Phone_Directory.txt', 'r')
for line in f:
if line.endswith('\n'):
line = line[:-1]
directory.append(line.strip().split(','))
f.close()
c = True
while c:
ch = get_choice()
if ch == '1':
e = Add_Details()
directory.append(e)
elif ch == '2':
bub_sort(directory)
print('聯絡人資訊已成功排序!')
elif ch == '3':
Save_Data_To_File(directory)
print('資料已成功儲存到電話簿!')
elif ch == '4':
Display()
elif ch == '5':
Search()
elif ch == '6':
print('感謝使用本程式!')
c = False
邏輯解析:
- 初始化檢查:檢查
Phone_Directory.txt是否存在。如果不存在,提示使用者建立;如果存在,則讀取檔案中的聯絡人資訊到directory列表中。 - 主迴圈:進入一個無限迴圈,直到使用者選擇離開(選項6)。
- 選單驅動:根據使用者的選擇呼叫相應的函式執行操作,包括新增、排序、儲存、顯示和搜尋聯絡人資訊。
Python 模組匯入與關鍵字解析
匯入模組
Python 程式以指令碼模式寫入 IDLE,並以 .py 副檔名儲存。任何 Python 檔案都可以被視為模組,其他程式可以匯入並使用其中的函式、類別和變數。
編寫與匯入模組
建立一個名為 Demo.py 的檔案,並定義一個函式 Display():
def Display():
print('Hello, Welcome all!')
要使用這個函式,需要在另一個檔案 main.py 中匯入 Demo 模組:
# main.py
import Demo # 匯入 Demo 模組
Demo.Display() # 呼叫 Display() 函式
輸出結果:
Hello, Welcome all!
使用 from 關鍵字可以簡化匯入過程:
from Demo import Display
Display()
這兩種方法都可以實作相同的功能。
注意事項
- 被匯入的模組和匯入陳述式所在的檔案必須位於同一目錄下。
- 可以使用
import陳述式匯入其他檔案中的變數和類別。
Python 關鍵字
Python 有一些保留的關鍵字,不能用作識別符號。以下是 Python 的關鍵字列表:
anddelfromnotwhileaselifglobalorwithassertelseifpassyieldbreakexceptimportprintTrueclassexecinraiseFalsecontinuefinallyisreturnNonedefforlambdatry
ASCII 表格
ASCII(美國標準資訊交換碼)是一種字元編碼系統。Python 使用 ord() 函式取得字元的 ASCII 值。
ASCII 值表格
| Dec | Char | Dec | Char | Dec | Char | Dec | Char |
|---|---|---|---|---|---|---|---|
| 0 | NUL | 32 | SPACE | 64 | @ | 96 | ` |
| 1 | SOH | 33 | ! | 65 | A | 97 | a |
| … | … | … | … | … | … | … | … |
程式碼範例解析
範例1:匯入模組
# main.py
import Demo
Demo.Display()
內容解密:
- 使用
import陳述式匯入Demo模組。 - 呼叫
Demo模組中的Display()函式。
範例2:使用 from 關鍵字匯入函式
from Demo import Display
Display()
內容解密:
- 使用
from關鍵字匯入Demo模組中的Display()函式。 - 直接呼叫
Display()函式。
Python 程式設計索引大全
本篇內容旨在對Python程式設計中的關鍵字、函式、方法以及重要概念進行全面索引與解析,幫助開發者快速查詢與學習。
資料型別與基本運算
Python中的基本資料型別包括整數(int)、浮點數(float)及字串(str)。在運算方面,Python支援多種運算元,如算術運算元(+、-、*、/)、比較運算元(==、!=、>、<)及邏輯運算元(and、or、not)。
控制結構
控制結構用於控制程式的執行流程,主要包括條件判斷陳述式(if-else)、迴圈陳述式(for、while)等。
條件判斷陳述式
條件判斷陳述式根據特定條件執行不同程式碼區塊。基本語法如下:
if 條件:
# 執行陳述式
else:
# 執行陳述式
迴圈陳述式
迴圈陳述式允許重複執行某段程式碼。Python支援for迴圈和while迴圈。
# for迴圈範例
for i in range(10):
print(i)
# while迴圈範例
i = 0
while i < 10:
print(i)
i += 1
函式
函式是一段可重複呼叫的程式碼,用於實作特定功能。定義函式使用def關鍵字。
def greet(name):
print(f"Hello, {name}!")
# 呼叫函式
greet("Alice")
內容解密:
def關鍵字用於定義函式。greet是函式名稱,name是函式引數。- 函式內部使用
print輸出問候陳述式。 - 呼叫函式時需傳入相應引數。
資料結構
Python提供豐富的資料結構,包括列表(list)、元組(tuple)、字典(dict)及集合(set)。
列表與元組
列表和元組都是有序集合,但列表是可變的,而元組是不可變的。
# 列表範例
my_list = [1, 2, 3]
my_list.append(4)
print(my_list) # 輸出: [1, 2, 3, 4]
# 元組範例
my_tuple = (1, 2, 3)
print(my_tuple[0]) # 輸出: 1
內容解密:
my_list是列表,使用append方法新增元素。my_tuple是元組,透過索引存取元素。
導向物件程式設計
Python支援導向物件程式設計(OOP),包括類別(class)、物件(object)、繼承(inheritance)等概念。
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
my_dog = Dog("Buddy")
print(my_dog.speak()) # 輸出: Buddy says Woof!
內容解密:
Animal是基礎類別,定義了name屬性和speak方法。Dog是子類別,繼承自Animal並重寫speak方法。- 建立
Dog類別的例項並呼叫speak方法。
檔案操作
Python提供了豐富的檔案操作功能,包括讀取和寫入檔案。
# 寫入檔案
with open("example.txt", "w") as file:
file.write("Hello, World!")
# 讀取檔案
with open("example.txt", "r") as file:
content = file.read()
print(content) # 輸出: Hello, World!
內容解密:
- 使用
open函式開啟檔案,指定模式為寫入(“w”)或讀取(“r”)。 - 使用
with陳述式確保檔案正確關閉。 write方法用於寫入內容,read方法用於讀取內容。