2016-05-22 11 views
0

Ich habe Probleme mit Python und ZIP-Datei, nämlich: Ich kann keine zweite Datei zu meiner Zip hinzufügen. hier ist mein Code, wenn Sie mehr brauchen, werde ich froh sein, es zur Verfügung zu stellen.Python Zipfile mehrere Dateien

def zipDir(fn_source, fn_destinationFolder): 
    ''' fn_destinationFolder = folder to zip 
     fn_source = destination path for the zip 
    ''' 
    fn_zipfileName = os.path.join(os.path.dirname(os.path.basename(fn_source)),fn_destinationFolder)+'.zip' 

    with zipfile.ZipFile(fn_zipfileName, 'w') as fn_zipfile: 
    for csvFile in os.listdir(fn_destinationFolder): 
#  fn_zipfile.write(csvFile) 
     if csvFile.endswith('.csv'): 
     try: 
      # fn_zipfile.write(os.path.join(fn_destinationFolder,csvFile)) ## write the whole filestructure to zip, '/home/uname/.../xyz.zip' 
      fn_zipfile.write(csvFile)          ## write only the file to zip 'xyz.zip' 
     except IOError: 
      None 
      print('did not add',csvFile,'to',fn_zipfile) 
    fn_zipfile.printdir() 
    return fn_zipfileName 

im "Test" dir, habe ich 2 Dateien: "Beispiel.csv" und "example1.csv" dies in dem folgenden Fehler führt:

python3.5 removing_the_header_from_CSV.py --from test --to zip 
Removed headers from example.csv 
Removed headers from example1.csv 
did not add example1.csv to <zipfile.ZipFile filename='/home/xxx/repos/automate_the_boring_stuff/14_csv_files_and_json_data/NEW_test_2016-05-22_12-19-23.zip' mode='w'> 
File Name            Modified    Size 
example.csv         2016-05-20 17:12:19   191 
zipfile can be found at /home/xxx/repos/automate_the_boring_stuff/14_csv_files_and_json_data/NEW_test_2016-05-22_12-19-23.zip 

wenn ich das nur " fn_zipfile.write (csvfile)“, bekomme ich diese extra info:

python3.5 removing_the_header_from_CSV.py --from test --to zip 
Removed headers from example.csv 
Removed headers from example1.csv 
Traceback (most recent call last): 
    File "removing_the_header_from_CSV.py", line 169, in <module> 
main() 
    File "removing_the_header_from_CSV.py", line 156, in main 
zipfileName = zipDir(source, destinationFolder) 
    File "removing_the_header_from_CSV.py", line 112, in zipDir 
fn_zipfile.write(csvFile) 
    File "/usr/lib/python3.5/zipfile.py", line 1433, in write 
st = os.stat(filename) 
FileNotFoundError: [Errno 2] No such file or directory: 'example1.csv' 

ich schon versucht, diesen mit verschiedenen Dateien und immer das gleiche Ergebnis, außer wenn ich 1 Datei in meinem Test dir nur. Dann funktioniert alles wie erwartet.

+0

Warum denken Sie, die Ausnahme liegende? –

+0

weil ich ein ls gemacht habe grep xxx und habe die Datei auch, warum wird die erste Datei hinzugefügt? – Sybie

+0

Versteh mich nicht falsch, ich bin sicher, dass Python die Datei nicht finden kann. Meine Frage ist: "Wie behebe ich mein Problem?" – Sybie

Antwort

1

Eines Ihrer Probleme ist, dass Sie die Inhalte von einem entfernten Quelle Listing Verzeichnis, aus irgendeinem Grund genannt fn_destinationFolder, die Dateinamen zu bekommen, für CSV-Filterung - nur Kleinbuchstaben und dann die Zip-Datei zu sagen um den Dateinamen hinzuzufügen. Das ist so, als würde man jemandem sagen, wer in London ist, ein gelbes Taxi an der Kreuzung von 1st und Main bekommen, nachdem man überprüft hat, dass diese Straßen in New York existieren und dass dort ein Taxistand ist.

Stellen Sie sicher, dass Sie fn_zipfile.write den vollständigen Pfad der Eingabedatei übergeben - Sie auch den Namen innerhalb der Zip-Datei außer Kraft setzen kann, z.B .:

fn_zipfile.write(os.path.join(fn_destinationFolder, csvFile), csvFile) 
+0

Vielen Dank für Ihre Antwort, ich hatte versucht die "os.path.join" -Funktion aber war nicht bewusst, die Umbenennung Option mit zip.write, um den Pfad auszuschließen. Ich kann Ihnen also "Kudos" geben und bestätigen, dass dies funktioniert, mit der Umbenennungsoption Was ich immer noch nicht verstehe, ist die Tatsache, dass die erste Datei gezippt wird. Hast du eine Erklärung für mich? Vielen Dank! – Sybie