Habe Pfad eines Ordners. Wie lese ich die Dateien + Info aus

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.
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

Habe Pfad eines Ordners. Wie lese ich die Dateien + Info aus

Beitragvon jazzdee! » Samstag 22. Oktober 2005, 11:25

Also ich habe den Pfad eines Ordners. Wie kann ich nun die darin liegenden Dateien auslesen und ggf auf deren Infos zugreifen (bei Mp3 den ID Tag, bei doc dateien die beschreibung, etc ..... ).
ist das überhaupt möglich?

PS: gibt es eine seite, wo man schnell die funktionen findet?
also bei php ist es ja so, dass wenn man weiß, was man braucht, schaut man eben auf php.net und findet dort die function die z.b. den algorithmus von einer zal errechnet. gibts da auch was für python?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 22. Oktober 2005, 12:31

Ich habe den Thread verschoben, da die Frage mit wxPython nichts zu tun hatte.
Den inhalt eines Ordners kannst du so auslesen:

Code: Alles auswählen

import os
print os.listdir(r"C:\")

Dür Informationen über mp3s gibt es die Zusatzlib ID3-py, DOC-Informationen bekommsts du nicht ohne weiteres, da DOC ein proprietäres Format von Microsoft ist, von dem die Spazifikationen nicht bekannt sind.

Die meiste Dokumentation über Python gibt es auf docs.python.org.
Zuletzt geändert von Leonidas am Samstag 22. Oktober 2005, 12:43, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Beitragvon Gast » Samstag 22. Oktober 2005, 12:34

viel dank!
Jazzdee!!

Beitragvon Jazzdee!! » Samstag 22. Oktober 2005, 12:39

bekomme immer einen Fehler:

There's an error in your programm:
EOL while scanning single-quoted string
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Samstag 22. Oktober 2005, 12:45

Hi!

Hier noch zwei Links aus diesem Forum zu diesem Thema:

http://www.python-forum.de/viewtopic.ph ... =dateiinfo
http://www.python-forum.de/viewtopic.ph ... =dateiinfo

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 22. Oktober 2005, 12:45

Dann nimm diesen Code:

Code: Alles auswählen

import os
print os.listdir("C:\\")
My god, it's full of CARs! | Leonidasvoice vs Modvoice
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

Beitragvon jazzdee! » Samstag 22. Oktober 2005, 12:50

dankeschön, das klappt super
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

Beitragvon jazzdee! » Samstag 22. Oktober 2005, 13:27

hab ein problem, also wenn ich den pfad direkt eingebe, funzt es super.
wenn ich nun aber dieses hier machen

Code: Alles auswählen

# -*- coding: cp1252 -*-
from ID3 import *
import os
a = os.listdir("C:\\*****\\******\\******\\******\\******\\")
for x in a:
    laenge = len(x)
    diff = laenge-4
    if x[diff:] == ".mp3":
        try:
            id3info = ID3('C:\\******\\******\\******\\******\\******\\',x)
            print id3info
            id3info['TITLE'] = "Green Eggs and Ham"
            id3info['ARTIST'] = "Moxy Früvous"
            for k, v in id3info.items():
                print k, ":", v
        except InvalidTagError, message:
            print "Invalid ID3 tag:", message


bekomme ich folgende meldung

Exception exceptions.AttributeError: "ID3 instance has no attribute 'modified'" in <bound method ID3.__del__ of <ID3.ID3 instance at 0x00E73CB0>> ignored
Traceback (most recent call last):
File "C:\******\******\******\******\******\test.py", line 23, in ?
id3info = ID3('C:\\******\\******\\******\\******\\******',x)
File "C:\******\******\******\******\******\ID3.py", line 196, in __init__
self.file = open(file, 'rb')
IOError: [Errno 2] No such file or directory: 'C:\\******\\******\\******\\******\\******\\'


pfad ist zu 100% richtig, weil er mir ein ergebnis liefert, wenn ich statt id3info = ID3('C:\\******\\******\\******\\******\\******\\',x) den direkten pfad zur datei angebe. woran liegt das?

Edit (Leonidas): Code in Python-Tags gesetzt.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 22. Oktober 2005, 13:54

So wie ich das sehe, versuchst du einen Ordner zu öffnen, das geht natürlich nicht. Zum "zusammenkleben" von Ordner und Dateinamen verwendest du am besten die Funktionen des Moduls os.path. Versuche auch den gebauten Pfad mit print auszugeben, und dann zu schauen, ob es ihn wirklich gibt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Beitragvon Gast » Samstag 22. Oktober 2005, 13:59

fehler gefunden

ich habe den pfad mit der variablen so verbunden "pfad",x! also mit einem ",". wenn ich es so mache "pfad"+x dann geht es!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 22. Oktober 2005, 14:07

Anonymous hat geschrieben:ich habe den pfad mit der variablen so verbunden "pfad",x! also mit einem ",". wenn ich es so mache "pfad"+x dann geht es!

Trotzdem ist der bevorzugte Weg über os.path.join().
My god, it's full of CARs! | Leonidasvoice vs Modvoice
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

Beitragvon jazzdee! » Samstag 22. Oktober 2005, 18:29

bräuchte nochmal hilfe^^
und zwar habe ich folgenden Code

Code: Alles auswählen

# -*- coding: cp1252 -*-
import wx
from ID3 import *
import os

#Variablen
ID_EXIT = 101
ID_OPEN_DIR = 102

class MainWindow(wx.Frame):
    def __init__(self,parent,id,title):
        wx.Frame.__init__(self,parent,wx.ID_ANY, title, size = ( 800,600),
                                     style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE)

        #Statisches Fenster anlegen
        self.feld = wx.StaticText(self,1,style=wx.TE_MULTILINE)

        #Textfeld anlegen (dort werden die Aktionen eingefügt/angezeigt)
        self.fenster = wx.TextCtrl(self,5,"",wx.point(492,0),wx.Size(300,300),wx.TE_MULTILINE | wx.TE_READONLY)

        #Statusbar anlegen
        self.CreateStatusBar()

        #"Datei"-Menu
        filemenu = wx.Menu()
        filemenu.Append(ID_OPEN_DIR,"&Öffnen","Ordner öffnen")
        filemenu.AppendSeperator()
        filemenu.Append(ID_EXIT,"&schließen","Programm schließen")

        #Menübar anlegen
        menuBar = wx.MenuBar()
        menuBar.Append(filemenu,"&Datei")
        self.SetMenuBar(menuBar)

        #Event = schließen
        wx.EVT_MENU(self,ID_EXIT,self.OnExit)
        #Event = Ordner öffnen
        wx.EVT_MENU(self,ID_OPEN_DIR,self.OpenDir)

        #Alles anzeigen
        self.Show(True)

    def OnExit(self,e):
        self.Close(True)
    def OpenDir(self,e):
        #"Ordner aussuchen"-Menu
        dlg = wx.DirDialog(self, "Wähle ein Verzeichniss:",
                          style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON)
        #Wenn der OK Button geklickt wurde
        if dlg.ShowModal() == wx.ID_OK:
            #gewählter Pfad
            directory = dl.GetPath()
            #Dateien aus Ordner auslesen
            arr = os.listdir(directory)
            self.fenster.AppendText(arr)


#Ausgabe
app = wx.PySimpleApp()
frame = MainWindow(None, -1, "MP3 Directory")
app.MainLoop()


ich bekomme allerdings immer diesen fehler und verstehe nicht warum.
Traceback (most recent call last):
File "C:/Mein/Pfade/ordner auslesen.py", line 60, in ?
frame = MainWindow(None, -1, "MP3 Directory")
File "C:/Mein/Pfadeordner auslesen.py", line 13, in __init__
style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE)
File "C:\Programme\Python24\Lib\site-packages\wx-2.6-msw-ansi\wx\_windows.py", line 484, in __init__
newobj = _windows_.new_Frame(*args, **kwargs)
PyNoAppError: The wx.App object must be created first!


habe mich eigentlich an tutorials gehalten und dort ist es eigentlich genauso mit dem wx.App

PS: kann man in dem standard editor, der bei python dabei ist irgendwie die zeilen anzeigenlassen?

Edit (Leonidas): Code in Python-Tags gesetzt.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 22. Oktober 2005, 18:44

jazzdee! hat geschrieben:PS: kann man in dem standard editor, der bei python dabei ist irgendwie die zeilen anzeigenlassen?

Keine Ahnung. Die Empfehlung die du hier am öftesten hörst lautet: einen anderen Editor benutzen, da es mit IDLE ofters mal Hakeleien gibt.

Dein Code hat bei mir eine andere Fehlermeldung gebracht, so was wx.point nicht definiert, weil es stattdessen wx:point heißt und AppendSeperator ist eigentlich AppendSeparator. Bei der Gelegenheit habe ich die ersten zwei Zeilen geändert: Shebang hinzugefügt, Encoding geändert, ID3 auskommentiert (habe ich nicht installiert) und statt festvercodeter IDs welche von wx generieren lassen.

Der funktioniert nun bei mir:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: latin-1 -*-
import wx
#from ID3 import *
import os

#Variablen
ID_EXIT = wx.NewId()
ID_OPEN_DIR = wx.NewId()

class MainWindow(wx.Frame):
    def __init__(self,parent,id,title):
        wx.Frame.__init__(self,parent,wx.ID_ANY, title, size = ( 800,600),
                                     style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE)

        #Statisches Fenster anlegen
        self.feld = wx.StaticText(self,1,style=wx.TE_MULTILINE)

        #Textfeld anlegen (dort werden die Aktionen eingefügt/angezeigt)
        self.fenster = wx.TextCtrl(self,5,"",wx.Point(492,0),wx.Size(300,300),wx.TE_MULTILINE | wx.TE_READONLY)

        #Statusbar anlegen
        self.CreateStatusBar()

        #"Datei"-Menu
        filemenu = wx.Menu()
        filemenu.Append(ID_OPEN_DIR,"&Öffnen","Ordner öffnen")
        filemenu.AppendSeparator()
        filemenu.Append(ID_EXIT,"&Schließen","Programm schließen")

        #Menübar anlegen
        menuBar = wx.MenuBar()
        menuBar.Append(filemenu,"&Datei")
        self.SetMenuBar(menuBar)

        #Event = schließen
        wx.EVT_MENU(self,ID_EXIT,self.OnExit)
        #Event = Ordner öffnen
        wx.EVT_MENU(self,ID_OPEN_DIR,self.OpenDir)

        #Alles anzeigen
        self.Show(True)

    def OnExit(self,e):
        self.Close(True)
    def OpenDir(self,e):
        #"Ordner aussuchen"-Menu
        dlg = wx.DirDialog(self, "Wähle ein Verzeichniss:",
                          style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON)
        #Wenn der OK Button geklickt wurde
        if dlg.ShowModal() == wx.ID_OK:
            #gewählter Pfad
            directory = dl.GetPath()
            #Dateien aus Ordner auslesen
            arr = os.listdir(directory)
            self.fenster.AppendText(arr)


#Ausgabe
app = wx.PySimpleApp()
frame = MainWindow(None, -1, "MP3 Directory")
app.MainLoop()
My god, it's full of CARs! | Leonidasvoice vs Modvoice
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

Beitragvon jazzdee! » Samstag 22. Oktober 2005, 18:51

wie funzt denn der bei dir?
hast unten nen rechtschreibfehler drin

directory = dl.GetPath() muss directory = dlg.GetPath() heißen ;) aber nun funzt es bei mir auch.

zum editor:
kannst du mir da einen empfehlen?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 22. Oktober 2005, 19:25

jazzdee! hat geschrieben:wie funzt denn der bei dir?
hast unten nen rechtschreibfehler drin

directory = dl.GetPath() muss directory = dlg.GetPath() heißen ;) aber nun funzt es bei mir auch.

ja, soweit habe ich ihn nicht getestet ;) Gestartet: läuft. Ok!

jazzdee! hat geschrieben:zum editor:
kannst du mir da einen empfehlen?

SciTE, siehe SciTEIntegration.

Oder du nutzt (g)Vim, aber den mögen nicht alle, da er doch ein wenig gewöhnungsbedürftig ist.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: Dembrix, Tim_12