Python 的檔案處理能力是程式開發的根本,特別在資料處理和持久化儲存方面扮演關鍵角色。本文從檔案處理基礎出發,介紹 Python 的檔案開啟模式、讀寫方法以及錯誤處理機制,並以電話簿目錄專案為例,示範如何運用這些技巧進行資料管理。專案涵蓋新增、排序、儲存、顯示和搜尋聯絡人等功能,並提供詳細的程式碼解析。此外,文章也涵蓋了 Python 模組匯入、關鍵字、ASCII 表格等重要知識點,最後以 Python 程式設計索引大全總結全文,方便讀者快速查閱和學習。

Python 檔案處理與問題解決

檔案處理是程式設計中一個非常重要的部分,尤其是在處理大量資料或需要持久儲存資料的情況下。Python 提供了一系列強大的檔案處理功能,使得開發者能夠輕鬆地讀取、寫入和操作檔案。

檔案處理基礎

在 Python 中,檔案處理主要涉及開啟、讀取、寫入和關閉檔案等操作。以下是一些基本的檔案處理方法:

  1. 開啟檔案:使用 open() 函式開啟檔案,指設定檔案名稱和開啟模式(如讀取模式 'r'、寫入模式 'w' 或附加模式 'a')。
  2. 讀取檔案:使用 read()readline()readlines() 方法讀取檔案內容。
  3. 寫入檔案:使用 write()writelines() 方法將資料寫入檔案。
  4. 關閉檔案:使用 close() 方法關閉已開啟的檔案。

檔案開啟模式

Python 中的檔案開啟模式包括:

  • 'r':讀取模式(預設模式)
  • 'w':寫入模式(會覆寫原有內容)
  • 'a':附加模式(在原有內容後面追加新內容)
  • 'x':建立模式(如果檔案已存在,則會引發錯誤)
  • 'b':二進位模式(用於讀取或寫入二進位檔案)
  • 't':文字模式(預設模式,用於讀取或寫入文字檔案)
  • '+':更新模式(可同時讀取和寫入)

內容解密:

  • 'r''w' 是最常用的檔案開啟模式,分別用於讀取和寫入檔案。
  • 'a' 模式用於在檔案末尾追加新內容,而不會覆寫原有的內容。
  • 'b''t' 模式分別用於處理二進位和文字檔案。
  • '+' 模式允許同時進行讀取和寫入操作。

檔案操作方法

以下是一些常用的檔案操作方法:

  1. read():讀取整個檔案內容。
  2. readline():讀取檔案中的一行內容。
  3. readlines():讀取檔案中的所有行,並傳回一個列表。
  4. write():將字串寫入檔案。
  5. writelines():將字串列表寫入檔案。
  6. seek():移動檔案指標到指定位置。
  7. tell():傳回當前檔案指標的位置。

內容解密:

  • read() 方法用於讀取整個檔案的內容,適合小型檔案。
  • readline()readlines() 方法分別用於讀取一行和多行內容。
  • write()writelines() 方法用於將資料寫入檔案。
  • seek() 方法允許移動檔案指標到指定的位置,以便進行隨機存取。
  • tell() 方法傳回當前檔案指標的位置。

專案實戰:建立電話簿目錄

以下是一個建立電話簿目錄的專案範例,展示瞭如何使用 Python 進行檔案處理和資料管理。

功能需求

  1. 新增聯絡人資訊(姓名和電話號碼)。
  2. 將聯絡人資訊儲存到檔案中。
  3. 從檔案中讀取並顯示所有聯絡人資訊。
  4. 搜尋特定聯絡人的電話號碼。

程式碼範例

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應用程式,旨在實作電話號碼的管理功能,包括新增、排序、儲存、顯示和搜尋聯絡人資訊。本專案將詳細介紹各功能模組的實作方法及其背後的邏輯。

專案架構與主要功能

本專案採用模組化設計,主要包含以下功能模組:

  1. 新增聯絡人資訊 (Add_Details 函式)
  2. 排序聯絡人資訊 (bub_sort 函式)
  3. 儲存資料到檔案 (Save_Data_To_File 函式)
  4. 顯示電話簿內容 (Display 函式)
  5. 搜尋聯絡人資訊 (Search 函式)
  6. 選單介面 (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

邏輯解析:

  1. 初始化檢查:檢查 Phone_Directory.txt 是否存在。如果不存在,提示使用者建立;如果存在,則讀取檔案中的聯絡人資訊到 directory 列表中。
  2. 主迴圈:進入一個無限迴圈,直到使用者選擇離開(選項6)。
  3. 選單驅動:根據使用者的選擇呼叫相應的函式執行操作,包括新增、排序、儲存、顯示和搜尋聯絡人資訊。

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 的關鍵字列表:

  • and
  • del
  • from
  • not
  • while
  • as
  • elif
  • global
  • or
  • with
  • assert
  • else
  • if
  • pass
  • yield
  • break
  • except
  • import
  • print
  • True
  • class
  • exec
  • in
  • raise
  • False
  • continue
  • finally
  • is
  • return
  • None
  • def
  • for
  • lambda
  • try

ASCII 表格

ASCII(美國標準資訊交換碼)是一種字元編碼系統。Python 使用 ord() 函式取得字元的 ASCII 值。

ASCII 值表格

DecCharDecCharDecCharDecChar
0NUL32SPACE64@96`
1SOH33!65A97a

程式碼範例解析

範例1:匯入模組

# main.py
import Demo
Demo.Display()

內容解密:

  1. 使用 import 陳述式匯入 Demo 模組。
  2. 呼叫 Demo 模組中的 Display() 函式。

範例2:使用 from 關鍵字匯入函式

from Demo import Display
Display()

內容解密:

  1. 使用 from 關鍵字匯入 Demo 模組中的 Display() 函式。
  2. 直接呼叫 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")

內容解密:

  1. def關鍵字用於定義函式。
  2. greet是函式名稱,name是函式引數。
  3. 函式內部使用print輸出問候陳述式。
  4. 呼叫函式時需傳入相應引數。

資料結構

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

內容解密:

  1. my_list是列表,使用append方法新增元素。
  2. 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!

內容解密:

  1. Animal是基礎類別,定義了name屬性和speak方法。
  2. Dog是子類別,繼承自Animal並重寫speak方法。
  3. 建立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!

內容解密:

  1. 使用open函式開啟檔案,指定模式為寫入(“w”)或讀取(“r”)。
  2. 使用with陳述式確保檔案正確關閉。
  3. write方法用於寫入內容,read方法用於讀取內容。