2016-03-19 13 views
-5

Bitte helfen Sie mir bei der Lösung des folgenden Codes und sagen Sie, warum os.makedirs nicht funktioniert? (Bitte kümmern sich nicht um die Einzüge. Sie waren direkt in die ursprüngliche ich gerade auf dieser Seite einen Griff über die HTML-Codierung bin immer)Warum funktioniert das nicht? (os.makedirs)

import os,pprint,sys 
while True: 
    print() 
    oq=input('Press the first directory: ') 
    print() 
    print() 
    ow=input('Press the next directory/name: ') 
    print() 
    p2=input('Continue with next directory? yes or no: ').lower() 
    if p2=='no': 
     break 
    print() 
    oe=input('Press the next directory/name: ') 
    print() 
    p3=input('Continue with next directory? yes or no: ').lower() 
    if p3=='no': 
     break 
    print() 
    oee=input('Press the next directory/name: ') 
    print() 
    p4=input('Continue with next directory? yes or no: ').lower() 
    if p4=='no': 
     break 
    print() 
    ot=input('Press the next directory/name: ') 
    print() 
    p5=input('Continue with next directory? yes or no: ').lower() 
    if p5=='no': 
     break 
    print() 
    oy=input('Press the next directory/name: ') 
    print() 
    p6=input('Continue with next directory? yes or no: ').lower() 
    if p6=='no': 
     break 
    print() 
    ou=input('Press the next directory/name: ') 
    print() 
    p7=input('Continue with next directory? yes or no: ').lower() 
    if p7=='no': 
     break 
    print() 
    if p2=='no': 
     os.makedirs(oq+'\\'+ow) 
    if p3=='no': 
     os.makedirs(oq+'\\'+ow+'\\'+oe) 
    if p4=='no': 
     os.makedirs(oq+'\\'+ow+'\\'+oe+'\\'+oee)) 
    if p5=='no': 
     os.makedirs(oq+'\\'+ow+'\\'+oe+'\\'+oee+'\\'+ot) 
    if p6=='no': 
     os.makedirs(oq+'\\'+ow+'\\'+oe+'\\'+oee+'\\'+ot+'\\'+oy) 
    if p7=='no': 
     os.makedirs(oq+'\\'+ow+'\\'+oe+'\\'+oee+'\\'+ot+'\\'+oy+'\\'+ou) 
    ppp=input('Wannna continue???') 
    if ppp=='no': 
     sys.exit() 
+1

Sie möchten Ihren Code formatieren, damit er leichter zu lesen ist. Wenn man es so in einen großen Haufen einfügt, werden Leute, die normalerweise deine Frage beantworten würden, wahrscheinlich gleich daneben springen. Ich empfehle, die Hilfe zur Codeformatierung für Beiträge zu lesen und zu bearbeiten/erneut zu senden. – Chris

+0

Ich hoffe es stört dich nicht, ... aber ich kümmerte mich um deine Gedankenstriche. Ich habe jedoch jede Zeile in Bezug auf den Rest gleich gehalten. Um zu tun, was ich gerade getan habe, markieren Sie den Code und drücken Sie Strg-k. – zondo

+0

"funktioniert nicht" unter welchen Umständen? Hast du deinen Code mit Debug-Nachrichten versehen, um zu sehen, dass er tatsächlich dort ankommt? Verwenden Sie auch 'os.path.join()' zum Verbinden von Pfaden und/oder 'os.sep' als Trennzeichen anstelle von' – yedpodtrzitko

Antwort

0

Ihr Code wird nicht einmal ausführen, weil Sie eine Syntax Fehler im Code:

if p3=='no': 
    os.makedirs(oq+'\\'+ow+'\\'+oe) 
if p4=='no': 
    os.makedirs(oq+'\\'+ow+'\\'+oe+'\\'+oee)) # <-- here 
if p5=='no': 
    os.makedirs(oq+'\\'+ow+'\\'+oe+'\\'+oee+'\\'+ot) 

Tat:

$ python machdirs2.py 
    File "machdirs2.py", line 48 
    os.makedirs(oq+'\\'+ow+'\\'+oe+'\\'+oee)) 
             ^
SyntaxError: invalid syntax 
$ 

Wenn Sie diese Syntaxfehler zu beheben, sehen wir, dass Sie input verwenden, die Sie erfordern würde, zitieren Ihre "input". Ich tat das und gab zwei zitierte Namen und dann "no" ein, nur um eine break zu treffen, die die while ohne Verarbeitung der makedirs if-Spaghetti beendet. Ich habe nicht tiefer gegraben ...

Eine bessere Möglichkeit, Ihr Ziel zu erreichen, wäre ganz von vorne anfangen, zu überdenken und es dann von Grund auf neu zu implementieren alle tediuous Wiederholungen zu vermeiden und die Gefahren in Ihrem Code:

import os 

path = "" 
while True: 
    nxt = raw_input("next level or empty to quit: ") 
    if not nxt: 
     break 
    path = os.path.join(path, nxt) 

print path 
os.makedirs(path) 

ergibt:

$ python machdirs.py 
next level or empty to quit: a 
next level or empty to quit: b 
next level or empty to quit: c 
next level or empty to quit: 
a/b/c 
$ find . -type d -print 
. 
./a 
./a/b 
./a/b/c 
$ 

den Code auf Ihrer Windows-Maschine Versuchen Sie, und Sie werden sehen, dass es Cross-Plattform, während Ihr Code Yould nicht funktioniert auf meinem Linux-Rechner funktioniert.

+0

Nun, Leute, ich habe eine Lösung, indem ich das ganze Zeug in zwei Teile zerlege; Der erste Teil übernimmt die Namen des Verzeichnisses und des Dateinamens und der zweite Teil erstellt die Ordner. Ich lege sie unter den True-Befehl und setze auch den globalen p2, zB wenn p2 == 'no': global p2 break und so weiter. Es hilft und danke Jungs für deine Antworten, ich werde sie auch ausprobieren. – Gourabo