2016-08-08 12 views
2

Ich versuche, den Inhalt aller Dateien in einem bestimmten Verzeichnis zu lesen. Ich finde es ein bisschen schwierig, wenn der Pfadname nicht mit / endet, dann wird mein Code unten nicht funktionieren (wird E/A-Ausnahme haben, da pathName+f nicht gültig ist - in der Mitte fehlt /). Hier ist ein Codebeispiel zu zeigen, wenn es funktioniert und wenn es nicht funktioniert,elegante Möglichkeit zu überprüfen Datei Verzeichnispfad gültig in Python 2.7

Ich kann tatsächlich überprüfen, ob pathName mit / endet, indem ich endendsWith, nur frage mich, ob elegantere Lösungen, wenn Pfad und Dateiname für einen vollständigen Namen verketten?

Meine Anforderung ist, ich möchte geben Eingabe Pfadname flexibler zu endet mit beiden \ und endet nicht mit \.

Verwenden von Python 2.7.

from os import listdir 
from os.path import isfile, join 

#pathName = '/Users/foo/Downloads/test/' # working 
pathName = '/Users/foo/Downloads/test' # not working, since not ends with/ 
onlyfiles = [f for f in listdir(pathName) if isfile(join(pathName, f))] 
for f in onlyfiles: 
    with open(pathName+f, 'r') as content_file: 
     content = content_file.read() 
     print content 
+6

Warum verwenden Sie sowohl 'os.path.join (Pfadname, f)' und 'Pfadname + f'? – Blender

+0

Danke @Blender, vote up. –

Antwort

3

Sie würden nur wieder beitreten verwenden:

pathName = '/Users/foo/Downloads/test' # not working, since not ends with/ 
onlyfiles = [f for f in listdir(pathName) if isfile(join(pathName, f))] 
for f in onlyfiles: 
    with open(join(pathName, f), 'r') as content_file: 
     content = content_file.read() 
     print content 

Oder Sie glob und vergessen beitreten nutzen könnten:

from glob import glob 

pathName = '/Users/foo/Downloads/test' # not working, since not ends with/ 

onlyfiles = (f for f in glob(join(pathName,"*")) if isfile(f)) 

for f in onlyfiles: 
    with open(f, 'r') as content_file: 

oder kombinieren Sie es mit Filter für eine prägnante Lösung:

onlyfiles = filter(isfile, glob(join(pathName,"*"))) 
+0

Es funktioniert, danke Padraic! Stimme ab und markiere als Antwort. –

+0

@LinMa, keine Sorge, gern geschehen. –

+0

@ray, Danke für die Bearbeitung. –

Verwandte Themen