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, сопоставленные по коду клиента с client_file, для сбора информации о клиенте по коду статьи в файле статьи для сбора информации о статье.< /p>
Файл VTE содержит код товара, код клиента и проданное количество.
Фрейм данных также должен включать общее количество проданного продукта за месяц.
В папке «Оптовый торговец» есть две папки для 2023 и 2024 годов. В каждой папке есть ежемесячные данные в папке M01/M02 и т. д. следующим образом:
Проблема
Мой код пропускает все файлы, как будто они пусты, когда они нет.
Я попробовал приведенный выше код, который показывает сообщение о том, что все файлы были пропущены (для всех файлов): ниже вывода:
Skipping M01 in Y2023 due to missing VTE or CLI data.
Skipping M02 in Y2023 due to missing VTE or CLI data.
Skipping M03 in Y2023 due to missing VTE or CLI data.
Skipping M04 in Y2023 due to missing VTE or CLI data.
Skipping M05 in Y2023 due to missing VTE or CLI data.
Skipping M06 in Y2023 due to missing VTE or CLI data.
Skipping M07 in Y2023 due to missing VTE or CLI data.
Skipping M08 in Y2023 due to missing VTE or CLI data.
Skipping M09 in Y2023 due to missing VTE or CLI data.
Skipping M10 in Y2023 due to missing VTE or CLI data.
Skipping M11 in Y2023 due to missing VTE or CLI data.
Skipping M12 in Y2023 due to missing VTE or CLI data.
Skipping M01 in Y2024 due to missing VTE or CLI data.
Skipping M02 in Y2024 due to missing VTE or CLI data.
Skipping M03 in Y2024 due to missing VTE or CLI data.
Skipping M04 in Y2024 due to missing VTE or CLI data.
Skipping M05 in Y2024 due to missing VTE or CLI data.
Skipping M06 in Y2024 due to missing VTE or CLI data.
Skipping M07 in Y2024 due to missing VTE or CLI data.
Skipping M08 in Y2024 due to missing VTE or CLI data.
Подробнее здесь: https://stackoverflow.com/questions/790 ... th-my-code
Может кто-нибудь помочь мне понять, что не так с моим кодом? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение