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