Rekursives durchlaufen eines variablen Verzeichnisses

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
Hervorragend
User
Beiträge: 5
Registriert: Freitag 12. Juli 2019, 08:59

Hallo zusammen,

Ich habe ein Skript welches ein Verzeichnis durchläuft (rekursiv) und mir alle Files mit einer bestimmten Endung ausgibt. Das funktioniert soweit auch ganz gut.
Der Path sieht wie folgt aus fileInPath='\\\\server1231456879\\Provider\\Länderkürzel\\Kategorie\\Archive

Bsp.
Länderkürzel: DE, AT, IT
Kategorie: A,B,C
Unterverzeichnisse von Kategorie: mehrere. Interessant ist allerdings nur das Archive

Nun möchte ich das die Verzeichnisse Länderkürzel und Kategorie rekursiv durchlaufen werden aber immer nur die Inhalte auf Archive betrachtet und im weiteren in einer Liste gespeichert werden.

Ich habe versucht mit * zu arbeiten: fileInPath='\\\\server1231456879\\Provider\\*\\*\\Archive

das funktioniert aber leider nicht. Wie ist die Syntax dafür?
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du zeigst ja nicht wie du vorgehst. Aber solltest du os.walk nutzen, dann hat das ein Feature das dir deinen Wunsch erfüllen kann. Schau mal genau in die Dokumentation zu der Liste von Verzeichnissen, die du bekommst.
Hervorragend
User
Beiträge: 5
Registriert: Freitag 12. Juli 2019, 08:59

Code: Alles auswählen

fileInPath='\\\\server1231456879\\Provider\\Länderkürzel\\Kategorie\\Archive'

for subdir, dirs, files in os.walk(fileInPath):
  
  for file in files:

    if file[-3:].upper()=='PAR':
        print (file)
etwas vereinfacht gehe ich so vor.
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann fang bei Provider an, und modifizier dirs so das es nur Archives enthält, wenn du auf der Ebene “Kategorie” ankommst.
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

Einfacher geht das mit

Code: Alles auswählen

for filename in pathlib.Path("\\\\server1231456879\\Provider").glob("*\\*\\Archive\\*.par"):
  ...
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Neat. Ich wusste nicht, das glob das kann. Dachte der kann nur auf einer Ebene. 👍🏻
Hervorragend
User
Beiträge: 5
Registriert: Freitag 12. Juli 2019, 08:59

Sirius3 hat geschrieben: Freitag 12. Juli 2019, 10:21 Einfacher geht das mit

Code: Alles auswählen

for filename in pathlib.Path("\\\\server1231456879\\Provider").glob("*\\*\\Archive\\*.par"):
  ...
Danke für den Tip ginge das auch ohne die pathlib zu importieren? Verwende import OS.

...man merkt ich bin noch nicht ganz sooo fit darin;)
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und was hindert dich daran, pathlib zu verwenden?
Benutzeravatar
__blackjack__
User
Beiträge: 13071
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Klar geht das auch ohne `pathlib` zu importieren – man kann auch mit ``from pathlib import Path`` nur die `Path`-Klasse importieren. 😜
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Geht auch mit os. Du musst Dir halt anschauen, was in 'subdir' so steht. Aber mit pathlib und glob ist es deutlich eleganter. Und der Import ist auch nicht schwieriger.
Hervorragend
User
Beiträge: 5
Registriert: Freitag 12. Juli 2019, 08:59

für Pathlib erhalte ich immer die Fehlermeldung from pathlib import path , Import Error: No Module named path

habe auch schon die Version supo pip install pathlib ausprobiert.
Hervorragend
User
Beiträge: 5
Registriert: Freitag 12. Juli 2019, 08:59

kbr hat geschrieben: Freitag 12. Juli 2019, 14:12 Geht auch mit os. Du musst Dir halt anschauen, was in 'subdir' so steht. Aber mit pathlib und glob ist es deutlich eleganter. Und der Import ist auch nicht schwieriger.
Das weiß ich ja. Lasse ich mir zurzeit noch immer mit ausgeben.
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dir ist klar, dass gross und Kleinschreibung wichtig ist beim Programmieren? Und warum nicht einfach "import pathlib"?
Antworten