# 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
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
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\Wholsaler"
years = ['Y2023', 'Y2024']
max_months_per_year = {'Y2023': 12, 'Y2024': 8} # Define the max month for each year (Y2024 up to M08)
# 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 для сбора информации о клиенте, а затем объединить по коду статьи со статьей_file для сбора информации о статье.
Файл 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 ... g-and-merg
Может ли кто-нибудь помочь мне понять, что не так с моим кодом при извлечении и объединении файлов csv из zip-папок? [за ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение