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.
alltogo
User
Beiträge: 7 Registriert: Mittwoch 7. Januar 2015, 19:50
Donnerstag 7. April 2022, 18:20
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
Sirius3
User
Beiträge: 18279 Registriert: Sonntag 21. Oktober 2012, 17:20
Donnerstag 7. April 2022, 19:01
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)
alltogo
User
Beiträge: 7 Registriert: Mittwoch 7. Januar 2015, 19:50
Donnerstag 7. April 2022, 19:41
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
Sirius3
User
Beiträge: 18279 Registriert: Sonntag 21. Oktober 2012, 17:20
Donnerstag 7. April 2022, 20:16
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)
LukeNukem
User
Beiträge: 232 Registriert: Mittwoch 19. Mai 2021, 03:40
Freitag 8. April 2022, 09:35
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)
__deets__
User
Beiträge: 14545 Registriert: Mittwoch 14. Oktober 2015, 14:29
Freitag 8. April 2022, 10:37
@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()
LukeNukem
User
Beiträge: 232 Registriert: Mittwoch 19. Mai 2021, 03:40
Freitag 8. April 2022, 11:39
__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.