2016-06-22 8 views
0

Ich versuche, ein grundlegendes Backup-Skript von einem Ordner zum anderen zu schreiben, und ich habe es zum Funktionieren - aber die Verzeichnisstruktur wurde nicht kopiert, nur die Dateien. Ich versuche, auch in dem Unterordner zu kopieren, so dass zum Beispiel geht c:\temp\docs\file.txt-d:\temp\docs\file.txt statt nur d:\temp\file.txtPython-Skript erwartet einen Einzug Block in If-Anweisung

Mein Problem besteht in Vertiefung mit meiner if/else-Anweisung, aber mir alles gut aussieht. Was mache ich falsch?

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) 

Hier ist der Fehler Ich erhalte:

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

Mischen Sie Tabulatoren und Leerzeichen? – SuperSaiyan

+0

Sie könnten einen Linter verwenden. Machen Sie Ihren Code einfacher zu lesen und PEP einzuhalten. Ich sehe kein Problem mit Ihrem Code, wodurch ich denke, dass es ein Problem ist, Tabulatoren und Leerzeichen als Einzug einzufügen. –

Antwort

4

Sie Vermischungs Tabs und Leerzeichen.

enter image description here

Verwenden der einen oder der anderen, nicht beide. Vorzugsweise Räume.

+0

yup. Für die Liebe von allem, was heilig ist, wollte ich mir die Haare ausziehen! –

0

was vor dem Semikolon mit dem Raum mit der Seltsamkeit ist oben? Ich habe es noch nie zuvor so gesehen, es scheint, als würde dieses Skript sich verschlucken.

Änderung

if subdir == source_folder : 

mit

if subdir == source_folder: 
+0

Nein, es ist in Ordnung, vor dem Doppelpunkt Platz zu haben. Das ist nicht das Problem. – Kevin

+0

haben Sie versucht, das zu beheben, obwohl irgendwie Ihre Newline-Zeichen und oder Leerzeichen durcheinander sind, was diesen Einrückungsfehler verursacht. Haben Sie dieses Skript von irgendwo kopiert und eingefügt? –

1

Dieser Fehler bedeutet normalerweise, dass ein Fehler beim Einrücken aufgetreten ist. Überprüfen Sie nicht mischen Tabs und Leerzeichen.

Sie können https://www.pylint.org/ verwenden, um sie zu erkennen, oder wenn es etwas einfach den Code bei http://pep8online.com einfügen, wird es Ihnen zeigen, was Sie verbessern können.

Verwandte Themen