亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

pathlib glob('*') 和 iterdir 有什么區別?

pathlib glob('*') 和 iterdir 有什么區別?

幕布斯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.


查看完整回答
反對 回復 2023-03-22
?
元芳怎么了

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'


查看完整回答
反對 回復 2023-03-22
  • 2 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號