1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > python解压到指定文件夹_Python:将文件解压缩到当前工作目录 但不保存zip中的目录结构...

python解压到指定文件夹_Python:将文件解压缩到当前工作目录 但不保存zip中的目录结构...

时间:2023-06-30 22:45:56

相关推荐

python解压到指定文件夹_Python:将文件解压缩到当前工作目录 但不保存zip中的目录结构...

我有一个像这样的zip文件:

myArchive.zip

|

-folder1

|

--folder2

|

---myimage.jpg

当我尝试提取myimage.jpg时:

with zipfile.ZipFile('myArchive.zip', 'r') as zfile:

zfile.extract('folder1/folder2/myimage.jpg')

我将在我当前工作的目录中获得/folder1/folder2/myimage.jpg

但我只想将myimage.jpg提取到当前工作目录,我该怎么办呢?

解决方法:

而不是使用extract或extractall,只需获取数据并将其写入您喜欢的任何文件.这是一个代码示例,可以满足您的需求:

import os, sys, time

import zipfile

ENC = 'cp437'

outdir = unicode(os.path.abspath('.'))

outzip = 'c:/1temp/timbersales.zip'

zf = zipfile.ZipFile(outzip, 'r')

for info in zf.infolist():

fn, dtz = info.filename, info.date_time # , info.file_size

# some zips have dirs listed as files. Catch

# and bypass those.

name = os.path.basename(fn)

if not name:

continue

# get our filename converted from bytes to unicode

fn_uni = fn.decode(ENC, 'replace')

bn_uni = os.path.basename(fn_uni)

# this method is about 15% faster than extractall, and

# preserves modify and access dates

c = zf.open(fn)

outfile = os.path.join(outdir, bn_uni)

# try/except to avoid problems with locked files, etc

# do in chunks to avoid memory problems

chunk = 2**16

try:

with open(outfile, 'wb') as f:

s = c.read(chunk)

f.write(s)

while not len(s) < chunk:

s = c.read(chunk)

f.write(s)

c.close()

# set modify and access dates to that inside the zip

dtout = time.mktime(dtz + (0, 0, -1))

os.utime(outfile, (dtout, dtout))

except IOError:

c.close()

此示例执行zip中的所有文件,但您可以轻松添加几行来检查特定文件.它还将覆盖工作目录中的任何文件,其名称与提取的文件同名.

标签:python,zipfile

来源: https://codeday.me/bug/0729/1567948.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。