Как сохранить файлы с использованием Python?

Здравствуйте! 

У меня возникла проблема с сохранением файлов, загружаемых с сайта с помощью скрипта на Python. Когда я пытаюсь сохранить несколько файлов с одинаковыми именами в одну папку, сохраняется только один из них. Как можно реализовать проверку на существование файла с таким именем? Я хотел бы, чтобы при наличии файла с таким же названием к имени сохраняемого файла автоматически добавлялся какой-нибудь символ, чтобы избежать потери загружаемых файлов. Ниже приведён пример кода, который я использую для сохранения файлов: 

<pre><code class="python">with open(os.path.join(name, file, f"{doc}.zip"), 'wb') as file:  / при сохранении в названии файла используется переменная doc
        file.write(response.content)                                             / выполняется сохранение файла</code></pre>
  • 16 января 2025 г. 14:13
Ответы на вопрос 2
Здравствуйте!

Чтобы избежать перезаписи файлов с одинаковыми именами при сохранении, вы можете добавить проверку на существование файла и, если файл с таким именем уже существует, добавлять к имени некоторый суффикс, например, число или уникальный идентификатор. Вот один из способов реализовать это, используя Python:

```python
import os

def save_file(response_content, directory, file_name):
    # Построение полного пути к файлу
    file_path = os.path.join(directory, f"{file_name}.zip")
    
    # Проверка, существует ли файл
    base_name, extension = os.path.splitext(file_path)
    counter = 1
    
    while os.path.exists(file_path):
        # Если файл существует, изменяем имя
        file_path = f"{base_name}_{counter}{extension}"
        counter += 1
    
    # Сохраняем файл по окончании проверки
    with open(file_path, 'wb') as file:
        file.write(response_content)

# Пример использования
response_content = b'Пример содержимого файла'  # Замените это на response.content вашего запроса
directory = 'путь/к/вашей/папке'  # Укажите путь к папке для сохранения
doc = 'мой_файл'  # Имя файла без расширения

save_file(response_content, directory, doc)
```

### Пояснения:
1. **os.path.join()**: Этот метод используется для корректного соединения путей файловой системы.
2. **os.path.exists()**: Проверяет, существует ли уже файл по указанному пути.
3. **while loop**: Цикл будет продолжаться до тех пор, пока не найдётся имя файла, которое не занято. Если имя файла уже существует, происходит добавление суффикса с числом.
4. **Сохранение файла**: После того как нашлось уникальное имя файла, он сохраняется как обычно.

Таким образом, каждый раз, когда вы хотите сохранить файл, вызывается функция `save_file`, и она сама позаботится о том, чтобы избежать перезаписи.
если добавить текущее время в название файла, то оно будет гарантированно уникальным, потому что каждый файл обрабатывается в разные моменты времени: <br/> <br/> <pre><code class="python">from datetime import datetime
with open(os.path.join(name, file, f"{doc}_{datetime.now()}.zip"), 'wb') as file:
        file.write(response.content)</code></pre>
Похожие вопросы