Новичок в Python с использованием Shutil не может найти существующий путь к файлу

Я новичок в питоне. Я пытаюсь создать простую программу, которая использует Shutil для копирования папки на диске C в другую папку. При копировании я хотел бы добавить дату/время в конец имени папки в новом месте. Это используется для резервного копирования и очистки файлов. Вот что у меня есть до сих пор, но он не может найти путь к файлу. В конце концов это должно сохранить скопированные файлы с локального ПК на сетевой диск.

import shutil
import datetime
import os

SOURCE = "C:/Program Files(x86) /FOLDER1/LOGS"
AppendDate=datetime.datetime.now()
BACKUP = "C:/Users/ME/Desktop/FOLDERNEW/LOGS %s" % AppendDate

shutil.copytree(SOURCE,BACKUP)
print os.listdir(BACKUP)

person Nate    schedule 07.08.2017    source источник
comment
что печатает print os.listdir(SOURCE)? (у вас есть пробел перед `/FOLDER1...`   -  person thebjorn    schedule 07.08.2017
comment
Program Files(x86) выглядит довольно очевидной опечаткой, учитывая, что это Program Files (x86) нестандартно (пробел перед фрагментом в скобках, а не после него).   -  person Charles Duffy    schedule 07.08.2017
comment
Также было бы полезно указать точную ошибку, чтобы мы знали, какой путь не найден.   -  person Charles Duffy    schedule 07.08.2017
comment
Кстати, см. руководство по стилю Python PEP-8 — все заглавные имена зарезервированы для констант (а CamelCase зарезервирован для имен классов); имена_с_подчеркиваниями являются подходящей формой для обычных переменных.   -  person Charles Duffy    schedule 07.08.2017
comment
Большое спасибо за помощь! Я скопировал путь к файлу (я изменил имена файлов / каталогов инструментов, когда публиковал, но не уловил заглавные буквы, когда делал это. Не могу поверить, что пропустил пробел.   -  person Nate    schedule 08.08.2017


Ответы (2)


Извините за пост, потому что я еще не могу «комментировать».

Однако похоже, что ошибка может заключаться в том, что в строке вашего файла программы (x86) отсутствует один пробел.

SOURCE = "C:/Program Files (x86)/"

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

Рекомендации по именованию файлов< /а>

Для этого замените символы Appenddate с помощью замены.

import re

cleandate = re.sub('[-!@#$:.]', '_', str(AppendDate))

Это сработало для меня.

import shutil
import datetime
import os
import re



SOURCE = "C:/Program Files (x86)/HP"
AppendDate=datetime.datetime.now()
cleandate = re.sub('[-!@#$:.]', '_', str(AppendDate))
BACKUP = "C:/Users/Robert/Desktop/FOLDERNEW/LOGS %s" % cleandate

shutil.copytree(SOURCE,BACKUP)
print os.listdir(BACKUP)
person HappyBob    schedule 07.08.2017

Добро пожаловать в мир Python! Пожалуйста, попробуйте следующее.

import shutil
import datetime
import os

SOURCE = "C:\\Program Files (x86)\\FOLDER1\\LOGS"
AppendDate=datetime.datetime.now()
BACKUP = "C:\\Users\ME\\Desktop\\FOLDERNEW\\LOGS %s" % AppendDate

shutil.copytree(SOURCE,BACKUP)
print os.listdir(BACKUP)

Windows использует отдельный каталог, отличный от Unix, Linux и Mac. Этот символ \ также имеет другую функциональность в качестве префикса для escape-последовательностей, поэтому для создания одного символа \ в строке Python вам нужно иметь два \\ (т. е. это escape-последовательность для самого символа \) или использовать «сырой» струны.

Кроме того, как отметили другие комментаторы, похоже, что на вашем пути был пробел не в том месте.

person tdube    schedule 07.08.2017
comment
В Python для Windows разделитель косой черты неявно соблюдается. И если вы собираетесь использовать обратную косую черту, я бы предложил необработанную строку, чтобы она была немного более удобочитаемой, чем удвоение: r'c:\Program Files (x86)\FOLDER1\LOGS' - person Charles Duffy; 07.08.2017