Python - 我试图解压缩一个包含多个zip文件的文件

时间:2015-01-20 19:20:16

标签: python operating-system zipfile xlsxwriter

我的目标是获取一个包含第二层zip文件的txt文件。问题是txt文件在所有.zip中具有相同的名称,因此它会覆盖.txt,它只返回1 .txt

from ftplib import *
import os, shutil, glob, zipfile, xlsxwriter

ftps = FTP_TLS()
ftps.connect(host='8.8.8.8', port=23)
ftps.login(user='xxxxxxx', passwd='xxxxxxx')
print ftps.getwelcome()
print 'Access was granted'
ftps.prot_p()
ftps.cwd('DirectoryINeed')
data = ftps.nlst() #Returns a list of .zip diles
data.sort() #Sorts the thing out
theFile = data[-2] #Its a .zip file #Stores the .zip i need to retrieve
fileSize = ftps.size(theFile) #gets the size of the file
print fileSize, 'bytes' #prints the size

def grabFile():
   filename = 'the.zip'
   localfile = open(filename, 'wb')
   ftps.retrbinary('RETR ' + theFile, localfile.write)
   ftps.quit()
   localfile.close()

 def unzipping():
    zip_files = glob.glob('*.zip')
    for zip_file in zip_files:
        with zipfile.ZipFile(zip_file, 'r')as Z:
            Z.extractall('anotherdirectory')

grabFile()
unzipping()
lastUnzip()

运行之后,它会抓取我需要的.zip并将内容提取到名为anotherdirectory的文件夹中。它拥有.zips的第二层。这是我遇到麻烦的地方。当我尝试从每个zip中提取文件时。它们都有相同的名称。当我需要一个每个拉链时,我最终得到一个.txt。

2 个答案:

答案 0 :(得分:1)

我认为你每次都指定相同的输出目录和文件名。在解压缩功能中,

变化

Z.extractall('anotherdirectory')

Z.extractall(zip_file)

Z.extractall('anotherdirectory' + zip_file)

如果zip_file完全相同,请为每个输出文件夹指定一个唯一的编号名称: 在解压缩功能之前:

count = 1

然后用以下代码替换其他代码:

Z.extractall('anotherdirectory/' + str(count))
count += 1

答案 1 :(得分:0)

感谢jeremydeanlakey的回复,我能够得到我脚本的这一部分。我是这样做的:

folderUnzip = 'DirectoryYouNeed'
zip_files = glob.glob('*.zip')
count = 1
for zip_file in zip_files:
   with zipfile.ZipFile(zip_file, 'r') as Z:
       Z.extractall(folderUnzip + '/' + str(count))
       count += 1