Как можно проверить 500 000 файлов в форматах Word, Excel, PDF и TXT на наличие повреждений?

У меня возникла задача, которую сложно формулировать, но она важна. <br/><br/> У нас есть большое количество файлов в сложной иерархии каталогов, которые пользователи добавляют на протяжении примерно десяти лет. В целом, бэкапы этих файлов существуют, и система работает нормально. В этой "файлопомойке" хранится около 500 ГБ данных. <br/> --- <br/> На днях произошел инцидент: один из пользователей случайно скопировал папку внутрь самой себя. В Windows система предупредила, что это приведет к проблемам, но пользователь настоял на продолжении. В итоге файлы "потеряли" свое содержимое и стали нечитаемыми, хотя их названия остались. Я, как обычно, извлек папку из бэкапа, и данные не пострадали. Но инцидент заставил меня задуматься. <br/> --- <br/> Мы всегда проверяли архивы выборочно, развертывая их и удостоверяясь, что файлы доступны и читаемы, поскольку проверить все 500000 файлов вручную невозможно. <br/> --- <br/> Однако я обеспокоен тем, что если пользователь не сообщит о проблеме, файлы могут быть архивированы с поврежденным содержимым, и через полгода в архивах останутся только нечитаемые файлы, расположенные в неявной папке, которую мы могли пропустить. <br/> --- <br/> Как можно организовать автоматическую проверку чтения содержимого файлов? Я хотел бы раз в месяц запускать процесс, который удостоверяет, что файлы открываются и их содержимое доступно.
  • 25 сентября 2024 г. 18:13
Ответы на вопрос 2
Для автоматической проверки доступности и целостности файлов в форматах Word, Excel, PDF и TXT вы можете использовать скрипты и инструменты, которые будут открывать или считывать файлы и сообщать о наличии проблем. Вот пошаговый план такой реализации:

### 1. Подготовка окружения

Убедитесь, что у вас есть необходимые библиотеки для работы с документами, такие как:

- **Python**: использование репозитория для обработки форматов файлов (простой и универсальный).
- **pip**: для установки необходимых пакетов.

### 2. Установка необходимых библиотек

Установите библиотеки, которые помогут работать с конкретными форматами файлов:

```bash
pip install pandas openpyxl python-docx PyPDF2
```

### 3. Создание скрипта для проверки файлов

Вот пример на Python, который проходит по всем файлам указанной директории и проверяет их:

```python
import os
import logging
from docx import Document
import pandas as pd
from PyPDF2 import PdfReader

# Настройка логирования
logging.basicConfig(filename='file_check.log', level=logging.INFO)

def check_txt_file(file_path):
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
        return True
    except Exception as e:
        logging.error(f'Error reading {file_path}: {e}')
        return False

def check_docx_file(file_path):
    try:
        Document(file_path)
        return True
    except Exception as e:
        logging.error(f'Error reading {file_path}: {e}')
        return False

def check_xlsx_file(file_path):
    try:
        pd.read_excel(file_path)
        return True
    except Exception as e:
        logging.error(f'Error reading {file_path}: {e}')
        return False

def check_pdf_file(file_path):
    try:
        with open(file_path, 'rb') as f:
            reader = PdfReader(f)
            if len(reader.pages) > 0:
                return True
        return False
    except Exception as e:
        logging.error(f'Error reading {file_path}: {e}')
        return False

def check_files(directory):
    for root, dirs, files in os.walk(directory):
        for file in files:
            file_path = os.path.join(root, file)
            if file.endswith('.txt'):
                check_txt_file(file_path)
            elif file.endswith('.docx'):
                check_docx_file(file_path)
            elif file.endswith('.xlsx'):
                check_xlsx_file(file_path)
            elif file.endswith('.pdf'):
                check_pdf_file(file_path)

if __name__ == "__main__":
    base_directory = "путь/к/вашей/папке"  # Укажите путь к основной директории
    check_files(base_directory)
```

### 4. Запуск скрипта

Настройте планировщик задач в вашей операционной системе, чтобы запускать этот скрипт раз в месяц. В Windows это можно сделать с помощью "Планировщика заданий", а в Linux – с помощью cron.

### 5. Файл логирования

Скрипт будет записывать все ошибки доступа к файлам в файл `file_check.log`, что позволит вам отслеживать проблемы и принимать меры.

### 6. Другие меры

- Подумайте об использовании инструментов резервного копирования, которые могут самостоятельно проверять целостность данных.
- Обучите пользователей сообщать о любых проблемах с файлами.

Следуя этим шагам, вы сможете минимизировать риск незамеченных повреждений файлов в вашей системе.
Макросы msword, их даже с нуля писать не придется, так как там есть механизм записи макроса - запускаешь запись, делаешь какие то действия, останавливаешь - он показывает сгенерированный код макроса, выполняющий эти действия, добавляешь в код проверки на ошибку, заворачиваешь в цикл и готово - код простейший - взять следующее имя файла из списка, открыть файл, проверить на ошибку, закрыть файл, повторять до окончания списка. 

Так же можно делать все то же самое из любого другого языка программирования, я помню делал что то похожее на c# в visual studio, это удобнее чем писать на vbscript.
https://learn.microsoft.com/ru-ru/dotnet/csharp/ad...
Похожие вопросы