ZIP-файлы в цикле в Python - PullRequest
       18

ZIP-файлы в цикле в Python

1 голос
/ 08 ноября 2019

У меня есть фрейм данных с идентификационными данными и именами студентов и другой информацией. Я сделал групповое задание по имени ученика (stu NAME), мне нужно создать zip-файл (на основе NAME ученика) для каждого ученика индивидуально, а затем сжать их всех. Я могу заархивировать все файлы, но не могу заархивировать профиль каждого студента на основе имени ученика. Мне просто нужна строка в моем цикле после (out_file.write (csv)), чтобы сжать каждый файл CSV.

groupby = df_concat.groupby('stu_NAME')

for n,g in groupby:
    csv=g.to_csv(index=false)

    with open('{}{}.csv'.format(path,n),'w' as out_file:
        out_file.write(csv)


shutil.make_archive('path1','zip', 'path2')

1 Ответ

0 голосов
/ 08 ноября 2019

Как насчет:

import pandas as pd
import zipfile

# Create a zip file
def create_zip(srcs, dst, filenames, op):
    zf = zipfile.ZipFile(dst, op, zipfile.ZIP_DEFLATED)
    for src, filename in zip(srcs, filenames):
        zf.write(src, filename)
    zf.close()

def main():
    dct = {'stu_NAME': ['student_2', 'student_1'],
           'other_info': [2, 1]}

    df = pd.DataFrame(dct)

    groupby = df.groupby(['stu_NAME'])

    zip_all_zips = []
    zip_all_csvs = []

    for n,g in groupby:
        csv=g.to_csv(index=False)
        filename = '{}{}'.format('path_',n)
        filename_csv = filename + '.csv'
        filename_zip = filename + '.zip'
        with open(filename_csv,'w') as out_file:
            out_file.write(csv)
        zip_all_zips.append(filename_zip)
        zip_all_csvs.append(filename_csv)
        # Create a zip file for each student
        create_zip([filename_csv], filename_zip, [filename_csv], 'w')

    # Create a zip file with all students (.zip of .zips)
    create_zip(zip_all_zips, 'all_students_zip.zip', zip_all_zips, 'w')

    # Create a zip file with all students (.zip of .csvs)
    create_zip(zip_all_csvs, 'all_students_csv.zip', zip_all_csvs, 'w')

if __name__ == '__main__':
    main()

Доход

all_students_csv.zip  
path_student_1.csv  
path_student_2.csv
all_students_zip.zip  
path_student_1.zip  
path_student_2.zip

Создает (1) ZIP-файл каждого .csv, (2) .zip со всеми .csv и (3) .zip со всеми .zip. Итак, вы комментируете то, что вам не нужно. Если вы хотите удалить .csv после создания .zip, вы можете сделать:

import os
for filename_csv in zip_all_csvs:
    os.remove(filename_csv) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...