當(dāng)我們嘗試像與文件一樣與目錄交互時(shí),會(huì)出現(xiàn) Python “IsADirectoryError: [Errno 21] Is a directory”。 要解決此錯(cuò)誤,需要在嘗試處理文件時(shí)提供文件的完整路徑,或者選擇目錄中的所有文件并使用 for 循環(huán)。
這是錯(cuò)誤產(chǎn)生的示例代碼。
我們?cè)噲D打開(kāi)一個(gè)目錄,就好像它是一個(gè)導(dǎo)致錯(cuò)誤的文件一樣。
open() 函數(shù)需要文件的完整(相對(duì)或絕對(duì))路徑。
解決錯(cuò)誤的一種方法是指定文件的完整路徑。import os# ??? 文件完整的路徑file_name = r'/tmp/jiyik/example.txt'print(os.path.isfile(file_name)) # ??? Truewith open(file_name, 'r', encoding='utf-8') as f: lines = f.readlines() print(lines)
大家可以使用 os.path.isfile() 方法來(lái)測(cè)試提供的路徑是否為常規(guī)文件。
如果我們打算打開(kāi)目錄中的所有文件,請(qǐng)使用列表推導(dǎo)來(lái)選擇文件的名稱(chēng)。import os dir_name = r'/tmp/jiyik'files_in_dir = [f for f in os.listdir(dir_name) if os.path.isfile(f)]print(files_in_dir)for file_name in files_in_dir: with open(file_name, 'r', encoding='utf-8') as f: lines = f.readlines() print(lines)
列表推導(dǎo)用于對(duì)每個(gè)元素執(zhí)行一些操作,或者選擇滿(mǎn)足條件的元素子集。
os.listdir 方法將路徑作為參數(shù)并返回一個(gè)列表,其中包含指定路徑的目錄中條目的名稱(chēng)。
如果未提供路徑參數(shù),則該方法返回當(dāng)前目錄(與 Python 腳本相同的目錄)的條目。
如果我們嘗試和與 Python 腳本位于同一目錄中的文件進(jìn)行交互,則不必指定絕對(duì)路徑。with open('example.txt', 'r', encoding='utf-8') as f: lines = f.readlines() print(lines)
上面的示例假設(shè)在與 Python 腳本 (main.py) 相同的目錄中有一個(gè)名為 example.txt 的文件。
或者,我們可以指定文件的絕對(duì)路徑。
指向該文件的絕對(duì)文件可能如下所示(取決于我們自己的操作系統(tǒng))。my_str = r'/tmp/jiyik/my-file.txt'my_str_2 = r'C:\Users\jiyik\Desktop\my-file.txt'
聯(lián)系客服