2017-12-22 10 views
3

Wie kann ich Dateinamen mit Leerzeichen, Klammern usw. in eine Variable parsen? Bsp.Python/Bash - Get Dateinamen mit Escape-Zeichen

'Album Artist - Song name (feat Musician) [Year]' 

zu

'Album\ Artist\ \- Song\ name\ \(feat\ Musician\)\ \[Year\]' 

ich das richtige Format mit re.escape(filename). Wenn ich jedoch den Ausdruck von re.escape in eine Variable speichere, wird die ursprüngliche Benennung umgekehrt. Ich weiß, dass ich die "string".replace('x', 'y') Methode verwenden könnte. Aber es ist für mich nicht sicher.

Weiß jemand, wie ich das beheben oder dieses Problem umgehen kann? Verwenden von Python 3.5.3 btw. Beispielcode

EDIT:

>>> import re 
>>> # this is an example array in the format how my filenames are named stored in files                 >>> files = ['AA - BB (CC) [DD]', 'EE - FF (GG) [HH]', 'II - JJ (KK) [LL]'] 
>>> for f in files: 
...  print(f) 
... 
AA - BB (CC) [DD] 
EE - FF (GG) [HH] 
II - JJ (KK) [LL] 
>>> for f in files: 
...  print(re.escape(f)) 
... 
AA\ \-\ BB\ \(CC\)\ \[DD\] # desired format 
EE\ \-\ FF\ \(GG\)\ \[HH\] 
II\ \-\ JJ\ \(KK\)\ \[LL\] 
>>> escaped = re.escape(files[0]) 
>>> escaped 
'AA\\ \\-\\ BB\\ \\(CC\\)\\ \\[DD\\]' # actual result 
>>> 
+1

Könnten Sie den Code zeigen, wie Sie das tun? Ich kann Ihr Problem nicht replizieren – Mangohero1

+0

@ Mangohero1 hat den Code in der Frage hinzugefügt. :) – valerius21

+1

Was versuchst du mit dieser Zeichenfolge zu erreichen? – Galen

Antwort

2

Das zugrunde liegende Problem klingt wie die Übergabe von Dateinamen, die Zeichen enthalten könnten, die als Argumente in ein anderes Programm maskiert werden müssten. Ich schlage vor, subprocess zu betrachten.

Insbesondere sehen frequently used arguments:

args ist für alle Anrufe erforderlich und sollte ein String oder eine Folge von Programmargumente sein. Die Angabe einer Folge von Argumenten wird im Allgemeinen bevorzugt, da es dem Modul ermöglicht, alle erforderlichen Argumente zu umgehen und zu zitieren (z. B. um Leerzeichen in Dateinamen zuzulassen). Wenn eine einzelne Zeichenkette übergeben wird, muss jede der beiden Einheiten True sein (siehe unten), oder die Zeichenkette muss einfach das Programm benennen, das ohne Angabe von Argumenten ausgeführt werden soll.

Zum Beispiel:

import subprocess 

file_names = [r'AA - BB (CC) [DD]', r'EE - FF (GG) [HH]', r'II - JJ (KK) [LL]'] 

for file_name in file_names: 
    subprocess.call([r'touch', file_name]) 
2

Ihre Variable ist in Ordnung. Versuchen Sie, print(escaped) nicht escaped allein zu verwenden.

Verwandte Themen