2016-04-04 15 views
0

Eine recht einfache Frage, aber für das Leben von mir nutze ich es nicht herausfinden können, ...Python: Der Versuch, „{} .replace()“ mit .format()

Ich habe folgendes Stück Code:

os.rename(FileName, FileName.replace(".png","")+"_"+time_stamp.replace(":","-").replace(" ","_")+"_"+name_string+".png") 

Umbenennen einer Bilddatei.

Ich möchte die .format() Struktur verwenden, aber ich kann nicht herausfinden, wie man die .replace() Funktion damit arbeiten kann.

Im Moment sieht mein konvertierte Code wie folgt aus:

os.rename(FileName, "{}.replace(".png","")_{}.replace(":","-").replace(" ","_")_{}.png".format(FileName,time_stamp,name_string)) 

Im Moment ist der Fehler gegeben wird, ist „ungültige Syntax“ beim ersten ersetzen (ein Caret im „“ in („.png“ , "")).

Könnte mir jemand bitte in die richtige Richtung weisen, um Ressourcen zu finden?

Gibt es eine bessere Art zu tun, was ich versuche?

Dank

Antwort

3

Sie sollten nicht Python-String-Operation replace() mit Argumenten für format() mischen.

os.rename(FileName, '{0}_{1}_{2}.png'.format(
    FileName.replace(".png", ""), 
    time_stamp.replace(":", "-"), 
    name_string.replace(" ", "_") 
)) 
+0

Vielen Dank! Aus irgendeinem Grund habe ich alles aus den nackten Grundlagen der format() Funktion vermieden, ich werde mich definitiv daran erinnern müssen, dass ich es komplizierter machen kann. – Caitlin

+0

@Caitlin können Sie die Antwort akzeptieren, wenn es hilft: D –

1

Die Grundform des Formats Sie verwenden, ist dies:

"Hello {}".format("there") 

, die „Hallo“ zu ihnen Zeichenfolge auswertet. In seiner einfachen Form wird jede {} in Ihrer Zeichenfolge durch die Zeichenfolgen in format ersetzt, um. Nähere Informationen können Sie hier finden: https://pyformat.info/

0

replace ein String-Methode ist, können Sie es nicht innerhalb der Zeichenfolge verwenden Sie die Formatierung. Sie würden zu tun haben:

s = "A {} string".format('very nice'.replace(' ', '_')) 

, wenn Sie in den Variablen ersetzen wollten (was wie Ihr Ziel scheint), oder:

s = "A {} string".format('very nice').replace(' ', '_') 

, wenn Sie global ersetzen wollen.

Im Hinblick auf bessere Möglichkeiten, es zu tun, würde ich os.path.splitext verwenden, um die Erweiterung zu spalten, den Zeitstempel bereits im richtigen Format erzeugen (wenn man das steuern kann, natürlich), statt mit der ersetzen, und tue alle das Ersetzen vor dem os.rename Teil, so ist es lesbarer (dh speichern Sie die richtigen Zeichenfolgen in Variablen und verwenden Sie diese in der format, anstatt alles in einer Zeile zu tun).

1

, was Sie tun müssen, ist

os.rename(FileName, "{0}_{1}_{2}".format(FileName.replace(".png",""), 
             time_stamp.replace(":","-").replace(" ","_"), 
             name_string+".png")) 

oder lesbare

newName = "{rmvFileFormat}_{time}_{addFileFormat}".format(rmvFileFormat = FileName.replace(".png",""), 
                  time = time_stamp.replace(":","-").replace("","_"), 
                  addFileFormat = name_string+".png") 
os.rename(FileName, newName)