La compression des fichiers en python
Mon Programme fonctionne en douceur, mais je veux que mes fichiers de ftp à zip dans mon disque local
Mon Problème : Seulement 1 fichier zippé après l'appel de ma fonction main ()
Voici mon code:
principal
import os
import upload
import download
import zipfile
import ConfigParser
import ftputil
def main():
#create a folder Temp on d drive for later use
path = r'D:\Temp'
os.mkdir(path)
#parse all the values at config.ini file
config = ConfigParser.ConfigParser()
config.readfp(open('config.ini'))
server = config.get('main', 'Server')
username = config.get('main', 'Username')
password = config.get('main', 'Password')
uploads = config.get('main', 'Upload folder')
downloads = config.get('main', 'Download folder')
#connect to ftp
ftp = ftputil.FTPHost(server, username, password)
dirlist = ftp.listdir(downloads)
for list in dirlist:
ftp.chdir(downloads)
target = os.path.join(path, list)
ftp.download(list, target)
#########################################################
# THis section is where algo fails but the program run#
########################################################
#zipping files
absolute_path = r'D:\Temp'
dirlist = os.listdir(absolute_path)
filepath = r'D:\Temp\project2.zip'
for list in dirlist:
get_file = os.path.join(absolute_path, list)
zip_name = zipfile.ZipFile(filepath, 'w')
zip_name.write(get_file, 'Project2b\\' + list)
if __name__ == '__main__':
print "cannot be"
- Avez-vous des archives se composent de dernier fichier
target
? - Il vous manque la méthode de compression, zipfile.ZIP_DEFLATED si elle n'est pas donnée, les fichiers ne sont pas compressés. Il devrait être zipfile.ZipFile(nom_fichier, "w", zipfile.ZIP_DEFLATED) pour inclure la compression
Vous devez vous connecter pour publier un commentaire.
Quand vous faites cela :
vous recréer un ZipFile pour chaque fichier que vous souhaitez compresser, le
"w"
mode signifie que vous recréer à partir de zéro.Essayez ceci (créer le fichier zip avant la boucle) :
Ou cela, il va ouvrir la zipfile en mode ajout:
Ont un look à la shutil module. Il y a un exemple d'utilisation de shutil.make_archive():
http://docs.python.org/library/shutil.html
Si vous avez beaucoup de fichiers vous pouvez zip en parallèle:
Meilleure façon de le faire est de mettre des instructions de débogage à votre pour les boucles, il y a deux possibilités;
est que la première forloop seulement télécharge un fichier à partir du dossier ftp
deux est que la première boucle télécharge tous les fichiers mais la deuxième boucle zips seulement l'un d'eux
utilisez des instructions d'impression pour afficher les fichiers téléchargés/fermeture à boucles, bonne chance