在Python中,shutil和fileinput模塊是處理文件和輸入/輸出(I/O)操作的有力工具。shutil模塊提供了一種在Python中操作文件的高級接口,而fileinput模塊則允許我們輕松地讀取多個輸入流。
shutil模塊
shutil模塊是Python的標準庫之一,提供了很多用于處理文件和文件夾的函數。下面是一些常用的shutil函數:
- ??shutil.copy(src, dst)??: 復制源文件(src)到目標路徑(dst)。
- ??shutil.move(src, dst)??: 將源文件(src)移動到目標路徑(dst)。
- ??shutil.copytree(src, dst)??: 復制源文件夾(src)到目標路徑(dst)。
- ??shutil.rmtree(path)??: 刪除包含空文件夾的路徑。
- ??shutil.chown(path, user=None, group=None)??: 改變路徑(path)的所有者。
- ??shutil.get_terminal_size()??: 返回終端窗口的大小。
- ??shutil.disk_usage(path)??: 返回指定路徑的磁盤使用情況。
- ??shutil.make_archive(base_name, format, root_dir=None, verbose=0, dry_run=0)??: 創建歸檔文件。
- ??shutil.register_rmtree(dir)??: 在rmtree函數中注冊文件夾,以便在刪除時通知rmtree函數。
以下是shutil模塊的使用示例:
pythonimport shutil
import os# 創建文件夾
os.makedirs('test_folder')# 復制文件
shutil.copy('source.txt', 'test_folder/destination.txt')# 移動文件
shutil.move('source.txt', 'test_folder/source.txt')# 刪除文件夾,包括其中的所有文件和子文件夾
shutil.rmtree('test_folder')
import shutil
import os# 創建文件夾
os.makedirs('test_folder')# 復制文件
shutil.copy('source.txt', 'test_folder/destination.txt')# 移動文件
shutil.move('source.txt', 'test_folder/source.txt')# 刪除文件夾,包括其中的所有文件和子文件夾
shutil.rmtree('test_folder')
fileinput模塊
fileinput模塊允許用戶在Python程序中輕松地迭代多個輸入流,包括標準輸入、文件和目錄。fileinput模塊的主要功能是處理多個輸入流,這對于處理命令行參數、文件名和標準輸入非常有用。它支持在每個文件上執行操作,并在操作完成后自動關閉文件。以下是一些常用的fileinput函數:
- ??fileinput.input(files=None, inplace=False, backup='', bufsize=-1, mode='b', openhook=None)??: 從文件中讀取行。
- ??fileinput.FileInput(files=None, inplace=False, backup='', bufsize=-1, mode='b', openhook=None)??: 從文件中讀取行,并保持打開的文件句柄。
- ??fileinput.hook_compressed(method=None, mode='b')??: 為open函數添加壓縮支持。
- ??fileinput.hook_encoded(encoding=None)??: 為open函數添加編碼支持。
- ??fileinput.close()??: 關閉所有打開的文件句柄。
- ??fileinput.isfirstline()??: 如果當前行是第一個行,則返回True。
- ??fileinput.isstdin()??: 如果當前行來自標準輸入,則返回True。
- ??fileinput.nextfile()??: 關閉當前文件并前進到下一個文件。如果已經處于最后一個文件,則返回None。
- ??fileinput.filename()??: 返回當前文件的名稱。如果已經處于最后一個文件,則返回None。
- ??fileinput.lineno()??: 返回當前行的行號。如果已經處于最后一個文件,則返回None。
- ??fileinput.filelineno()??: 返回當前文件的行號。如果已經處于最后一個文件,則返回None。
- ??fileinput.fileno()??: 返回當前文件的文件描述符。如果已經處于最后一個文件,則返回None。
- ??fileinput.readline()??: 讀取并返回當前文件的下一行,不包括結尾的換行符(如果有的話)。如果已經處于最后一個文件,則返回None。
- ??fileinput.readlines()??: 讀取并返回當前文件的剩余所有行,每行作為一個字符串列表。如果已經處于最后一個文件,則返回None。
- ??fileinput.__next__():__next__()??:讀取并返回當前文件的下一行,不包括結尾的換行符(如果有的話)。如果已經處于最后一個文件,則引發StopIteration異常。
以下是使用fileinput模塊的示例代碼:
pythonimport fileinput# 從文件中讀取行并輸出到控制臺
for line in fileinput.input('test.txt'):print(line)# 在文件上執行操作并輸出結果
with fileinput.FileInput('test.txt') as f:for line in f:# 對每一行進行處理processed_line = line.strip().upper()print(processed_line)
import fileinput# 從文件中讀取行并輸出到控制臺
for line in fileinput.input('test.txt'):print(line)# 在文件上執行操作并輸出結果
with fileinput.FileInput('test.txt') as f:for line in f:# 對每一行進行處理processed_line = line.strip().upper()print(processed_line)
在上面的示例中,我們使用??fileinput.input()??函數從文件中讀取行,并將其打印到控制臺。我們還使用??fileinput.FileInput()??函數創建一個文件對象,并在其上迭代每一行。對于每一行,我們執行一些操作(例如去除首尾的空白字符并轉換為大寫字母),然后將其打印到控制臺。
除了上述示例外,fileinput模塊還提供了許多其他功能,例如支持從標準輸入讀取行、支持文件備份、支持指定緩沖區大小等等。您可以查看Python文檔以獲取更多信息。