Ordner erstellen

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
Benutzeravatar
pywald
User
Beiträge: 28
Registriert: Mittwoch 6. Januar 2021, 15:51

Donnerstag 7. Januar 2021, 16:18

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
nezzcarth
User
Beiträge: 1235
Registriert: Samstag 16. April 2011, 12:47

Donnerstag 7. Januar 2021, 18:07

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.)
Benutzeravatar
pywald
User
Beiträge: 28
Registriert: Mittwoch 6. Januar 2021, 15:51

Donnerstag 7. Januar 2021, 18:14

Vielen Dank! Das werde ich gleich ausprobieren.
Sirius3
User
Beiträge: 13917
Registriert: Sonntag 21. Oktober 2012, 17:20

Donnerstag 7. Januar 2021, 18:43

@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)
Benutzeravatar
pywald
User
Beiträge: 28
Registriert: Mittwoch 6. Januar 2021, 15:51

Freitag 8. Januar 2021, 08:03

Super. Habe mich schon gewundert warum es nicht funktioniert.
Benutzeravatar
pywald
User
Beiträge: 28
Registriert: Mittwoch 6. Januar 2021, 15:51

Freitag 8. Januar 2021, 08:19

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
einfachTobi
User
Beiträge: 290
Registriert: Mittwoch 13. November 2019, 08:38

Freitag 8. Januar 2021, 08:33

Mit pathlib.Path.glob():

Code: Alles auswählen

from pathlib import Path
filepaths = list(Path(r"C:\Test").glob("*.*"))
print(filepaths)
Sirius3
User
Beiträge: 13917
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 8. Januar 2021, 09:18

@einfachtobi: Wenn glob nur mit * aufruft, ist iterdir die einfache Methode.
Benutzeravatar
DeaD_EyE
User
Beiträge: 586
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Freitag 8. Januar 2021, 14:11

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.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
einfachTobi
User
Beiträge: 290
Registriert: Mittwoch 13. November 2019, 08:38

Freitag 8. Januar 2021, 15:45

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
nezzcarth
User
Beiträge: 1235
Registriert: Samstag 16. April 2011, 12:47

Freitag 8. Januar 2021, 21:11

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.
Antworten