Liste nach Elementen, die bestimmten Wortschnipsel enthalten, filtern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
iknowwhatidontknow
User
Beiträge: 2
Registriert: Donnerstag 11. April 2019, 09:36

Guten Tag liebe Community!

Mir liegt folgender (unvollständiger) Programmcode vor:

Code: Alles auswählen

import os

#Alle Dateien innerhalb eines Verzeichnisses in einer Liste speichern
dirpath = "/home/hpcmbeck/Dokumente"
dirs = os.listdir(dirpath)
print(dirs)

#Diese Liste aufsteigend sortieren
dirs.sort()
print(dirs)

#Liste filtern (alle Dateien die nicht mit "Channel" beginnen sollen raus)
def listfilter(list):
    if ...
    #hier fehlt die Implementierung der Funktion

dirs_filtered = filter(listfilter, dirs)
print(dirs_filtered)
Angenommen im Verzeichnis "/home/hpcmbeck/Dokumente" liegen viele gemischtnamige Dateien, von welchen ich nur die die mit dem Wort "Channel" beginnen, oder das Wort "Channel " im Namen haben, aus der ursprünglichen Liste "dirs" in eine neue Liste "dirs_filtered" filtern möchte:

Wie muss die Funktion listfilter(list) implementiert werden, sodass ich obig beschriebene Aufgabe mittels

Code: Alles auswählen

filter(listfilter, dirs)
ausführen kann?

Quasi eine Funktion die "true" zurückgibt, falls der (Datei)Name des Listenelements mit "Channel" beginnt (oder jener diesen Wortschnipsel im Namen enthält) und "false", wenn nicht.

Vielen Dank für Eure Antworten im Voraus!

Liebe Grüße!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Code: Alles auswählen

"antwort" in "was ist die antwort auf meine frage?"
Benutzeravatar
__blackjack__
User
Beiträge: 14042
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@iknowwhatidontknow: In der vorletzten Zeile fehlt noch ein `list()`-Aufruf, damit die letzte Zeile auch tatsächlich die Namen ausgibt, und keine Repräsentation des `filter`-Objekts.

Bei der Namensgebung hast Du `dirs*` bei Werten wo nicht wirklich sichergestellt ist, das es sich tatsächlich nur um Verzeichnisnamen handelt. Das sollte man ändern – entweder in dem man explizit Dateinamen ausfiltert, oder in dem man die Namen im Programm ändert.

Auch wenn das hier wahrscheinlich praktisch keinen Unterschied macht: erst filtern und dann sortieren könnte effizienter sein.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
iknowwhatidontknow
User
Beiträge: 2
Registriert: Donnerstag 11. April 2019, 09:36

@__blackjack__: Habe den List-Aufruf eingefügt. Vielen Dank!

Die Namensgebung dient hier nur zu demonstrativen Zwecken, aber dennoch danke für Deinen Hinweis. Werde soetwas in Zukunft berücksichtigen.

Dennoch ist meine Frage wie die Implementierung der Funktion "listfilter" aussehen könnte, dass nur Dateien die das Wort "Channel" im Namen haben in der neuen Liste stehen, nicht beantwortet. Hat dazu jemand eine Idee?

Liebe Grüße
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du meine Antwort gesehen? Was daran ist dir unklar?
Antworten