2016-05-22 6 views
0

У меня проблемы с python и zipfile, а именно: я не могу добавить второй файл в свой почтовый индекс. вот мой код, если вам нужно больше, я буду рад предоставить его.python zipfile несколько файлов

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 

в директории "тест", у меня есть 2 файла: "example.csv" и "example1.csv" это приводит к следующей ошибке:

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 

, если я использую только " fn_zipfile.write (csvFile)», я получаю эту дополнительную информацию:

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' 

Я попытался это с различными файлами и всегда один и тот же результат, кроме случаев, когда у меня только 1 файл в моей тестовой директории. Затем все работает так, как ожидалось.

+0

Почему вы думаете, что исключение лежит? –

+0

потому что я сделал ls | grep xxx и получил файл, также, почему добавляется первый файл? – Sybie

+0

не поймите меня неправильно, я уверен, что python не может найти файл. Мой вопрос: «Как я могу решить свою проблему» – Sybie

ответ

1

Одна из ваших проблем является то, что вы перечисляете содержимое некоторых отдаленных источника каталога, почему-то называют fn_destinationFolder, чтобы получить имена файлов, фильтрация .csv - нижний регистр только затем говорит ZipFile для добавления имени файла. Это как сказать кому-то, кто находится в London, получить желтую кабину на перекрестке 1-го и Main после проверки того, что эти улицы существуют в Нью-Йорк и что там есть номер такси.

Убедитесь, что вы проходите fn_zipfile.write полный путь к файлу ввода - вы также можете изменить имя внутри файла почтового индекса, например .:

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

Спасибо за ваш ответ, я попробовал функцию «os.path.join», но не знал о переименовании с zip.write, чтобы исключить путь. Таким образом, я могу дать вам «kudos» и подтвердить, что это работает, с возможностью переименования То, что я до сих пор не понимаю, это тот факт, что первый файл получает zip. У вас есть объяснение для меня? спасибо! – Sybie