我的目标是获取一个包含第二层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。
答案 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