2017-04-24 26 views
0

Ich benutze Linux8. Ich habe ein Repo (mit Subrepos) mit Dateien und ich habe eine Liste der Dateinamen (Pfad/zu/Datei/Dateiname.pdf). Ich möchte überprüfen (mit Python), ob diese Dateien alle existieren und wenn nicht, möchte ich das wissen. Also habe ich versucht, die Liste zu lesen, die Listeneinträge mit einer for-Schleife zu iterieren und diese mit os.path.isfile() zu verwenden.python: Wie os.path.isfile() in einer Liste (von Pfaden) verwendet wird?

z. Ich habe ein Repo mit folgenden Dateien: list.txt, test1.txt und test2.txt.

Die Datei list.txt enthält die Dateinamen (hier: 'test1.txt' 'test2.txt').

os.path.isfile('test1.txt') 

gibt ein

True 

Aber für Schleife ...

import os 

with open('list.txt', 'r') as f: 
    pathlist=f.readlines() 
for path in pathlist: 
    print(os.path.isfile(path)) 

... gibt:

False 
False 

obwohl

type(path) 

ist

<type 'str'> 

Es ist fühlt sich an wie Python zwei Arten von Zeichenketten unterscheidet. Weiß jemand, woher das kommt?

+0

Art von. Python unterscheidet Zeichenfolgen mit einer neuen Zeile am Ende von Zeichenfolgen ohne. Versuchen Sie, ['strip()'] (https://docs.python.org/2/library/stdtypes.html#str.strip) in den von Ihrer Datei gelesenen Zeilen aufzurufen. – khelwood

+0

Probieren Sie 'print (repr (Pfad))' ... 'readlines' streicht Newline nicht, Sie müssen das selbst tun. – tdelaney

+0

'pathlist = map (str.strip, pathlist)' wird den Job erledigen –

Antwort

0

Zwei mögliche Probleme.

Erstens, Sie laufen möglicherweise nicht in dem Verzeichnis, von dem Sie glauben, dass Sie es sind.

Zweitens gibt readlines() die Zeilen mit Zeilenumbrüchen und möglicherweise Wagenrücklaufzeichen zurück. Sie sollten diese entfernen, bevor Sie sie als Pfade testen. Sie können rstrip() verwenden, um nachfolgende Leerzeichen aus einer Zeichenfolge zu entfernen.

for path in pathlist: 
    print(os.path.isfile(path.rstrip())) 
+0

Das hat total funktioniert. Ich dachte daran, beim Drucken der Liste "Pfadliste". Aber wusste nicht, wie man das Problem ausdrückt. Danke vielmals! – tharndt

0

Sie können die Zeile Ihrer Datei durchlaufen und überprüfen, ob jeder Pfad wie folgt vorhanden sind:

import os 

with open('list.txt', 'r') as fd: 
    for line in fd: 
     path = line.strip() # drop \n 
     if os.path.isfile(path): 
      print(path) 
+0

Das hat auch funktioniert. Vielen Dank! – tharndt

1

Betrachten

os.path.isfile("/tmp") # True 

während

os.path.isfile("/tmp\n") # False 

versuchen statt:

with open("/pathlist", "r") as f: 
    for path in map(str.strip, f.readlines()): 
     print(os.path.isfile(path)) 
+0

Dies ist noch kürzer. Nett. Funktioniert gut! Vielen Dank! – tharndt

Verwandte Themen