2016-06-06 5 views
0

Meine Ordnerstruktur ist alsUmbenennen von Dateien Unterordnernamen mit

Folder A(Parent folder) 

    Folder B(Sub folder) 

    1.jpg 
    2.jpg 
    3.jpg 
    4.jpg 

    Folder B1(Sub folder) 

    1.jpg 
    2.jpg 
    3.jpg 
    4.jpg 

    ..... 

    Folder Bn(Sub folder) 

    1.jpg 
    2.jpg 
    ...jpg 

folgt Wie kann ich jpeg-Dateinamen mit Unterordnernamen umbenennen, wie diese B-1.jpg, B-2.jpg ... und B1-1.jpg, B1-2.jpg ... und Bn-1.jpg, Bn-2.jpg ....

Mein Code bis jetzt (ich habe den Code von diesem question genommen:

import os 
path = os.getcwd() 
# get all directories 
folders = ([name for name in os.listdir(path) 
     if os.path.isdir(os.path.join(path, name))]) 
for folder in folders: 
    for fname in os.listdir(os.path.join(path,folder)): 
    new_fname = os.path.basename(os.path.join(path,folder)) + fname.split('.') **# I think error is in here** 
    os.rename(os.path.join(path, fname), os.path.join(path, new_fname)) 

, wenn ich den Code ausführen, es zeigt nur:

Traceback (most recent call last): 
    File "<stdin>", line 3, in <module> 
TypeError: cannot concatenate 'str' and 'list' objects 

Ich bin Neuling in Python, bitte helfen Sie und machen Sie diese vollständig und perfekt, bitte.

+0

Beitrag Schauen http://stackoverflow.com/questions/641985/rename-files-python-jython?rq=1 –

Antwort

0

Nehmen Sie os.walk('pathToRootDir'), um Unterordner rekursiv zu erhalten.

Im nächsten Schritt versuchen print-Anweisungen zu debuggen mit wie

print fname.split('.') 

Sie werden den Fehler finden sich, nehmen Sie vielleicht einen tieferen Einblick in die Split-Funktion und versuchen, so etwas wie:

print fname.split('.')[0] 
+0

Was mit diesem falsch Antwort, warum der Downvote? – rocksteady

+1

Upvoted es. os.walk scheint ein logischer Weg zu sein. –

1

Abgeschlossene Rocksteady Antwort, könnten Sie os.walk und os.path verwenden.

ROOT_DIR=os.getcwd() 
for root, dirs, files in os.path.walk(ROOT_DIR): 
    dname = os.path.split(root)[-1] 
    for file in files: 
     os.rename(os.path.join(root, file), 
        os.path.join(root, "{}-{}".format(dname, file)) 

Wie dem auch sei, das eigentliche Problem auf dem Code ist, dass „Split“ gibt, das gibt eine Liste, und Sie können keine Liste in einen String verketten.

Basierend auf Ihre Frage Beispiele wollen Sie diese:

new_fname = os.path.basename(os.path.join(path,folder)) + fname