Seite 1 von 1

Alle Dateien und Pfade in einem Verzeichnis

Verfasst: Donnerstag 7. April 2022, 18:20
von alltogo
Hallo,

ich möchte ein Verzeichnis durchlaufen und dabei alle Dateien gepaart mit dem Verzeichnis in dem die Datei liegt, weiterverarbeiten. Dabei soll das gesamte Verzeichnis mit all seinen Unterordnern durchlaufen werden.

Ein Beispiel:
/home/Dokumente/1.txt
/home/test.txt

Dann möchte ich paare habe in der Form:
/home/Dokument/;1.txt
/home/;test.txt

Bisher habe ich mit diesem Code Schnipsel es versucht

Code: Alles auswählen

import os


for (root,dirs,files) in os.walk('./test'):
    print("Root:" + str(root))
    print("Verzeichnisse: " + str(dirs))
    print("Dateien: " + str(files))
  
Hat jemand eine Idee?

Grüße,
alltogo

Re: Alle Dateien und Pfade in einem Verzeichnis

Verfasst: Donnerstag 7. April 2022, 19:01
von Sirius3
Ich weiß nicht so recht, wo man da helfen soll? Du weißt, was Listen sind, und wie man die benutzt?

`os.walk` ist veraltet. Heutzutage benutzt man pathlib:

Code: Alles auswählen

from pathlib import Path

for path in Path('./test').rglob('*'):
    print(path)

Re: Alle Dateien und Pfade in einem Verzeichnis

Verfasst: Donnerstag 7. April 2022, 19:41
von alltogo
Hallo Sirius,

mit deiner Antwort hast du mir schon geholfen, danke =)

Code: Alles auswählen

from pathlib import Path

filecounter = 0

for path in Path('./test').rglob('*'):   
    fileCut = str(path).rsplit("/",1)
    print(fileCut)

    filecounter += 1
print(filecounter)
So bekomme die Ausgabe genau wie ich sie haben wollte.

Code: Alles auswählen

['test', '1']
['test', '2']
['test/1', 'test']
['test/2', '3']
['test/2', 'test']
['test/2/3', 'test2']
['test/2/3', 'test']
['test/2/3', '4']
Grüße,
alltogo

Re: Alle Dateien und Pfade in einem Verzeichnis

Verfasst: Donnerstag 7. April 2022, 20:16
von Sirius3
Pfade sind keine einfachen Strings, sondern Objekte, mit denen man bequem an die nötigen Informationen herankommt.

Code: Alles auswählen

from pathlib import Path

for filecount, path in enumerate(Path('./test').rglob('*'), 1):   
    print([path.parent, path.name])
print(filecounter)

Re: Alle Dateien und Pfade in einem Verzeichnis

Verfasst: Freitag 8. April 2022, 09:35
von LukeNukem
Sirius3 hat geschrieben: Donnerstag 7. April 2022, 19:01 `os.walk` ist veraltet. Heutzutage benutzt man pathlib:
Das ist leider nicht ganz richtig: os.walk() arbeitet rekursiv, pathlib.Path.glob() nicht -- und ist daher offensichtlich kein adäquater Ersatz.

Code: Alles auswählen

#!/usr/bin/env python
import os
from pathlib import Path
from argparse import ArgumentParser

if __name__ == '__main__':
    parser = ArgumentParser(description='walk directory tree')
    parser.add_argument('directory', help='the directory')
    args = parser.parse_args()

    for dirpath, dirnames, filenames in os.walk(Path(args.directory)):
        for filename in filenames:
            print(Path(dirpath)/filename)

Re: Alle Dateien und Pfade in einem Verzeichnis

Verfasst: Freitag 8. April 2022, 10:37
von __deets__
@LukeNukem: und deswegen hat Sirius3 ja auch rglob verwandt, das r steht fuer recursive.

Code: Alles auswählen

#!/usr/bin/env python
from pathlib import Path
from argparse import ArgumentParser


def main():
    parser = ArgumentParser(description='walk directory tree')
    parser.add_argument('directory', help='the directory')
    args = parser.parse_args()

    for path in Path(args.directory).rglob("*"):
        print(path)


if __name__ == '__main__':
    main()

Re: Alle Dateien und Pfade in einem Verzeichnis

Verfasst: Freitag 8. April 2022, 11:39
von LukeNukem
__deets__ hat geschrieben: Freitag 8. April 2022, 10:37 @LukeNukem: und deswegen hat Sirius3 ja auch rglob verwandt, das r steht fuer recursive.
Huch, stimmt... ich werde alt. ;-)