Seite 1 von 1

Ordner erstellen

Verfasst: Donnerstag 7. Januar 2021, 16:18
von pywald
Hallo,
Ich habe das Problem, das ich einen Ordner erstellen will der dann von Python gefüllt werden soll.
Das mit dem befüllen habe ich schon geschafft, aber beim Ordner Erstellen hakt es bei mir noch.

Danke

Re: Ordner erstellen

Verfasst: Donnerstag 7. Januar 2021, 18:07
von nezzcarth
Dafür nimmt man heutzutage das 'pathlib'-Modul:

Code: Alles auswählen

In [1]: import pathlib

In [2]: path = pathlib.Path('mein_ordner')

In [3]: if not path.exists():
   ...:     path.mkdir()
(Wenn der Ordner immer erstellt werden soll, egal ob er schon existiert oder nicht, kann man auch path.mkdir(exist_ok=True) verwenden.)

Re: Ordner erstellen

Verfasst: Donnerstag 7. Januar 2021, 18:14
von pywald
Vielen Dank! Das werde ich gleich ausprobieren.

Re: Ordner erstellen

Verfasst: Donnerstag 7. Januar 2021, 18:43
von Sirius3
@nezzcarth: nein, nein, nein, der Ordner wird nicht erstellt wenn er schon existiert, wie soll das auch gehen? Richtig also:

Code: Alles auswählen

from pathlib import Path
path = Path("ordner")
path.mkdir(exist_ok=True)

Re: Ordner erstellen

Verfasst: Freitag 8. Januar 2021, 08:03
von pywald
Super. Habe mich schon gewundert warum es nicht funktioniert.

Re: Ordner erstellen

Verfasst: Freitag 8. Januar 2021, 08:19
von pywald
Eine Frage noch: wie finde ich raus, welche Dateien in einem Ordner sind. Mit os.listdir() habe ich es schon probiert aber es funktioniert einfach nicht.

Danke schon mal im voraus
pywald

Re: Ordner erstellen

Verfasst: Freitag 8. Januar 2021, 08:33
von einfachTobi
Mit pathlib.Path.glob():

Code: Alles auswählen

from pathlib import Path
filepaths = list(Path(r"C:\Test").glob("*.*"))
print(filepaths)

Re: Ordner erstellen

Verfasst: Freitag 8. Januar 2021, 09:18
von Sirius3
@einfachtobi: Wenn glob nur mit * aufruft, ist iterdir die einfache Methode.

Re: Ordner erstellen

Verfasst: Freitag 8. Januar 2021, 14:11
von DeaD_EyE
Sirius3 hat geschrieben: Freitag 8. Januar 2021, 09:18 @einfachtobi: Wenn glob nur mit * aufruft, ist iterdir die einfache Methode.
Es seiden man macht aus dem glob ein rglob. Rekursion kann iterdir leider nicht.

Re: Ordner erstellen

Verfasst: Freitag 8. Januar 2021, 15:45
von einfachTobi
Interessehalber: Warum ist iterdir() einfacher? Ich verwende gerne glob, da ich mir dann, wie DeaD_EyE sagte, die Möglichkeit zur Rekursion offen halte.
Zudem war glob in einem Mini-Test gerade deutlich schneller:

Code: Alles auswählen

>>> timeit.timeit(stmt="import pathlib; [x for x in pathlib.Path('C:/dev').iterdir() if x.is_file()]", number=1000)
3.377736500000026
>>> timeit.timeit(stmt="import pathlib; [x for x in pathlib.Path('C:/dev').iterdir() if x.is_file()]", number=1000)
3.33625219999999
>>> timeit.timeit(stmt="import pathlib; [x for x in pathlib.Path('C:/dev').glob('*.*') if x.is_file()]", number=1000)
0.9806270999999924
>>> timeit.timeit(stmt="import pathlib; [x for x in pathlib.Path('C:/dev').glob('*.*') if x.is_file()]", number=1000)
0.9812597000000096

Re: Ordner erstellen

Verfasst: Freitag 8. Januar 2021, 21:11
von nezzcarth
pywald hat geschrieben: Freitag 8. Januar 2021, 08:03 Habe mich schon gewundert warum es nicht funktioniert.
Das lag dann aber an etwas anderem. Die beiden Code-Beispiele, eines davon identisch zu dem von Sirius3, funktionieren beide korrekt; ein Ordner wird erstellt, wenn er noch nicht existiert, ohne dass eine Exception auftritt. Die Anmerkung bezog sich auf Inhaltliches.