`zipfile`: `zipfile.Path`’s `glob()` and `rglob()` are not documented
還沒有人認領這個 Issue。
- 主要語言
- Python
- 星號
- 77.2k
- 分支
- 36k
- PR 合併指標
- PR 指標待擷取
描述
Documentation
It seems documentation for zipfile.Path’s glob() and rglob() is missing (or maybe they're meant to be private but wrongly "exported"?!
Also, the behaviour of rglob() seems a bit unexpected:
Assume the following test zip file:
1/
1/a
1/b
1/c
1/1/
1/1/loop
1/2/
1/2/a
1/2/b
1/2/c
1/3/
2/
2/f
3/
3/g
.dir/
.dir/a/
.dir/a/1
.dir/.1
.dir/.d
.file
where pathnames ending in / are directories and loop is a symlink to ../../1.
With:
p = zipfile.Path("test.zip")
glob() does not allow an empty pattern:
i = p.glob("")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.13/zipfile/_path/__init__.py", line 419, in glob
raise ValueError(f"Unacceptable pattern: {pattern!r}")
ValueError: Unacceptable pattern: ''
But rglob() does:
>>> for i in p.rglob(""):
... print(i)
test.zip/1/
test.zip/1/1/
test.zip/1/2/
test.zip/1/3/
test.zip/2/
test.zip/3/
test.zip/.dir/
test.zip/.dir/a/
in which case it seems to list only directories.
If using * as pattern:
>>> for i in p.rglob("*"):
... print(i)
test.zip/1/a
test.zip/1/b
test.zip/1/c
test.zip/1/1/
test.zip/1/1/loop
test.zip/1/2/
test.zip/1/2/a
test.zip/1/2/b
test.zip/1/2/c
test.zip/1/3/
test.zip/2/f
test.zip/3/g
test.zip/.dir/a/
test.zip/.dir/a/1
test.zip/.dir/.1
test.zip/.dir/.d
the results are also a bit... unexpected...
.files are included (which is at least not compatible with POSIX pattern matching notation on pathnames)- some but not all directories are given, e.g. we have
1/1/but not1/, which we did get when the pattern is the empty string. - documentation should also note, that the zip file name is for some reason prepended.
It's also not really clear whether these two functions are safe at all,... e.g. could they be used to break out of traversing the ZIP's contents with some tricky .. (cause at some point the docs warn about Path not doing any such sanitisations).
Cheers,
Chris.
Linked PRs
- gh-144460
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
從 zipfile.Path 以及 glob() 和 rglob() 進入點開始,包括顯示為 zipfile/_path/init.py 的實作路徑。檢視已回報的空模式和 '*' 範例,然後查看連結的 PR gh-144460 與討論。文件所述行為、路徑前綴、目錄結果、點檔案和安全性考量都已確定並涵蓋後,即可視為完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- python
- 領域
- documentation
- Issue 類型
- 文件
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 活躍度
- 停滯
- 描述清晰度
- 需要釐清
- 新手友好度
- 25/100