Работая с несколькими файлами ZIP внутри директории и конвертируйте, переименуйте файлы с помощью Python - PullRequest
1 голос
/ 13 апреля 2020

У меня есть каталог с большим количеством ZIP-файлов. ZIP-файлы содержат много CSV-файлов. Во-первых, я хочу изменить формат файлов CSV на паркет. Во-вторых, мне нужно переименовать все файлы паркета и сохранить данные в CSV. (Код ниже). Мне нужно работать с zip-файлами, а не извлекать файлы, чтобы сэкономить место для хранения.

Ниже приведен код для преобразования в .parquet.

flist = ul.get_flist(r"D:\Proyekan\Data yang udah di extract", "csv")
target_folder = "D:\\Proyekan\\Data yang udah di extract\\Parquet\\"
for i, fpath in enumerate(flist):
    #fname = fpath.split('\\')[-1]
    df = pd.read_csv(fpath)
    fname = fpath.split('\\')[-1].split('.')[0] + '.parquet'
    print(f"{i:03} ... Working on file ... {fname}")
    df.to_parquet(f"{target_folder}{fname}", compression="gzip")

А ниже приведен код для переименуйте файлы

import os
import pandas as pd
#This is to rename files

path = "D:\Proyekan\Data FDM"
count = 1

ori_filename = []
new_filename = []
folder = []
head, tail = os.path.split(path)
for root, dirs, files in os.walk(path):
    for file in files:
        new_filecode = "flight_" + str(1000000 + count) +".mat"

        ori_filename.append(os.path.basename(file))
        new_filename.append(new_filecode)
        folder.append(os.path.basename(root))

        fullpath = os.path.join(root,file)
        os.rename(fullpath, os.path.join(root, new_filecode))

        count += 1

#Store data to csv
df = pd.DataFrame(list(zip(ori_filename, new_filename, folder)), columns = ['raw_file','file_id','tail_number'])
df.to_csv(r'D:\Proyekan\FILES\Metadata.csv',index = False, header = True)

Есть идеи, как мне отредактировать этот код для чтения ZIP-файлов? Любая помощь будет оценена

1 Ответ

0 голосов
/ 13 апреля 2020

это выстрел в темноте, попробуйте и посмотрим, как оно будет:

from zipfile import ZipFile
folder = 'list of zipped files'
#iterate through every zip file
for zips in folder:
    with ZipFile(zips) as myzip:
        for csv in myzip.namelist():
            with myzip.open(csv) as myfile:
                #read the csv in the zip and convert to parquet
                #if this does not work, u could break down the steps
                #read the data first into a variable, then to parquet next
                pd.read_csv(myfile).to_parquet('new_location')
...