python skript



  • Hallo ich versuche grad ein python-skript zu schreiben dass mir alle .mp3 .ogg usw auf der konsole ausgibt, die ich in einem bestimmten ordner habe (rekursiver durchlauf)

    das bisherige sieht so aus:

    import os
    import sys
    
    sys.setrecursionlimit(20000000)
    
    print("Starte")
    
    musikendungen = [".ogg", ".mp3", ".flac", ".wma"]
    
    def find_musik(path):
    	for useless, dirs, files in os.walk(path):
    		for dir in dirs:
    			find_musik(dir)
    		for file in files:
    			if os.path.splitext(file)[1] in musikendungen:
    				print(files)
    
    find_musik("C:\\")
    

    leider funktioniert das nicht, nach einer weile heißt es einfach : python.exe funktioniert nicht mehr...

    Ich verwende python3.1



  • os.walk() ist doch schon rekursiv. Also lösche einfach Zeile 12 und 13. Hättest du gesehen wenn du "files" einfach mal ausgegeben hättest, bevor du die Funktion nochmal aufrufst.



  • hmmm.. da hätte ich selbst drauf kommen können 🙂

    allerdings:

    ich hatte am anfang versucht mit listdir zu arbeiten, das at aber nicht geklappt weil ich nicht weiß wie ich
    die strings dann als files interpretieren kann...

    also so in etwa:

    for file in os.listdir(path):
      if os.path.isdir(file):
        rekursion(file)
    ...
    

    allerdings kann os.path.isdir nicht ausgeführt werden, type(file) spuckt string aus



  • Wieso kann os.path.isdir nicht ausgeführt werden? Die Funktion erwartet einen String.

    from os import listdir, getcwd
    from os.path import isdir
    
    def listfiles(path):
        for file in listdir(path):
            if isdir(file):
                listfiles(path + "\\" + file)
            else:
                print(path + "\\" + file)
    listfiles(getcwd())
    

    Funktioniert wunderbar.



  • nwp2 schrieb:

    from os import listdir, getcwd
    from os.path import isdir
    
    def listfiles(path):
        for file in listdir(path):
            if isdir(file):
                listfiles(path + "\\" + file)
            else:
                print(path + "\\" + file)
    listfiles(getcwd())
    

    Ein echter nwp2. Das ist Mist:

    $ pwd
    /root/eins
    $ python eins.py 
    /root/eins\eins.py
    Traceback (most recent call last):
      File "eins.py", line 10, in <module>
        listfiles(getcwd())
      File "eins.py", line 7, in listfiles
        listfiles(path + "\\" + file)
      File "eins.py", line 5, in listfiles
        for file in listdir(path):
    OSError: [Errno 2] No such file or directory: '/root/eins\\zwei'
    

    Wenn schon die Pfade selbst bauen, dann lieber so:

    from os import listdir, getcwd
    from os.path import isdir, sep
    
    def listfiles(path):
        for file in listdir(path):
            if isdir(file):
                listfiles(path + sep + file)
            else:
                print(path + sep + file)
    listfiles(getcwd())
    

    🙂



  • Da der Threadersteller

    find_musik("C:\\")
    

    benutzt funktioniert es bei ihm. Außerdem liefere ich keine Komplettlösung, sondern einen Ansatz, dass es nicht perfekt ist ist klar.
    Ich hab auch Klammern um print gemacht, zuviel C.



  • nwp2 schrieb:

    Ich hab auch Klammern um print gemacht, zuviel C.

    Wie schon shisha. print() ist seit Jahren eine Funktion.
    🙂



  • ich sag zu den klammern nur: python 3.x


Log in to reply