幕布斯6054654
2023-03-22 17:17:26
假設我正在使用 編寫代碼pathlib,并且我想遍歷目錄同一級別中的所有文件。我可以通過兩種方式做到這一點:p = pathlib.Path('/some/path')for f in p.iterdir(): print(f)p = pathlib.Path('/some/path')for f in p.glob('*'): print(f)有哪一種選擇更好嗎?
2 回答

茅侃侃
TA貢獻1842條經驗 獲得超22個贊
為什么要將 API 用于針對過濾器模式的額外工作解析和測試,而您可以……不是?
glob
當您需要使用過濾功能并且過濾器簡單且基于字符串時更好,因為它簡化了工作。當然,手寫簡單匹配(iterdir
通過if path.endswith('.txt'):
而不是 過濾glob('*.txt')
)可能比基于正則表達式的模式匹配glob
隱藏更有效,但考慮到磁盤 I/O 慢幾個數量級,重新發明輪子通常不值得。
但是,如果您根本不需要過濾功能,請不要使用它。glob
在代碼簡單性或功能方面對您沒有任何好處,并且會損害性能,因此只需使用iterdir
.

元芳怎么了
TA貢獻1798條經驗 獲得超7個贊
行為上至少存在一個差異:
如果該目錄不存在,iterdir()
則引發一個FileNotFoundError
.?glob('*')
將這種情況視為一個空文件夾,返回一個空的可迭代對象。
>>> import pathlib
>>> path = pathlib.Path('/some/path')
>>> list(path.glob('*'))
[]
>>> list(path.iterdir())
Traceback (most recent call last):
? [...]
FileNotFoundError: [Errno 2] No such file or directory: '/some/path'
添加回答
舉報
0/150
提交
取消