Seite 1 von 1
Liste mit Dateipfaden bearbeiten
Verfasst: Dienstag 24. März 2020, 10:15
von Eugen
Hallo zusammen. Ich möchte einen Ordner nach csv-Dateien auslesen und anschließend einige Dateien aus der Liste entfernen. Dabei scheitere ich. Danke schon mal!
Code: Alles auswählen
from pathlib import Path
input_fold = Path('D:/Spyder/input_csv')
datei_pfad_liste = list(input_fold.glob('*.csv'))
dateien_auschliessen = ['datei3.csv', 'datei4.csv']
datei_pfad_liste.remove(dateien_auschliessen)
Re: Liste mit Dateipfaden bearbeiten
Verfasst: Dienstag 24. März 2020, 11:11
von __deets__
Weil deine Pfade absolut sind. Du musst eine NEUE Liste bauen, und pruefen, ob der "name" deinen Ausschlusskriterien entspricht. Nur wenn nicht kommt das Ergebnis in die Tuete. Namen sollten uebrigens nicht den Datentypen beinhalten, sonst werden die verwirrend wenn der sich aendert.
Code: Alles auswählen
tuete = [p for p in datei_pfade if p.name not in dateien_ausschliessen]
Re: Liste mit Dateipfaden bearbeiten
Verfasst: Dienstag 24. März 2020, 11:31
von __blackjack__
@Eugen: Das hätte auch mit relativen Pfaden nicht funktioniert, denn `list.remove()` entfernt das Element was man da als Argument übergibt und in der Liste sind ja `Path`-Objekte und keine Listen mit Zeichenketten.
Bitte hier mal drüber nachdenken:
Code: Alles auswählen
In [84]: items = [1, 2, 3, 4, 5]
In [85]: items.remove([2, 4])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-85-4698de25ec1e> in <module>
----> 1 items.remove([2, 4])
ValueError: list.remove(x): x not in list
In [86]: items.remove(2)
In [87]: items.remove(4)
In [88]: items
Out[88]: [1, 3, 5]
Ergänzend zur Lösung von __deets__: Falls das mehr als zwei oder drei Namen sind die ausgeschlossen werden sollen, oder falls die Anzahl variabel ist, würde ich dafür ein `set()` nehmen, weil dann der ``in``-Test effizienter ist.
Re: Liste mit Dateipfaden bearbeiten
Verfasst: Dienstag 24. März 2020, 13:09
von Eugen
Man seid ihr gut! Tausend Dank! Ich versuche das noch vollständig zu begreifen.
Re: Liste mit Dateipfaden bearbeiten
Verfasst: Freitag 27. März 2020, 12:55
von DeaD_EyE
Die List-Comprehension sorgt bei den meisten Anfängern für viele Fragezeichen.
Code: Alles auswählen
# tuete = [p for p in datei_pfade if p.name not in dateien_ausschliessen]
tuete = []
for p in datei_pfade:
if p.name not in dateien_ausschliessen:
tuete.append(p)
Das pathlib-Objekt hat Methoden und Attribute. Ein Attribut ist z.B.
name, was den Dateinamen als
str zurückliefert.