2016-06-22 2 views
0

Я пытаюсь написать базовый сценарий резервного копирования из одной папки в другую, и я получил его на работу, но структура каталогов не копировалась, а только файлы. Я пытаюсь скопировать в подкаталоге, а также, так что, к примеру, c:\temp\docs\file.txt идет в d:\temp\docs\file.txt вместо просто d:\temp\file.txtсценарий python ожидал отступ блока в выражении if

Моя проблема существует в отступа с моим, если/другое заявление, но все выглядит хорошо для меня. Что я делаю не так?

import datetime, time, string, os, shutil 

COPY_FROM_LOCATION = 'C:\\xampp\\htdocs\\projects' 
folder_date = time.strftime("%Y-%m-%d") 
BACKUP_TO_LOCATION = 'D:\\BACKUP\\' + folder_date 

#Create a new directory in D:\BACKUP based on today's date so the folder you're trying to copy to actually exists: 
if not os.path.exists(BACKUP_TO_LOCATION): 
    os.makedirs(BACKUP_TO_LOCATION) 

#copy function 
def backup(source_folder, target_folder): 
    for subdir, dirs, files in os.walk(source_folder): 
     if subdir == source_folder : 
      new_target_folder = target_folder 
     else: 
      folder_name = subdir.split("C:\\xampp\\htdocs\\projects\\",1)[-1] 
      new_target_folder = target_folder + "\\" + folder_name 
     for file in files: 
      print "backing up: " + folder_name 
      shutil.copy2(os.path.join(subdir, file), new_target_folder) 

backup(COPY_FROM_LOCATION,BACKUP_TO_LOCATION) 

Вот ошибка я получаю:

File "backup.py", line 15 
    new_target_folder = target_folder 
        ^
IndentationError: expected an indented block 
+2

Вы смешиваете вкладки и пробелы? – SuperSaiyan

+0

Возможно, вы захотите использовать linter. Сделайте ваш код более легким для чтения и соблюдения PEP. Я не вижу проблемы с вашим кодом, что заставляет меня думать, что это проблема с перемежающимися вкладками и пробелами как отступом. –

ответ

4

Вы перемешивая вкладки и пробелы.

enter image description here

Используйте один или другой, но не оба. Предпочтительно пространства.

+0

yup. для любви ко всему, что свято, я собирался вытащить свои волосы! –

0

что с странности с пространством перед запятой? Я не видел, чтобы это делалось раньше, похоже, что этот сценарий задыхается.

изменение

if subdir == source_folder : 

с

if subdir == source_folder: 
+0

Нет, это нормально, если у вас есть место перед двоеточием. Это не проблема. – Kevin

+0

Вы пытались исправить это, хотя, как-то ваши символы и пробелы новой строки перепутаны, вызывая ошибку этого отступа. Вы копировали и вставляли этот скрипт откуда-то? –

1

Эта ошибка обычно означает, что есть ошибка в отступе. Убедитесь, что вы не смешиваете вкладки и пробелы.

Вы можете использовать https://www.pylint.org/, чтобы их обнаружить, или если что-то просто вставьте код на http://pep8online.com, он покажет вам, что вы можете улучшить.

Смежные вопросы