url='http://www.test.com/test.zip'
z = zipfile.ZipFile(BytesIO(urllib.urlopen(url).read()))
z.extractall(path='D:')
我正在编写上面的代码来从网址下载压缩文件,并已下载并从中提取所有文件到指定的驱动器,它工作正常。 有没有办法可以获取从z中提取的所有文件的元数据。 文件名,文件大小和文件扩展等?
答案 0 :(得分:1)
Zipfile对象实际上有内置的工具,你可以使用它甚至不提取任何东西。 infolist
会返回ZipInfo objects的列表,您可以从中读取某些信息,包括完整文件名和未压缩的大小。
import os
url='http://www.test.com/test.zip'
z = zipfile.ZipFile(BytesIO(urllib.urlopen(url).read()))
info = z.infolist()
data = []
for obj in info:
name = os.path.splitext(obj.filename)
data.append(name[0], name[1], obj.file_size)
我还使用os.path.splitext
将文件的名称与其扩展名分开,因为您确实要求文件类型与名称分开。
答案 1 :(得分:1)
我不知道使用zipfile
模块执行此操作的内置方法,但使用os.path
可以轻松完成:
import os
EXTRACT_PATH = "D:"
z= zipfile.ZipFile(BytesIO(urllib.urlopen(url).read()))
z.extractall(path=EXTRACT_PATH)
extracted_files = [os.path.join(EXTRACT_PATH, filename) for filename in z.namelist()]
for extracted_file in extracted_files:
# All metadata operations here, such as:
print os.path.getsize(extracted_file)