search_file_ext.py - Поиск файлов с определенными расширениями

Скрипт ищет рекурсивно файлы с определенными расширениями в папках, сетевых папках и архивах 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}.")