2015-08-11 4 views
0

Я пытался найти ответ, но ничего конкретного в моей ситуации. Я очень новичок в программировании. У меня есть 20-30 файлов .csv в папке. Я хотел бы, чтобы перебрать все файлы, и почтовый каждый файл CSV в ZIP-файл (другую папку)Python: Zip все файлы индивидуально в папке

C:\users\xyz\Source\NumberOne.csv 
C:\users\xyz\Source\NumberTwo.csv 
C:\users\xyz\Source\NumberThree.csv 


C:\users\xyz\Dest\NumberOne.zip 
C:\users\xyz\Dest\NumberTwo.zip 
C:\users\xyz\Dest\NumberThree.zip 

я пробовал разные функции кода из Интернета, но ничего не работает на отдельных файлах. рабочий код, который я имею, застегивает все файлы в 1 ZIP-папку.

пожалуйста, помогите

+0

Вы знаете, как создать архив почтового индекса для один файл? Вы знаете, как получить список файлов '* .csv' в данном каталоге? Вы знаете, как использовать 'for'-loop? Если вы не знаете ответа на любой из этих вопросов, задайте отдельный вопрос для каждой конкретной проблемы. – jfs

ответ

0

Чтобы сжать файл, вы можете использовать это:

import commands 

cmd = 'zip -j ' + zipfile + ' ' + file 
commands.getstatusoutput(cmd) 
+1

Python имеет модуль 'zipfile'; нет необходимости запускать внешнюю команду. – Cyphase

1

Это должно работать. При запуске необходимо передать исходные и целевые каталоги (или изменить код).

import os 
import sys 
import zipfile 


def csv_files(source_dir): 
    for filename in os.listdir(source_dir): 
     if filename.endswith('.csv'): 
      yield filename 


source_dir = sys.argv[1] # r'C:\users\xyz\Source\' 
dest_dir = sys.argv[2] # r'C:\users\xyz\Dest\' 

os.chdir(dest_dir) # To work around zipfile limitations 

for csv_filename in csv_files(source_dir): 
    file_root = os.path.splitext(csv_filename)[0] 
    zip_file_name = file_root + '.zip' 
    zip_file_path = os.path.join(dest_dir, zip_file_name) 
    with zipfile.ZipFile(zip_file_path, mode='w') as zf: 
     zf.write(csv_filename) 
0

Чтобы сохранить все .csv файлы из исходной папки в виде отдельных .zip архивов в папке назначения:

#!/usr/bin/env python3 
import sys 
from pathlib import Path 
from zipfile import ZipFile 

src_dir, dest_dir = map(Path, sys.argv[1:]) 
for filename in src_dir.glob('*.csv'): # enumerate all csv-files in the src folder 
    # zip each file individually 
    with ZipFile(str(dest_dir/(filename.stem + '.zip')), 'w') as archive: 
     archive.write(str(filename), arcname=filename.name) 

Пример:

T:\> py zip-csv-files.py C:\users\xyz\Source C:\users\xyz\Dest 
Смежные вопросы