Может кто-нибудь помочь мне понять, что не так с моим кодом?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Может кто-нибудь помочь мне понять, что не так с моим кодом?

Сообщение Anonymous »

Код: Выделить всё

import os
import zipfile
import pandas as pd
Function to find ZIP files with the relevant keywords (VTE, CLI, ART)
def find_zip_files(month_folder_path):
zip_files = {"vte": None, "cli": None, "art": None}
List all files in the month folder
for filename in os.listdir(month_folder_path):
if "VTE" in filename and filename.endswith('.zip'):
zip_files["vte"] = os.path.join(month_folder_path, filename)
elif "CLI" in filename and filename.endswith('.zip'):
zip_files["cli"] = os.path.join(month_folder_path, filename)
elif "ART" in filename and filename.endswith('.zip'):
zip_files["art"] = os.path.join(month_folder_path, filename)
return zip_files
Data_extraction_function
def extract_csv_from_zip(zip_path):
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
for file in zip_ref.namelist():
if file.endswith('.csv'): # Look for CSV files in the ZIP
with zip_ref.open(file) as csvfile:
return pd.read_csv(csvfile)
return None
Merge_function
def merge_data(vte_df, cli_df, art_df):
if vte_df is not None and cli_df is not None:
merged_vte_cli = pd.merge(vte_df, cli_df, on='clicod', how='outer')
else:
raise ValueError("VTE or CLI data missing, cannot merge.")
if art_df is not None:
merged_final = pd.merge(merged_vte_cli, art_df, on='artcod', how='outer')
else:
merged_final = merged_vte_cli
return merged_final
Main loop iterate through years and months
def process_folders(base_path, years, max_months_per_year):
for year in years:
year_folder_path = os.path.join(base_path, year)
max_month = max_months_per_year.get(year, 12)
for month in range(1, max_month + 1):
month_folder = f'M{month:02d}'
month_folder_path = os.path.join(year_folder_path, month_folder)
if os.path.exists(month_folder_path):
Find ZIP files in the current month folder
zip_files = find_zip_files(month_folder_path)
Extract CSV files from the ZIPs
vte_df = extract_csv_from_zip(zip_files["vte"]) if zip_files["vte"] else None
cli_df = extract_csv_from_zip(zip_files["cli"]) if zip_files["cli"] else None
art_df = extract_csv_from_zip(zip_files["art"]) if zip_files["art"] else None
If VTE or CLI files are missing, skip the month
if vte_df is None or cli_df is None:
print(f"Skipping {month_folder} in {year} due to missing VTE or CLI data.")
continue
Merge the data
merged_data = merge_data(vte_df, cli_df, art_df)
Output the merged data to a CSV file
output_file = f'merged_data_{year}_{month_folder}.csv'
merged_data.to_csv(output_file, index=False)
print(f"Merged data for {year} {month_folder} saved to {output_file}.")
else:
print(f"{month_folder_path} does not exist. Skipping...")
Define the base path and years
base_path = r"C:\Users\DATA\Wholesalers"
years = ['Y2023', 'Y2024']
max_months_per_year = {'Y2023':12,'Y2024':8}
Process all folders
process_folders(base_path, years, max_months_per_year)`
КОНТЕКСТ
У меня есть каталог с двумя папками (Y2023, Y2024), каждая из которых содержит папки месяцев (M01, M02 и т. д.) и в папке каждого месяца есть ZIP-папки с именем, содержащим ключевое слово (VTE, CLI, ART). Каждая из этих ZIP-папок содержит CSV-файл с тем же именем.
Тогда мне нужно извлечь резюме из ZIP-папок объедините данные VTE и CLI для кода клиента, затем объедините этот результат с данными ART для кода статьи отдельно для каждой папки месяца, затем повторите для всех папок месяцев и сделайте то же самое для папок всех лет, а затем сгруппируйте по проданным QT.
Цель здесь состоит в том, чтобы иметь фрейм данных, который содержит все продажи из файлов VTE_files, соответствующих коду клиента, в файл_клиента для сбора информации о клиенте по коду статьи в файл_статьи для сбора информации о статье.
Файл VTE содержит код статьи и код клиента, а также проданное количество.
В кадре данных также должно быть указано общее количество, проданное за месяц для каждого продукта.
В папке «Оптовый торговец» есть две папки для 2023 и 2024 годов. В каждой папке есть ежемесячные данные в папке M01/M02 и т. д. следующим образом:
Проблема
Мой код пропускает все файлы, как если бы они были пустыми, хотя на самом деле это не так.
Я попробовал приведенный выше код, который показывает сообщение о том, что все файлы были пропущены (для всех файлов): ниже вывода:
Пропуск M01 в 2023 году из-за отсутствия данных VTE или CLI.
Пропуск M02 в 2023 году из-за отсутствия Данные VTE или CLI.
Пропуск M03 в 2023 году из-за отсутствия данных VTE или CLI.
Пропуск M04 в 2023 году из-за отсутствия данных VTE или CLI.
Пропуск M05 в 2023 году из-за отсутствия VTE или CLI. Данные CLI.
Пропуск M06 в 2023 году из-за отсутствия данных VTE или CLI.
Пропуск M07 в 2023 году из-за отсутствия данных VTE или CLI.
Пропуск M08 в 2023 году из-за отсутствия данных VTE или CLI. .
Пропуск M09 в 2023 году из-за отсутствия данных VTE или CLI.
Пропуск M10 в 2023 году из-за отсутствия данных VTE или CLI.
Пропуск M11 в 2023 году из-за отсутствия данных VTE или CLI.Пропуск M12 в 2023 году из-за отсутствия данных VTE или CLI.
Пропуск M01 в 2024 году из-за отсутствия данных VTE или CLI.
Пропуск M02 в 2024 году из-за отсутствия данных VTE или CLI.
>Пропуск M03 в 2024 году из-за отсутствия данных VTE или CLI.
Пропуск M04 в 2024 году из-за отсутствия данных VTE или CLI.
Пропуск M05 в 2024 году из-за отсутствия данных VTE или CLI.
Пропуск M06 в 2024 году из-за отсутствия данных VTE или CLI.
Пропуск M07 в 2024 году из-за отсутствия данных VTE или CLI.
Пропуск M08 в 2024 году из-за отсутствия данных VTE или CLI.

Подробнее здесь: https://stackoverflow.com/questions/790 ... th-my-code
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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