2017-05-24 5 views
0

Ich versuche, Dateien in einem Verzeichnis umbenennen, so dass der neue Name ist der ursprüngliche Name, gefolgt von einem Leerzeichen + "17-" + eine inkrementell steigende Zahl.Stapel umbenennen Dateien in Python 2.7

Der folgende Code ist nur Dateien von 151, nach oben umbenennen. Wie behalte ich den ursprünglichen Namen, den Text "17-" und die Nummern?

import os 
path = 'C:\Users\dcs\Desktop\Test direct' 
files = os.listdir(path) 
i = 151 

for file in files: 
    os.rename(os.path.join(path, file), os.path.join(path, str(i)+'.TIF')) 
    i = i+1 

Antwort

1

Einfach durch Schreiben dieser Verkettung Ausdruck. Wenn ich das richtig Ihre Daten zu verstehen, Ihr neuer Schleifenkörper

new_name = file + " 17-" + str(i) + ".TIF" 
os.rename(os.path.join(path, file), 
      os.path.join(path, new_name)) 
i += 1 

Dies würde ich ändern, Datei „ABC“ in der Datei „ABC 17-151.TIF“ sein würde; der nächste würde "17-152" enthalten und so weiter.

FACEPALM

file ist ein integrierter Typ. Ändern Sie den Schleifenindex.

for fname in files: 
    new_name = fname + " 17-" + str(i) + ".TIF" 
    os.rename(os.path.join(path, fname), new_name) 
    i += 1 
+0

Ist 'Datei' noch eine Zeichenkette? Versuchen Sie 'print type (file) kurz vor dem' rename' Befehl. Auf meinem Python gibt 'listdir' eine Liste von Strings zurück. – Prune

+0

Das ist wirklich seltsam: 'Datei' ist ein generischer * Typ * ?? Ich kann das nicht mit deinem Code reproduzieren. Ich habe versucht, meine Lösung in meinem lokalen Verzeichnis und es funktioniert wie erwartet, geben Sie 'für den Variablentyp. Was Python? Haben Sie diesen Code ausgeschnitten und in Ihre Umgebung eingefügt, um sicherzustellen, dass wir dieselben Funktionen ausführen? Ich habe nur deinen Weg durch "ersetzt." und deaktivieren Sie den Befehl 'rename'. – Prune

+0

'fname' ist in der Anweisung' for' definiert. – Prune

0

Wenn ich verstehe, über Prune Vorschlag, die ich natürlich nicht, es würde so aussehen:

import os 
path = 'C:\Users\dcs\Desktop\Test direct' 
files = os.listdir(path) 
i = 151 

#The part that I want to strip the extensions from 
for file in files: 
    new_name = file[:-3] 

#The part that words correctly (thanks Prune) 
for fname in files: 
    new_name = fname + " 17-" + str(i) + ".TIF" 
    os.rename(os.path.join(path, fname), new_name) 
    i += 1 

jedoch der erste Teil, soll die Datei strippen davon Erweiterung ist nicht funktioniert .