最初我在考慮使用os.path.isdir
,但我不認爲這適用於zip文件。有沒有辦法窺視這個zip文件並驗證這個目錄是否存在?我想盡可能地防止使用unzip -l "[email protected]"
,但如果這是唯一的解決方案,那麼我想我別無選擇。檢查一個目錄是否存在於使用Python的zip文件中
回答
只需在其末尾檢查文件名「/」。
import zipfile
def isdir(z, name):
return any(x.startswith("%s/" % name.rstrip("/")) for x in z.namelist())
f = zipfile.ZipFile("sample.zip", "r")
print isdir(f, "a")
print isdir(f, "a/b")
print isdir(f, "a/X")
您可以使用此行
any(x.startswith("%s/" % name.rstrip("/")) for x in z.namelist())
,因爲它是可能的歸檔不包含目錄明確;只是一個目錄名稱的路徑。
執行結果:
$ mkdir -p a/b/c/d
$ touch a/X
$ zip -r sample.zip a
adding: a/ (stored 0%)
adding: a/X (stored 0%)
adding: a/b/ (stored 0%)
adding: a/b/c/ (stored 0%)
adding: a/b/c/d/ (stored 0%)
$ python z.py
True
True
False
您可以檢查ZipFile.namelist()的目錄。
import os, zipfile
dir = "some/directory/"
z = zipfile.ZipFile("myfile.zip")
if dir in z.namelist():
print "Found %s!" % dir
這適用於文件,但不適用於目錄:(至少不適用於我) – 2012-07-23 17:36:38
嘗試打印.zip文件的'namelist()'以確保您的目錄格式正確 – enderskill 2012-07-23 17:38:00
是的,我確定目錄是我試圖做的docx文件,這是zip文件無論如何,這應該不重要嗎? – 2012-07-23 17:49:52
您可以使用內置庫ZipFile中做到這一點。
import zipfile
z = zipfile.ZipFile("file.zip")
if "DirName/" in [member.filename for member in z.infolist()]:
print("Directory exists in archive")
使用Python32進行測試和功能。
由於任何原因,它不適用於docx文件。 :( – 2012-07-23 17:53:55
你正在嘗試使用docx文件而不是zip?將擴展名重命名爲.zip並重試,應該可以正常工作 – Lanaru 2012-07-23 17:56:22
它可以正常解壓縮,並且可以打印所有文件。目錄「word」不在namelist()中,而是單獨的文件,例如word/webSettings.xml,因此它不會匹配。 – 2012-07-23 17:57:56
- 1. 檢查一個文件是否存在於zip壓縮文件中
- 2. 如何檢查一個文件是否存在於SD卡中的目錄中
- 3. 檢查文件是否存在於指定的目錄中
- 4. 檢查文件是否存在於特定目錄的shell中
- 5. 使用ASP或PHP檢查文件是否存在於2個目錄中
- 6. 如何使用dotnetzip檢查文件是否存在於zip文件中
- 7. 檢查一個文件是否存在於一個給定的目錄中,而不是子目錄
- 8. Python:檢查給定目錄中是否存在任何文件
- 9. 如何檢查一個目錄中的文件是否存在於另一個目錄中?
- 10. 如何檢查該文件是否存在於一個zip檔案中?
- 11. 檢查目錄中是否存在多個文件
- 12. 檢查目錄中是否存在兩個文件
- 13. 檢查目錄中是否存在多個文件
- 14. 檢查目錄中是否存在多個文件
- 15. 檢查目錄中是否存在多個文件 - matlab
- 16. 使用Javascript/JQuery檢查文件名是否存在於目錄中?
- 17. 檢查存檔中的文件是否存在(zip)
- 18. Python向上移動一個目錄以檢查文件是否存在
- 19. 檢查文件名是否存在於當前目錄
- 20. 檢查文件是否存在於內部目錄
- 21. Python腳本來檢查一個zip文件是否損壞
- 22. 檢查是否存在目錄使用批處理文件
- 23. 檢查一個目錄是否存在於PHP
- 24. 如何檢查一個目錄是否存在於AppleScriptObjc
- 25. 如何檢查zip文件中是否存在文件
- 26. 使用FTPClient檢查一個目錄是否存在
- 27. 如何檢查一個文件是否在使用PHP的某個目錄中?
- 28. 如何檢查一個文件是否在一個目錄
- 29. 檢查一個項目是否已經存在於一個txt文件中
- 30. Perl - 檢查目錄中是否存在數組中的文件
謝謝!那麼這與你提供的示例一起工作,但我試圖爲docx文件做到這一點。基本上,我檢查壓縮文件是否包含目錄「word」,但它給了我虛假的迴應:( – 2012-07-23 17:45:50
只是嘗試打印你的'docx'中的文件列表,看看它有什麼奇怪的:'print zipfile.ZipFile(「sample.docx」,「r」)。namelist()' – 2012-07-23 17:49:52
我想你在'word'之前有一些前綴。請檢查一下。 – 2012-07-23 17:50:20