Wie kann ich nur 3 bestimmte Ordner durchsuchen in python?
Hallo Community,
Ich habe heute eine Aufgabe bekommen und habe schon sämtliche seiten, Foren and whatever durchsucht aber ich finde nichts.
Wahrscheinlich für die Profis ganz leicht für mich aber nicht ^^
Meine Aufgabe ist es meine Dateiliste zu erweitern und zwar:
das es nur maximal x unterverzeichnisse durchsucht ( z.b. suche in C:\azubi in c:\azubi\wrk\dateiliste soll er noch suchen aber wenn dort dann unterverzeichnisse sind dann soll er die ignorieren c:\azubi\wrk\dateiliste\src\test.py darf er dann nicht finden
Mein Programm
print( "HELLO WORLD!" )
from pathlib import Path import time import os.path import pathlib
p="C:/azubi/wrk"
def get_paths(root='C:/azubi/wrk', pattern='*', recursive=True): p = Path(root) print("check {}".format( p ) ) if recursive: return p.rglob(pattern) return p.glob(pattern)
def main():
print('Dateien mit Endung .py') for py_file in get_paths( pattern = '.py',
root = 'C:/azubi/wrk/dateiliste'
):
print(py_file, "Änderungsdatum: ",time.ctime(os.path.getmtime(p)), "Gröse: ", os.path.getsize(p))
main()
die Ausgabe:
C:\azubi\wrk\dateiliste\Edit2.py.py Änderungsdatum: Fri Apr 24 12:57:56 2020 Gröse: 4096
C:\azubi\wrk\dateiliste\Edit4.py Änderungsdatum: Fri Apr 24 12:57:56 2020 Gröse: 4096
Diese Angaben sollen nicht ausgegeben werden:
C:\azubi\wrk\dateiliste\src\test.py Änderungsdatum: Fri Apr 24 12:57:56 2020 Gröse: 4096
C:\azubi\wrk\dateiliste\src\dateiliste\src\test.py Änderungsdatum: Fri Apr 24 12:57:56 2020 Gröse: 4096
C:\azubi\wrk\dateiliste\src\dateiliste\src\test_1.py Änderungsdatum: Fri Apr 24 12:57:56 2020 Gröse: 4096
die unteren Drei ausgaben sollen nicht ausgegeben werden da er nach der \Dateiliste die Unterverzeichnisse ignoriert werden sollen:
Danke für die Hilfe
Gruß Marius
3 Antworten
Ich verstehe das Problem auch nicht ganz...
Du willst 3 Ordner selber festlegen? Dann nutze:
import os
paths = ["/tmp", "/home/mark/xxx", "/home/mark/yyy"]
for path in paths:
print(os.listdir(path))
Willst du nur 3 Ebenen in die Tiefe gehen kannst du Rekursion verwenden:
import os
def list_dir(path, level):
for entry in os.listdir(path):
entrypath = os.path.join(path, entry)
print((" |-> " * level) + entry)
if os.path.isdir(entrypath) and level < 3:
list_dir(entrypath, level + 1)
path = "/tmp"
list_dir(path, 0)
Geht's darum nur 3 Ebenen zu durchsuchen, oder nur 3 Ebenen anzuzeigen?
Im letzteren Fall kannst du deine Liste vor dem Ausgeben durchgehen und alles rausfiltern, was mehr als die geforderten 3 Verzeichnisebenen hat.
Im ersten Fall wird das mit deinem Ansatz schwierig, da wäre eher os.walk() zu empfehlen.
Ich würde da weder mit Engeln noch mit Teufeln ringen, sondern:
i:=0;
if (i < 4) then suche begin
i:=i+1;
...
suche end;
also die Syntax kannst Du Dir wohl selbst nachschlagen. Ich spreche soviele Programmiersprachen, dass ich es nur stilisiert hinschreibe und die Details dann den Compiler korrigieren lasse.
Es geht um die Idee.
okay trz danke bin halt noch ein anfänger ^^
Relevant sind im Grunde nur, was vergleicht, und was zuweist.
Also wenn Du i etwas zuweist, haben die Sprachen dafür
:=
==
=
set
und anderes mehr.
Wenn Du sie vergleichst mit einem Wert, dann
ist da z.B
=
==
eq
einfach nachschagen.
okay danke aber das sieht für mich irgentwie nach Java aus nicht wie python