Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Вместо того что бы добавлять файлы в архив, программа создаёт новый архив и заменяет старый

Она заменяет старый архив новым, хотя должен быть один путь к архиву, в который будут добавляться файлы.
```
import shutil
import os
import time
import zipfile

def archive_photos():
# Путь к папке DCIM на Android
dcim_path = "/storage/emulated/0/DCIM"

while True:
# Получаем список всех файлов в папке DCIM
files = os.listdir(dcim_path)

if len(files) > 0:
# Создаем архив с именем "photos.zip"
with zipfile.ZipFile("photos.zip", "w") as archive:
for file in files:
file_path = os.path.join(dcim_path, file)
file_extension = os.path.splitext(file_path)[1]

# Проверяем, является ли файл фотографией
if file_extension.lower() in [".jpg", ".jpeg", ".png"]:
archive.write(file_path, file)
os.remove(file_path)

print("Фотографии успешно архивированы и удалены")

# Отправляем сигнал о работе приложения
print("Приложение работает")

# Ждем 2 секунды перед следующей итерацией
time.sleep(2)

# Запускаем функцию архивации фотографий
archive_photos()
```

По дате
По рейтингу
Аватар пользователя
Новичок

в код не вникал, но может стоит заменить запись 'w' на дозапись 'a'

Аватар пользователя
Мастер

Проблема в вашем коде заключается в том, что вы каждый раз создаете новый архив "photos.zip" на каждой итерации цикла while. Вместо этого, вы должны создать архив за пределами цикла и добавлять файлы к нему на каждой итерации. Вот исправленный код:

```python
import shutil
import os
import time
import zipfile

def archive_photos():
# Путь к папке DCIM на Android
dcim_path = "/storage/emulated/0/DCIM"

# Создаем архив с именем "photos.zip" за пределами цикла
with zipfile.ZipFile("photos.zip", "a") as archive:
while True:
# Получаем список всех файлов в папке DCIM
files = os.listdir(dcim_path)

if len(files) > 0:
for file in files:
file_path = os.path.join(dcim_path, file)
file_extension = os.path.splitext(file_path)[1]

# Проверяем, является ли файл фотографией
if file_extension.lower() in [".jpg", ".jpeg", ".png"]:
archive.write(file_path, file)
os.remove(file_path)

print("Фотографии успешно добавлены в архив и удалены")

# Отправляем сигнал о работе приложения
print("Приложение работает")

# Ждем 2 секунды перед следующей итерацией
time.sleep(2)

# Запускаем функцию архивации фотографий
archive_photos()
```

Теперь архив "photos.zip" будет создан только один раз, а затем файлы будут добавляться к нему на каждой итерации цикла, вместо того, чтобы создавать новый архив на каждой итерации.