Python 提供了強大的檔案處理能力,讓開發者能輕鬆讀寫和操作檔案。檔案處理包含開啟、讀取、寫入和關閉等基本操作,以及更進階的技巧,例如使用 seek() 函式控制檔案指標位置、處理二進位檔案以及利用 os 模組管理檔案系統。理解這些技術對於資料處理、程式設定和系統管理至關重要。

def calculate_total_expense(file_name):
    try:
        with open(file_name, 'w+') as fp:
            # 寫入測試資料
            fp.write('Month1:100\n')
            fp.write('Month2:200\n')
            fp.write('Month3:079\n')
            fp.write('Month4:090\n')
            fp.write('Month5:097\n')
            fp.write('Month6:100\n')
            
            # 重置檔案指標到開頭
            fp.seek(0)
            print('檔案內容:')
            print(fp.read())
            
            # 再次重置檔案指標到開頭
            fp.seek(0)
            total_expense = 0
            for line in fp.readlines():
                # 提取金額並累加
                expense = int(line.strip().split(':')[1])
                total_expense += expense
            
            print(f'過去六個月的總花費:{total_expense}')
    
    except FileNotFoundError:
        print("檔案未找到。")
    except Exception as e:
        print(f"發生錯誤:{e}")

# 呼叫函式
calculate_total_expense('Expenses.txt')

檔案處理:讀取與寫入操作詳解

檔案處理是程式設計中一個非常重要的環節,涉及檔案的讀取、寫入及管理等操作。在 Python 中,這些操作透過內建的函式和方法得以實作。本文將探討檔案處理的基本概念、操作方法及相關的程式範例。

寫入檔案

當需要將資料寫入檔案時,首先要以寫入模式(‘w’)開啟檔案。在 Python 中,可以使用 open() 函式來開啟檔案。開啟後,可以使用 write() 方法將資料寫入檔案。

程式範例 13.2:將數字 1 至 20 寫入檔案 WriteNumbers.txt

def main():
    obj1 = open("WriteNumbers.txt", "w")  # 以寫入模式開啟檔案
    for x in range(1, 21):  # 迭代 1 至 20
        x = str(x)  # 將數字轉換為字串
        obj1.write(x)  # 將數字寫入檔案
        obj1.write(" ")  # 使用空格分隔數字
    obj1.close()  # 關閉檔案

main()  # 呼叫主函式

內容解密:

  1. open("WriteNumbers.txt", "w"):以寫入模式開啟檔案,若檔案不存在則建立,若存在則清空原內容。
  2. for x in range(1, 21):迭代數字 1 至 20。
  3. x = str(x):將數字轉換為字串,因為 write() 方法只接受字串。
  4. obj1.write(x)obj1.write(" "):將數字和空格寫入檔案,用於分隔數字。
  5. obj1.close():關閉檔案,釋放資源。

生成隨機數並寫入檔案

在某些情況下,我們需要生成隨機數並將其寫入檔案。這可以透過結合 random 模組和檔案操作來實作。

程式範例:生成 50 個隨機數並寫入 WriteNumRandom.txt

from random import randint  # 匯入隨機數模組

def main():
    fp1 = open("WriteNumRandom.txt", "w")  # 以寫入模式開啟檔案
    for _ in range(50):  # 迭代 50 次
        x = randint(500, 1000)  # 生成一個 500 至 1000 之間的隨機整數
        x = str(x)  # 將整數轉換為字串
        fp1.write(x + " ")  # 將隨機數寫入檔案,並用空格分隔
    fp1.close()  # 關閉檔案

main()  # 呼叫主函式

內容解密:

  1. from random import randint:匯入生成隨機整數的函式。
  2. randint(500, 1000):生成一個指定範圍內的隨機整數。
  3. fp1.write(x + " "):將生成的隨機數(已轉換為字串)寫入檔案,並在後面新增空格以分隔不同數字。

從檔案讀取文字

要讀取檔案內容,首先需要以讀取模式(‘r’)開啟檔案。Python 提供了多種方法來讀取檔案內容,包括 read()readlines() 方法。

程式範例 13.4:使用 read() 方法讀取 ReadDemo1.txt 的內容

def main():
    fp = open("ReadDemo1.txt", "r")  # 以讀取模式開啟檔案
    text = fp.read()  # 一次讀取整個檔案內容
    print(text)  # 列印檔案內容
    fp.close()  # 關閉檔案

main()  # 呼叫主函式

內容解密:

  1. open("ReadDemo1.txt", "r"):以讀取模式開啟指定的檔案。
  2. fp.read():讀取整個檔案的內容,並將其作為一個字串傳回。
  3. print(text):列印讀取到的檔案內容。

從檔案讀取數字

當檔案中包含數字時,可以透過適當的方法讀取並處理這些數字。

程式範例 13.6:讀取 numbers.txt 中的數字並計算總和

def main():
    fp1 = open("numbers.txt", "r")  # 以讀取模式開啟檔案
    num = int(fp1.readline())  # 讀取第一行,取得數字個數
    print(num)
    total_sum = 0
    print('The', num, 'numbers present in the file are as follows:')
    for _ in range(num):
        num1 = int(fp1.readline())  # 逐行讀取數字
        print(num1)
        total_sum += num1
    print('Sum of all the numbers (except first):')
    print(total_sum)
    fp1.close()  # 關閉檔案

main()  # 呼叫主函式

內容解密:

  1. fp1.readline():逐行讀取檔案內容。
  2. int(fp1.readline()):將讀取到的行內容轉換為整數,因為 readline() 傳回的是字串。
  3. total_sum += num1:計算所有數字的總和。

檔案處理:深入理解與實務應用

檔案處理是程式設計中的重要環節,Python提供了豐富的功能來讀取、寫入和操作檔案。本篇文章將探討Python中的檔案處理技術,包括讀取多行資料、處理單行多個資料、以及根據特定條件篩選檔案內容等。

讀取檔案內容

Python中使用open()函式來開啟檔案,並可指定讀取模式(‘r’)、寫入模式(‘w’)或附加模式(‘a’)。以下是一個簡單的例子,展示如何開啟一個名為"numbers.txt"的檔案,並讀取其內容。

fp1 = open("numbers.txt", "r")
num = int(fp1.readline())
print(num)

內容解密:

  1. open("numbers.txt", "r"):開啟"numbers.txt"檔案於讀取模式。
  2. fp1.readline():讀取檔案中的第一行。
  3. int(fp1.readline()):將讀取的字串轉換為整數。

處理單行多個資料

許多情況下,檔案中的一行可能包含多個資料。Python中的split()方法可以將一行字串分割成多個專案,並存入列表中。以下是一個例子。

str = 'I am Loving The Concepts of File Handling'
str.split()

輸出:

['I', 'am', 'Loving', 'The', 'Concepts', 'of', 'File', 'Handling']

內容解密:

  1. str.split():將字串根據空格分割成多個專案。
  2. 分割後的結果存入列表中,方便後續處理。

實務應用:計算學生成績

假設有一個名為"Grades.txt"的檔案,儲存了多位學生的五科成績。以下程式碼展示瞭如何讀取檔案內容,並計算每位學生的總分和百分比。

fp1 = open("Grades.txt", "r")
n = int(fp1.readline())
for i in range(n):
    allgrades = (fp1.readline().split())
    sum = 0
    for j in range(len(allgrades)):
        sum = sum + int(allgrades[j])
    per = float((sum/500)*100)
    print('Total = ', sum, ' \nPercentage = ', per)

內容解密:

  1. n = int(fp1.readline()):讀取第一行,取得學生人數。
  2. allgrades = (fp1.readline().split()):讀取每一行成績,並分割成列表。
  3. 迴圈計算每位學生的總分和百分比。

尋找檔案中最長的行

以下是一個函式,用於找出指設定檔案中最長的一行。

def Find_Largest(fp1):
    fp1 = open('Demo1.txt', 'r')
    long = ""
    for line in fp1:
        if(len(line) > len(long)):
            long = line
    print(long, 'is the Longest Line with', len(long), 'characters')

內容解密:

  1. fp1 = open('Demo1.txt', 'r'):開啟檔案於讀取模式。
  2. 迴圈遍歷每一行,比較其長度並更新最長行。

篩選檔案內容

以下程式碼展示瞭如何將"Demo1.txt"中以大寫字母開頭的行複製到"Demo2.txt"中。

IP_File = open('Demo1.txt', 'r')
Out_File = open('Demo2.txt', 'w')
for line in IP_File:
    if line[0] not in 'abcdefghijklmnopqrstuvwxyz':
        Out_File.write(line)
Out_File.close()

內容解密:

  1. 開啟輸入和輸出檔案。
  2. 迴圈檢查每一行是否以大寫字母開頭,若是則寫入輸出檔案。

Python 檔案處理與問題解決

檔案處理是程式設計中一個非常重要的部分,Python 提供了一系列內建函式和模組來讀取、寫入和操作檔案。本章將探討 Python 中的檔案處理,包括文字檔和二進位檔的讀寫、檔案的開啟模式、seek() 函式的使用,以及如何存取和操作磁碟上的檔案和目錄。

13.3.8 附加資料到檔案

附加模式 'a' 用於將資料附加到現有檔案的末尾。以下程式展示瞭如何使用附加模式。

程式 13.10:將額外行附加到名為 appendDemo.txt 的檔案

fp1 = open('appendDemo.txt', 'a')  # 以附加模式開啟檔案
fp1.write('\nWow, Cant Believe.')  # 將內容附加到檔案
fp1.close()  # 關閉檔案

#### 內容解密:

  1. open('appendDemo.txt', 'a'):以附加模式開啟 appendDemo.txt 檔案。如果檔案不存在,則會建立新檔案。
  2. fp1.write('\nWow, Cant Believe.'):將字串 \nWow, Cant Believe. 寫入檔案。換行符號 \n 確保新內容在新的一行開始。
  3. fp1.close():關閉檔案,釋放系統資源。

13.4 seek() 函式

seek() 函式用於將檔案指標移動到檔案中的特定位置。這使得我們可以從檔案的任意位置開始讀取資料。

seek() 函式語法

File_object.seek(offset, whence)
  • offset:表示從參考點移動的位元組數。
  • whence:表示參考點。可以是 0(檔案開頭)、1(目前位置)或 2(檔案末尾)。

範例

fp1 = open('Seek_Demo1.txt', 'w+')
fp1.write('Oh!God!SaveEarth!')
fp1.seek(3)
print(fp1.readline())

#### 內容解密:

  1. fp1 = open('Seek_Demo1.txt', 'w+'):以讀寫模式建立並開啟 Seek_Demo1.txt
  2. fp1.write('Oh!God!SaveEarth!'):將字串寫入檔案。
  3. fp1.seek(3):將檔案指標移動到第 3 個位元組(從檔案開頭開始計數)。
  4. fp1.readline():從目前指標位置讀取一行資料並輸出。

13.5 二進位檔

二進位檔的處理方式與文字檔類別似,但需要使用不同的開啟模式,如 'rb' 用於讀取二進位檔,'wb' 用於寫入二進位檔。

讀取二進位檔範例

fp1 = open('C:\\Users\\shree\\Desktop\\demo.jpg', 'rb')
print(fp1.read())

#### 內容解密:

  1. open('C:\\Users\\shree\\Desktop\\demo.jpg', 'rb'):以二進位讀取模式開啟圖片檔案。
  2. fp1.read():讀取檔案內容並輸出。二進位檔內容以二進位格式顯示。

13.6 存取和操作磁碟上的檔案和目錄

Python 提供了多個內建函式和模組(如 osos.path)來存取和操作檔案和目錄。

常用的 osos.path 函式

模組與函式描述
os.getcwd()傳回目前工作目錄的路徑。
os.chdir(newdir)切換目前工作目錄。
os.path.isfile(fname)檢查指定路徑是否存在檔案。

範例

import os

print(os.getcwd())  # 輸出目前工作目錄
os.chdir('C:\\Python34\\Lib')  # 切換工作目錄
print(os.getcwd())  # 輸出新的目前工作目錄
print(os.path.isfile('Demo1.py'))  # 檢查 Demo1.py 是否存在

#### 內容解密:

  1. os.getcwd():取得並輸出目前的工作目錄。
  2. os.chdir('C:\\Python34\\Lib'):將目前工作目錄切換到指定路徑。
  3. os.path.isfile('Demo1.py'):檢查指定路徑下是否存在 Demo1.py 檔案,並傳回布林值。

檔案處理與Python程式設計

檔案處理是Python程式設計中的重要環節,涉及檔案的讀取、寫入、修改等操作。Python提供了豐富的檔案處理功能,包括文字檔案和二進位檔案的操作。

檔案操作模式

Python中的檔案操作模式主要包括讀取(‘r’)、寫入(‘w’)、附加(‘a’)等。這些模式決定了檔案被開啟後可以進行的操作。

  • 讀取模式(‘r’):用於讀取檔案內容。如果檔案不存在,會引發錯誤。
  • 寫入模式(‘w’):用於寫入內容到檔案。如果檔案已存在,其內容會被覆寫;如果檔案不存在,會建立新檔案。
  • 附加模式(‘a’):用於在檔案末尾附加內容。如果檔案不存在,會建立新檔案。

重要檔案操作方法

Python提供了多種方法來操作檔案,包括open()read()write()readline()readlines()等。

開啟檔案:open()

open()函式用於開啟檔案,傳回一個檔案物件。其基本語法為:

file_object = open(file_name, mode)

其中,file_name是檔案名稱,mode是開啟模式。

寫入檔案:write()

write()方法用於將字串寫入檔案。

file_object.write(string)

讀取檔案內容

  • read():讀取整個檔案內容。
content = file_object.read()
  • readline():讀取一行內容。
line = file_object.readline()
  • readlines():讀取所有行並傳回一個列表。
lines = file_object.readlines()

實務範例:從檔案中提取資料並進行數學運算

假設有一個名為Expenses.txt的檔案,記錄了某人過去六個月在某項物品上的花費,格式為月份:金額。以下是一個範例程式,用於計算總花費。

程式碼範例

def calculate_total_expense(file_name):
    try:
        with open(file_name, 'w+') as fp:
            # 寫入測試資料
            fp.write('Month1:100\n')
            fp.write('Month2:200\n')
            fp.write('Month3:079\n')
            fp.write('Month4:090\n')
            fp.write('Month5:097\n')
            fp.write('Month6:100\n')
            
            # 重置檔案指標到開頭
            fp.seek(0)
            print('檔案內容:')
            print(fp.read())
            
            # 再次重置檔案指標到開頭
            fp.seek(0)
            total_expense = 0
            for line in fp.readlines():
                # 提取金額並累加
                expense = int(line.strip().split(':')[1])
                total_expense += expense
            
            print(f'過去六個月的總花費:{total_expense}')
    
    except FileNotFoundError:
        print("檔案未找到。")
    except Exception as e:
        print(f"發生錯誤:{e}")

# 呼叫函式
calculate_total_expense('Expenses.txt')

程式碼解析

  1. with open(file_name, 'w+') as fp: 開啟檔案於w+模式,允許讀寫。
  2. 寫入測試資料到檔案中。
  3. fp.seek(0) 重置檔案指標到開頭,以便讀取剛剛寫入的資料。
  4. fp.read() 讀取並列印整個檔案內容。
  5. 再次重置檔案指標,逐行讀取檔案內容,提取金額並累加到total_expense
  6. 最後列印總花費。

常見錯誤與除錯

  • 檔案未找到錯誤:檢查檔案路徑是否正確。
  • 讀寫模式錯誤:確認使用的檔案操作模式是否正確。