Python中循环中的zip文件

2024-04-25 13:10:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,里面有学生的身份证、姓名和其他信息。我做了一个学生姓名分组(stu-name),我需要为每个学生单独创建zip文件(基于学生姓名),然后压缩他们所有人。 我可以压缩所有文件,但不能压缩每个学生档案基于学生姓名。我只需要在我的循环线后(出)_文件.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')

Tags: 文件csv数据name信息zipout学生
1条回答
网友
1楼 · 发布于 2024-04-25 13:10:59

怎么样:

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)每个.csv的.zip,(2)一个包含所有.csv的.zip和(3)一个包含所有.zip的.zip。所以你把你不需要的注释掉。如果要在创建.zip后删除.csv,则可以执行以下操作:

import os
for filename_csv in zip_all_csvs:
    os.remove(filename_csv) 

相关问题 更多 >

    热门问题