Скрипт ищет рекурсивно файлы с определенными расширениями в папках, сетевых папках и архивах zip. После первого вхождения «Файл с заданным расширением найден!» скрипт переходит к следующей папке/подпапке. На выходе выдает CSV с всеми директориями в которых были найдены файлы.
import os import csv import zipfile directories = [ r"\\folder1", r"\\folder2", r"\\folder3" ] extensions = ('.exe','.png','.jpg') output_csv = 'found_files.csv' def find_files_in_directory(directory, extensions): found_files = [] for root, dirs, files in os.walk(directory): print(f"Проверяется каталог: {root}") for file in files: file_path = os.path.join(root, file) if file.lower().endswith(extensions): print(f" Найден файл с подходящим расширением: {file_path}") found_files.append(file_path) elif file.lower().endswith(('.zip')): # Проверяем существование файла if not os.path.exists(file_path): print(f" Файл не найден: {file_path}") continue # Обрабатываем длинные пути if len(file_path) > 260: file_path = '\\\\?\\' + file_path found_files.extend(find_files_in_archive(file_path, extensions)) return found_files def find_files_in_archive(archive_path, extensions): found_files = [] try: if archive_path.lower().endswith('.zip'): with zipfile.ZipFile(archive_path, 'r') as archive: for file in archive.namelist(): if file.lower().endswith(extensions): print(f" Найден файл с подходящим расширением в архиве {archive_path}: {file}") found_files.append(f"{archive_path}/{file}") except Exception as e: print(f" Ошибка при обработке архива {archive_path}: {e}") return found_files all_found_files = [] visited_directories = [] for directory in directories: visited_directories.append(directory) print(f"Обрабатывается директория: {directory}...") found_files = find_files_in_directory(directory, extensions) all_found_files.extend(found_files) with open(output_csv, 'w', newline='', encoding='utf-8', errors='ignore') as csvfile: writer = csv.writer(csvfile) writer.writerow(['File Path']) for file_path in all_found_files: writer.writerow([file_path]) writer.writerow([]) writer.writerow(['Visited Directories']) for directory in visited_directories: writer.writerow([directory]) print(f"Поиск завершен. Результаты записаны в файл {output_csv}.")