迭代 ZipFile 以获取文件名和大小列表
Iterating over ZipFile to get list of file names and sizes
我正在尝试遍历包含 n 个子文件夹的文件夹,每个子文件夹都有一个包含 TIFF 文件的子文件夹。使用 zipfile 模块,我尝试了以下操作:
path = 'D:\Project\I20\top'
with ZipFile(path, 'r') as zipObj:
listOfiles = zipObj.infolist()
for elem in listOfiles:
print(elem.filename, ' : ', elem.file_size, ' : ')
当我尝试执行此操作时出现以下错误:
Traceback (most recent call last):
File "D:\Test\algo\checksize.py", line 30, in <module>
with ZipFile(path, 'r') as zipObj:
File "C:\Users\manaT\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1239, in __init__
self.fp = io.open(file, filemode)
PermissionError: [Errno 13] Permission denied: 'D:\Project\I20\top'
我已经尝试 运行 Atom 作为管理员,但那行不通。我已尝试更改驱动器的属性以允许经过身份验证的用户完全访问。
文件夹属性仍然是只读的,每次我更改它时它都会恢复为只读。
有解决办法吗?如果有另一种方法可以让我循环浏览 zip 文件中文件夹中的文件,并将它们的名称和大小存储在字典中,这也会有所帮助。
如果想获取文件夹中的 .zip 文件列表,则可以在目录上使用 glob()
或 rglob()
。此外,ZipFile
class 需要 .zip 文件路径作为参数而不是目录。然后您可以遍历 zip 文件中的文件条目。
from pathlib import Path
from zipfile import ZipFile
zips = {} # dictionary of zip files and sizes
path = Path(r'D:\Project\I20\top')
for file in path.glob('*.zip'):
with ZipFile(file, 'r') as zipObj:
for entry in zipObj.infolist():
print(entry.filename, ' : ', entry.file_size, ' : ')
# store filename and size in dictionary
zips[entry.filename] = entry.file_size
如果要在目标文件夹中递归查找 sub-folders 中的 .zip 文件,请将 glob()
替换为 rglob()
。
如果 zip 文件包含目录条目,请添加 if not entry.filename.endswith('/'):
以在打印条目之前忽略目录条目 and/or 将其添加到字典中。
您不能使用 ZipFile
打开目录,您只能打开一个 zip 文件。您需要阅读压缩文件中的文件列表:
with open(zipFile, 'r') as f:
files = f.infolist()
filenames = [file.filename for file in files]
您现在将拥有一个代表文件名的字符串列表。您现在可以像处理文件名一样处理这些字符串,并找出目录中的内容。
我正在尝试遍历包含 n 个子文件夹的文件夹,每个子文件夹都有一个包含 TIFF 文件的子文件夹。使用 zipfile 模块,我尝试了以下操作:
path = 'D:\Project\I20\top'
with ZipFile(path, 'r') as zipObj:
listOfiles = zipObj.infolist()
for elem in listOfiles:
print(elem.filename, ' : ', elem.file_size, ' : ')
当我尝试执行此操作时出现以下错误:
Traceback (most recent call last):
File "D:\Test\algo\checksize.py", line 30, in <module>
with ZipFile(path, 'r') as zipObj:
File "C:\Users\manaT\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1239, in __init__
self.fp = io.open(file, filemode)
PermissionError: [Errno 13] Permission denied: 'D:\Project\I20\top'
我已经尝试 运行 Atom 作为管理员,但那行不通。我已尝试更改驱动器的属性以允许经过身份验证的用户完全访问。
文件夹属性仍然是只读的,每次我更改它时它都会恢复为只读。
有解决办法吗?如果有另一种方法可以让我循环浏览 zip 文件中文件夹中的文件,并将它们的名称和大小存储在字典中,这也会有所帮助。
如果想获取文件夹中的 .zip 文件列表,则可以在目录上使用 glob()
或 rglob()
。此外,ZipFile
class 需要 .zip 文件路径作为参数而不是目录。然后您可以遍历 zip 文件中的文件条目。
from pathlib import Path
from zipfile import ZipFile
zips = {} # dictionary of zip files and sizes
path = Path(r'D:\Project\I20\top')
for file in path.glob('*.zip'):
with ZipFile(file, 'r') as zipObj:
for entry in zipObj.infolist():
print(entry.filename, ' : ', entry.file_size, ' : ')
# store filename and size in dictionary
zips[entry.filename] = entry.file_size
如果要在目标文件夹中递归查找 sub-folders 中的 .zip 文件,请将 glob()
替换为 rglob()
。
如果 zip 文件包含目录条目,请添加 if not entry.filename.endswith('/'):
以在打印条目之前忽略目录条目 and/or 将其添加到字典中。
您不能使用 ZipFile
打开目录,您只能打开一个 zip 文件。您需要阅读压缩文件中的文件列表:
with open(zipFile, 'r') as f:
files = f.infolist()
filenames = [file.filename for file in files]
您现在将拥有一个代表文件名的字符串列表。您现在可以像处理文件名一样处理这些字符串,并找出目录中的内容。