2017-12-19 7 views
0

Guten Tag, Ich habe ein Verzeichnis mit 12 Dateien. Ich möchte 4 separate Zip-Dateien mit jeweils 3 Dateien erstellen. Der Haken dabei ist, dass ich die Zip-Datei basierend auf den Dateinamen dynamisch benennen möchte. (Alle 3 für jeden Reißverschluss beginnen gleich)Python zu Zip-Dateien mit dynamischen Namen

dh.

IT-12123.txt 
IT-12123.pdf 
IT-12123.xls 

IT-23232.txt 
IT-23232.pdf 
IT-23232.xls 

Ich möchte IT-23232.zip erstellen (mit all diesen Dateien in diesem zip) auch eine Zip genannt IT-12123.zip (mit all diesen Dateien in diesem zip)

Danke

+2

Können Sie bitte Ihren Code teilen? Können Sie Dateien mit einem nicht dynamischen Namen komprimieren oder möchten Sie, dass auch jemand diesen Code für Sie schreibt? – DevB2F

+0

Willkommen bei [SO]! Stack Overflow ist eine Frage-und-Antwort-Site. Bei [SO] stellen Leser wie Sie Fragen, während andere Leser versuchen, diese Fragen zu beantworten. Ihr Beitrag hat viele gute Informationen, aber es fehlt die eine wesentliche Zutat: eine Frage! Was genau fragst du? (Übrigens, besuchen Sie bitte die [Tour] und lesen [fragen], wenn Sie einen Moment haben.) –

+0

Sehen Sie dies: https://stackoverflow.com/questions/678236/how-to-get-the-filename- Ohne-die-Erweiterung-von-einem-Pfad-in-Python? Noredirect = 1 & lq = 1 –

Antwort

0

Hier ist eine einfache Lösung, wenn Ihre Dateien alle im selben Ordner befinden.

import itertools 
import glob 
import os 
import zipfile 
# move to the directory where the files are located 
os.chdir("/mydir") 
# find all files starting with IT 
files = glob.glob('IT*') 
files_no_ext = [] 
for file in files: 
    # remove extension from files names 
    files_no_ext.append(os.path.splitext(file)[0]) 
# group no extension files by name 
grouped_files= itertools.groupby(files_no_ext) 
for name, group in grouped_files: 
    zipped = zipfile.ZipFile(name+'.zip', 'w') 
    to_zip = glob.glob(name+'*') 
    for file in to_zip: 
     zipped.write(file) 
    zipped.close() 
Verwandte Themen