2016-06-09 6 views
0

Iam mit einer Aussage wie:Wie erstellt man einen Glob, der für einen Wild Char oder eine exakte Übereinstimmung funktioniert?

input_stuff = '1,2,3' 
glob(folder+'['+ input_stuff + ']'+'*') 

Dateien aufzulisten, die mit 1,2 oder 3 beginnen, während diese Dateien wie 1-my-Datei listet, 2-my-Datei, 3-my-Datei . Dies funktioniert nicht, wenn genaue Dateinamen

input_stuff = '1-my-file, 2-my-file, 3-my-file' 
glob(folder+'['+ input_stuff + ']'+'*') 

Der Fehler gegeben ist: sre_constants.error: bad character range

schlimmer für:

input_stuff = '1-my-' 
glob(folder+'['+ input_stuff + ']'+'*') 

Er druckt alles im Ordner wie 3-my-Datei etc .,

Gibt es eine Glob-Anweisung, die Dateien für beide

drucken wird
input_stuff = '1,2,3' 

oder

input_stuff = '1-my-file, 2-my-file, 3-my-file' 

?

Antwort

1

Glob Ausdruck in Klammern ist eine Reihe von Zeichen, keine Liste von Zeichenfolgen. Sie erste Ausdruck input_stuff = '1,2,3' entspricht '123,' und wird auch einen Namen beginnend mit Komma übereinstimmen.
Ihr zweiter Ausdruck enthält '-', die Zeichenbereiche wie '0-9A-F' bezeichnet, daher der Fehler, den Sie erhalten.

Es ist besser, glob zusammen zu löschen, teilen Sie input_stuff und verwenden Sie listdir.

+0

Ich hatte begonnen, aber Ihre Erklärung überzeugte mich. – Victor

0

können Sie verwenden, um die folgenden:

input_stuff = '1,2,3' 
glob(folder+'['+input_stuff+']-my-file*') 

EDIT: Da Sie in Ihrem Kommentar gesagt, dass man nicht "-my-Datei" hart codieren, können wie etwas tun:

input_stuff = '1,2,3' 
name = "-my-file" 
print glob.glob(folder+'['+input_stuff+']'+name+'*') 

und dann ändern Sie einfach die Variable "Name", wenn Sie müssen.

+0

Ich kann nicht hartcodieren: '-mein-Datei' ist variabel. – Victor

+0

@Victor Du hast das in deiner Frage nicht erwähnt, aber ich habe meine Antwort aktualisiert, um das zu reflektieren. – Natsukane

+0

kann ich nicht so verwenden, weil der Benutzer eingeben kann: input_stuff = '1,2,3' oder input_stuff = '1-meine-Datei, 1-mein-Zeug, 3-meine-Datei' oder eine solche Kombination und einzelne Glob Anweisung sollte funktionieren – Victor

Verwandte Themen