Как я могу применить код к zip-файлу, одновременно изменив тип файла в выходной zip-папке?Python

Программы на Python
Ответить
Anonymous
 Как я могу применить код к zip-файлу, одновременно изменив тип файла в выходной zip-папке?

Сообщение Anonymous »

У меня есть код, который я пытаюсь использовать для zip-файла в Python, и я хочу, чтобы выходные данные были другим zip-файлом, но с файлами, измененными на .txt или .csv.

Код, который у меня работает без ошибок, но не может изменить тип файла, и я не могу определить, изменяется ли содержимое.

Я могу изменить отдельные файлы .psa, взятые из zip-архива, по одному, и результат такой: файл .csv с необходимыми изменениями.
Разбивка:

У меня есть zip-папка, состоящая из файлов .psa.

У меня есть код, который может читать отдельный файл .psa и выводить .csv с изменениями.

Я хочу применить этот код к zip-папке со всеми файлами .psa вместо того, чтобы вручную выполнять этот процесс для отдельных файлы.

В настоящее время код, который применяется к отдельному файлу, требует, чтобы я давал имя выходному файлу внутри кода.
Было бы полезно, если бы результирующий файл имел то же имя, что и входной, только с изменением обозначения типа файла на .csv.
Бонус: было бы еще лучше, если бы выходные данные zip-папки представляли собой всего лишь один .csv-файл, включающий в себя содержимое всех выходных файлов в выходной zip-папке. Я думаю, это решит проблему с именами. (Поэтому в основном выводится только один файл вместо многих.)
Ниже приведен код, который работает с отдельными файлами: этот код берет файл .psa и преобразует его в .csv, одновременно изменяя содержимое.
import pandas as pd
import re

`fname = '1 Area 2 - store 15 group.psa'
df = pd.read_csv(fname, usecols=[0,1,2], header=None, names=['type','upc', 'num'])
store = re.search(r'store\s+(\d+)', fname).group(1)
df = df[df['type'] == 'prod'].drop(columns=['type','upc']).assign(store=store)
df.to_csv("output.csv", index=False) `

Ниже приведен код, который я применяю к zip-файлу. В результате создается новый zip-файл, но файлы в нем имеют тот же тип файла .psa.
import pandas as pd
import re
import zipfile
import os

input_zip_path = r'test.zip'
output_zip_path = 'results.zip'

def process_file(file_path):
df = pd.read_csv(file_path, usecols=[0,1,2], header=None, names=['type','upc','num'])
store = re.search(r'store\s+(\d+)',file_path).group(1)
df = df[df['type']=='prod'].drop(columns=['type','upc']).assign(store=store)
df.to_csv("name.csv", index=False)
return df

with zipfile.ZipFile(input_zip_path, 'r') as zin, zipfile.ZipFile(output_zip_path, 'w') as zout:
for file_info in zin.infolist():
with zin.open(file_info) as f, open(file_info.filename, 'w') as fout:
fout.write(str(f.read()))
modified_df = process_file(file_info.filename)
modified_df.to_csv(file_info.filename, index=False)
zout.write(file_info.filename)
os.remove(file_info.filename)



Подробнее здесь: https://stackoverflow.com/questions/780 ... in-the-out
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»