2016-05-02 4 views
0

(mit Python 3.4) So habe ich einen großen Ordner mit 1500 Ordnern darin. Ich möchte Daten analysieren, die 2 Ebenen in jedem Ordner sind. Der Name jedes Ordners hat das Format:Verzeichnispfad als Benutzereingabe, aber für mehrere Ordner gleichzeitig

YYMMDD_XXXXX_####X wobei X ein Buchstabe ist und # eine Nummer ist. Alles, was mir wirklich wichtig ist, ist der ####X Teil, der einzigartig ist. In diesem Ordner befindet sich ein Ordner namens "infosite-####X" (derselbe ####X als der übergeordnete Ordner), und in diesem Ordner befindet sich eine rst Datei mit der Bezeichnung "YYMMDD_XXXXX_####X_infosite.rst" (auch die gleiche ID), die die gewünschten Daten hat.

Ich habe den Code für die Datenanalyse erstellt, aber ich möchte nicht das gesamte Verzeichnis eingeben, wenn jedes Verzeichnis diese eindeutige 5mer-Sequenz hat.

Im Moment habe ich das Verzeichnis mit einer einzigen Datei, die ich hart codiert wollen und tun es wie folgt aus:

import os 
os.chdir("Z:/RunLog/160428_HV2VY_1892L/infosite-1892L") 

user_input = input("Enter name of file: ") 
assert os.path.exists(user_input + ".rst"), "I did not find the file at, " +  str(user_input) 
f = open(user_input + ".rst" ,'r+') 
print("Hooray we found your file!") 

Im Idealfall würde Ich mag etwas haben, wie

os.chdir("Z:/RunLog/*" + user_input + "/*" user_input + "/*" user_input + ".rst") 

aber dieses isn 't wirklich erlaubt, und ich sehe nicht, wie man glob.glob damit benutzt.

+0

Sie meinen, die Benutzereingabe ist diese eindeutige ID? – Kasramvd

+0

Yep-Eingabe ist die eindeutige ID – Leigh

+1

Ist es wichtig, dass Ihr Programm 'os.chdir()' aufruft? Machst du das nur, um 'open()' zu erstellen? Wenn ja, könnten Sie den absoluten Pfad zu 'open()' übergeben und das 'chdir()' vermeiden. –

Antwort

1

Geben Sie einfach den Ausdruck, den Sie glob() erstellt haben, und das Ergebnis verwenden, etwa so:

import glob 
import os 

user_input = input("ID of file: ") 
for filename in glob.glob(
    "Z:/RunLog/*" + user_input + "/*" user_input + "/*" user_input + "_infosite.rst"): 
    f = open(filename) 
    ... 

Oder, wenn Sie nicht bereit sind, mit mehreren passenden Dateien umgehen:

user_input = input("ID of file: ") 
filenames = glob.glob(
    "Z:/RunLog/*" + user_input + "/*" user_input + "/*" user_input + "_infosite.rst") 
filename = filenames[0] 
f = open(filename) 

beachten Sie auch, dass die Schaffung des glob Muster wie so besser lesbar sein könnte:

pattern = 'Z:/RunLog/*{0}/*{0}/*{0}_infosite.rst'.format(user_input) 
filenames = glob.glob(pattern) 
+0

Es ist besser lesbar und pythonisch, die Methode 'str.format()' zu verwenden. – Kasramvd

+1

Ja, ist es. Ich habe ursprünglich eine 'str.format()' -Lösung gepostet, aber stattdessen die OP-Lösung erweitert. Ich werde 'str.format()' in einem Moment hinzufügen. –

Verwandte Themen