天天看點

從入門到精通:Python檔案寫入完全指南!

作者:你的老師父

Python檔案寫入詳解

在Python程式設計中,檔案寫入是一項基礎的操作。Python提供了多種方法來寫入不同類型的檔案,并且提供了強大的檔案對象操作和異常處理機制。在本文中,我們将深入探讨Python檔案寫入的各個方面,包括寫入檔案、檔案緩沖、檔案對象操作、with語句和異常處理。

1. 寫入檔案

在Python中,寫入檔案可以使用write()和writelines()方法。其中,write()方法用于向檔案寫入單個字元串,而writelines()方法用于向檔案寫入字元串序列。這些方法适用于所有類型的檔案,包括文本檔案和二進制檔案。

write()方法

write()方法的文法如下所示:

file.write(str)
           

其中,str表示要寫入檔案的字元串。write()方法傳回寫入的字元數。

以下是使用write()方法向檔案寫入資料的示例代碼:

# 向檔案寫入單個字元串
with open('example.txt', 'w') as file:
    file.write('Hello, world!')
           

writelines()方法

writelines()方法的文法如下所示:

file.writelines(sequence)
           

其中,sequence表示要寫入檔案的字元串序列。writelines()方法不會在字元串之間添加任何東西,也不會自動添加換行符,需要顯式地添加。

以下是使用writelines()方法向檔案寫入資料的示例代碼:

# 向檔案寫入字元串序列
lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
with open('example.txt', 'w') as file:
    file.writelines(lines)
           

需要注意的是,write()方法和writelines()方法都不會自動添加換行符。如果需要向檔案寫入換行符,需要顯式地添加。

# 添加換行符
with open('example.txt', 'w') as file:
    file.write('Line 1\n')
    file.write('Line 2\n')
           

2. 檔案緩沖

在寫入檔案時,Python會使用緩沖區來暫時存儲資料,以提高寫入效率。檔案緩沖可以減少磁盤通路次數,并且可以在寫入大量資料時提高性能。在預設情況下,Python會根據檔案的類型自動選擇緩沖區大小。

如果需要關閉檔案緩沖,可以使用open()函數的buffering參數來設定緩沖區大小為0:

# 關閉檔案緩沖
with open('example.txt', 'w', buffering=0) as file:
    file.write('Hello, world!')
           

3. 檔案對象操作

在寫入檔案時,我們還可以使用一些額外的檔案對象操作,包括tell()、seek()、flush()和fileno()方法。

tell()方法

tell()方法用于傳回目前檔案指針位置。例如,在使用write()或writelines()方法向檔案寫入資料時,檔案指針會自動移動到寫入資料的結尾。在需要知道檔案指針位置的情況下,可以使用tell()方法來擷取目前位置。

# 傳回檔案指針位置
with open('example.txt', 'w') as file:
    file.write('Hello, world!')
    position = file.tell()
    print(position)
           

seek()方法

seek()方法用于移動檔案指針到指定位置。例如,在向檔案中插入字元串時,我們可以使用seek()方法将檔案指針移動到想要添加字元串的位置。在使用seek()方法之前,必須先打開檔案并将其設定為寫模式。

# 移動檔案指針位置
with open('example.txt', 'w') as file:
    file.write('Hello, world!')
    file.seek(6)
    file.write('Python')
           

flush()方法

flush()方法用于将緩沖區資料寫入磁盤,以確定在關閉檔案之前所有資料都已經被寫入。在預設情況下,緩沖區會自動重新整理,但是在某些情況下,可能需要手動重新整理緩沖區。

# 手動重新整理緩沖區
with open('example.txt', 'w') as file:
    file.write('Hello, world!')
    file.flush()
           

fileno()方法

fileno()方法用于擷取檔案描述符。檔案描述符是作業系統配置設定給打開的檔案的唯一辨別符,在使用底層系統調用時非常有用。

# 擷取檔案描述符
with open('example.txt', 'w') as file:
    fd = file.fileno()
    print(fd)
           

4. with語句

在Python中,使用with語句可以更友善地管理檔案對象。with語句會自動為我們執行檔案打開和關閉的操作,并且可以確定程式在任何情況下都能夠正确地關閉檔案。與手動打開和關閉檔案相比,使用with語句可以提高代碼的可讀性和可維護性。

with語句的基本用法

with語句的基本用法如下所示:

with open(file, mode) as f:
    # 檔案操作
           

其中,file表示要打開的檔案名,mode表示要打開的檔案模式,f表示檔案對象。在with語句結束時,檔案将自動關閉。

以下是使用with語句寫入檔案的示例代碼:

# 使用with語句寫入檔案
with open('example.txt', 'w') as file:
    file.write('Hello, world!')
           

上下文管理器對象

在使用with語句時,我們還可以自定義上下文管理器對象來管理檔案對象。上下文管理器對象必須實作__enter__()和__exit__()方法,用于打開和關閉檔案。

以下是一個自定義上下文管理器對象的示例代碼:

class File:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode

    def __enter__(self):
        self.file = open(self.filename, self.mode)
        return self.file

    def __exit__(self, exc_type, exc_value, traceback):
        self.file.close()

# 使用自定義上下文管理器對象寫入檔案
with File('example.txt', 'w') as file:
    file.write('Hello, world!')
           

5. 異常處理

在檔案寫入過程中,可能會發生各種異常情況,例如檔案不存在、沒有權限、磁盤已滿等。為了避免程式崩潰,需要對這些異常進行處理。Python提供了try-except語句來實作異常處理。

常見異常類型

常見的檔案寫入異常類型包括FileNotFoundError、PermissionError和IOError等。以下是處理檔案寫入異常的示例:

try:
    with open('file.txt', 'w') as f:
        f.write('Hello, world!')
except FileNotFoundError:
    print("File not found!")
except PermissionError:
    print("Permission denied!")
except IOError:
    print("IO error occurred!")
finally:
    print("File writing complete.")
           

在以上代碼中,我們使用了try-except語句來嘗試打開并寫入檔案,并捕獲可能的異常類型。無論是否發生異常,finally塊中的代碼都将被執行。

小結

本文介紹了Python檔案寫入的各個方面,包括寫入檔案、檔案緩沖、檔案對象操作、with語句和異常處理。了解這些内容可以幫助你更好地處理檔案操作,并且避免潛在的錯誤和異常。在實際應用中,需要根據具體需求選擇适當的方法來寫入和處理檔案。