Подскажите пожалуйста, Win 10, Python 3.10 пишу скрипт бекапа, на моём компе отладил, все работает. На сервере запускаю, начинает ругаться на кодировку ошибка unicodeencodeerror. Там фалов под 150000, пару файлов с именем на чешском я удалил, потом он стал вылетать на русских названиях.
Этот код создает список файлов и их времени изменения в указанных папках, сохраняет этот список в файл "arc.lst". Затем он сравнивает этот список с предыдущим списком, хранящимся в файле "arc.lst". Если файл "arc.lst" не существует, то это означает, что это первый запуск скрипта, и список файлов для архивации будет полным. Если файл "arc.lst" существует, то скрипт создаст новый список файлов, которые были изменены с момента последнего запуска скрипта, и сохранит его в файл "diff.lst". Затем скрипт создаст архив с помощью утилиты 7z.exe, используя файл "diff.lst" для выбора файлов, которые будут добавлены в архив. Созданный архив будет иметь имя, содержащее дату и время создания.
сожержание файла arc.cfg
c:\backup # куда складывать архивы
c:\1c #Далее что бекапиться
c:\1cv8 #Далее что бекапиться
Этот код создает список файлов и их времени изменения в указанных папках, сохраняет этот список в файл "arc.lst". Затем он сравнивает этот список с предыдущим списком, хранящимся в файле "arc.lst". Если файл "arc.lst" не существует, то это означает, что это первый запуск скрипта, и список файлов для архивации будет полным. Если файл "arc.lst" существует, то скрипт создаст новый список файлов, которые были изменены с момента последнего запуска скрипта, и сохранит его в файл "diff.lst". Затем скрипт создаст архив с помощью утилиты 7z.exe, используя файл "diff.lst" для выбора файлов, которые будут добавлены в архив. Созданный архив будет иметь имя, содержащее дату и время создания.
Python:
from pathlib import Path
import datetime,os
arcname=""
lst=[]
diff=[]
lstarc=[]
listfile="arc.lst"
now = datetime.datetime.now()
def convert_date(timestamp):
d = datetime.utcfromtimestamp(timestamp)
formated_date = d.strftime('%d %b %Y')
return formated_date
def scanlst(name): #Полное сканирование пути и составление списка LST
for txt_path in Path(name).glob("**/*.*"):
if txt_path.is_file():
resline =str(txt_path)+" "+str(txt_path.lstat().st_mtime)
print("Обнаружен файл ", resline)
lst.append(resline)
def createlist(): #Если обнаружены новые файлы создаем или перезаписываем LIST файл
with open(listfile, "w") as result:
for l in lst:
result.writelines('%s\n' % l) #Переход каретки + строка пути и времени
print(l)
print("createlist отработал")
with open("diff.lst", "w") as diffile: #Записываем DIFF файл
for l in diff:
diffile.writelines('%s\n' % l.rpartition(' ')[0])
def arc(lst): #Кладем в архив список из DIFF файла
print("7Z begin", arcpath)
cmd = r'7z.exe a -mx3 -scsWIN -spf '+arcpath.strip()+'-'+now.strftime("%Y-%m-%d-%H-%M")+'.7z @"diff.lst'
# strip отсекает переход каретки
os.system(cmd)
if __name__ == '__main__':
print("Старт "+now.strftime("%Y-%m-%d-%H-%M"))
with open("arc.cfg", "r") as filecfg:
arcpath=filecfg.readline()
for line in filecfg:
print("Сканируем каталог ",line)
scanlst(line.strip())
if not Path(listfile).is_file(): #Новый файл
diff=lst
createlist()
arc(lst)
else: #Не первый запуск
with open(listfile, "r") as result: #Чтение списка что в архиве
for line in result:
lstarc.append(line.rstrip())
diff = list(set(lst) - set(lstarc))
if len(diff)>0:
createlist()
print("Разных файлов обнаружено", len(diff))
arc(diff)
print("Разных файлов обнаружено", len(diff))
else:
print("Разных и новых файлов не обнаружено")
print("Успешно.", now.strftime("%Y-%m-%d-%H-%M"))
сожержание файла arc.cfg
c:\backup # куда складывать архивы
c:\1c #Далее что бекапиться
c:\1cv8 #Далее что бекапиться