Hallo alle zusammen.
Ich hab ein kleines Problem, ich hab ein Programm geschrieben das
Ordner (mit Unterordner) ausliest und die darin enthaltenen Dateien nach
der Endung sortiert und in neue Ordner verschiebt (zbsp alle
verschiedenen Movies in den Ordner Movie).
Jetzt will ich im zweiten Schritt dem Programm mit Tkinter eine
Benutzeroberfläche aufsetzten. Habe da auch schon angefangen mit
einem Start und beenden Button.
Und jetzt will ich ein Ausgabefenster mit intergrieren, das mir anzeigt auf
der einen seite den ordner der ausgelesen wird und auf der anderen seite
die ordner wo die files hingeschoben werden ( so eine art Explorer).
Kann mir da jemand helfen?
Danke für die Aufmerksamkeit
Gerd
Ausgabefenster mit Tkinter
Hi
Ist ein wenig lang, könnte man sicher noch vieles vereinfachen.
Ist ein wenig lang, könnte man sicher noch vieles vereinfachen.
Code: Alles auswählen
import os, sys, string, shutil
from __builtin__ import file
from Tkinter import *
from tkFileDialog import *
count = 0
def lesen(weg, h1, h2, h3, h4, h5, h6, h7):
# liest den Paht rekursiv aus(count ist stopper fals zu viele Unterordner)
global count
count = count + 1
if count <=1:
p = os.listdir(weg)
checklist(p, weg, h1, h2, h3, h4, h5, h6, h7)
count = count -1
else:
print "weiter nicht\n"
def checklist(p, weg, h1, h2, h3, h4, h5, h6, h7):
#überprüft ob datei oder verzeichnis, splittet datei name auf
for i in p:
i = i.strip()
print i
if os.path.isdir(weg+ "\\" +i):
print "ist dir"
lesen(weg+ "\\" +i, h1, h2, h3, h4, h5, h6, h7)
else:
print "ist datei"
s = string.split(i, '.')
t = s[-1]
erkenn(t, i, weg, h1, h2, h3, h4, h5, h6, h7)
def erkenn(t, i, weg, h1, h2, h3, h4, h5, h6, h7):
#überprüft ob Datei schon im neuen Verzeichnis existiert
g = (weg+ "\\" +i)
u1 = (h1+ "\\" +i)
u2 = (h2+ "\\" +i)
u3 = (h3+ "\\" +i)
u4 = (h4+ "\\" +i)
u5 = (h5+ "\\" +i)
u6 = (h6+ "\\" +i)
u7 = (h7+ "\\" +i)
if os.path.exists(u1):
print "File existiert bereits"
dr = i
drin(dr)
elif os.path.exists(u2):
print "File existiert bereits"
dr = i
drin(dr)
elif os.path.exists(u3):
print "File existiert bereits"
dr = i
drin(dr)
elif os.path.exists(u4):
print "File existiert bereits"
dr = i
drin(dr)
elif os.path.exists(u5):
print "File existiert bereits"
dr = i
drin(dr)
elif os.path.exists(u6):
print "File existiert bereits"
dr = i
drin(dr)
elif os.path.exists(u7):
print "File existiert bereits"
dr = i
drin(dr)
else:
schieb(g,t,i,weg,u1,u2,u3,u4,u5,u6,u7)
def drin(dr): #bricht ab und kehrt zu lesen zurück
del dr
def schieb(g, t, i, weg, u1, u2, u3, u4, u5, u6, u7):
#ordnet anhand der endung
Bilder=['bmp','gif','GIF','jpeg','JPEG','JPG','jpe','JPE','jpg', 'paint',\
'psp','PSP','giff','cvs']
Text=['txt','doc','tif', 'tiff', 'pdf','rtf','cad',\
'dcd','fm','ftp','lwd','msw','wks','csv']
Prog=['py', 'pyc', 'exe','dll','cab','asp','zip','tgz','bat','inf','com','dcr']
Flash=['fla','swf','jcd','rf','jc', 'sbl','jc!']
Mov=['asf','mpg','mpeg','avi','divx','mov','mp','mpe','mmm','mmp',\
'mp','mvi','ptv','qtvr','pt','qtm','swf','awa','awm','mswmm','tgp','swi',\
'cmr','dir','dxr','scm','spl','xmz']
audio=['mp3','MP3','aif','cda','msv','nra','ra','ram','wav','bun','esf','gsd',\
'hit','la','lam','lma','m1a','mus','ra','ram','rm','rmm','rnx']
html=['htm','html','HTM','HTML','xml','XML','dhtml', 'xhtml']
if t in Text:
os.rename(g, u1)
print "fertig\n"
elif t in Prog:
os.rename(g, u2)
print "fertig\n"
elif t in Bilder:
os.rename(g, u3)
print "fertig\n"
elif t in Flash:
os.rename(g, u4)
print "fertig\n"
elif t in Mov:
os.rename(g, u5)
print "fertig\n"
elif t in html:
os.rename(g,u6)
print "fertig\n"
elif t in audio:
os.rename(g,u7)
print "fertig\n"
else:
print "Konnte nicht zugeordnet werden"
def main(): #weg abfrage
weg = (r'H:\Python\Probe\naja')
#raw_input('Path eingabe:')
h1 =(r'H:\Python\Probe\ausgabe\Text')
#raw_input('Speicherort fuer\n Textdateien:')
if not os.path.isdir(h1):
os.mkdir(h1 )
h2 =(r'H:\Python\Probe\ausgabe\Prog')
#raw_input('Speichertort\n für Programme:')
if not os.path.isdir(h2):
os.mkdir(h2 )
h3 =(r'H:\Python\Probe\ausgabe\bilder')
#raw_input('Speichertort\n für Bilder:')
if not os.path.isdir(h3):
os.mkdir(h3 )
h4 =(r'H:\Python\Probe\ausgabe\fla')
#raw_input('Speichertort\n für flash:')
if not os.path.isdir(h4):
os.mkdir(h4 )
h5 =(r'H:\Python\Probe\ausgabe\movie')
#raw_input('Speichertort\n für movies:')
if not os.path.isdir(h5):
os.mkdir(h5 )
h6 =(r'H:\Python\Probe\ausgabe\html')
#raw_input('Speicherort\n für Internetseiten:')
if not os.path.isdir(h6):
os.mkdir(h6 )
h7 =(r'H:\Python\Probe\ausgabe\audio')
#raw_input('Speicherort\n für audiodateien:')
if not os.path.isdir(h7):
os.mkdir(h7 )
lesen(weg, h1, h2, h3, h4, h5, h6, h7)
def later():
print 'noch in arbeit'
def oeffnen():
answer = askopenfilename()
print answer #noch in arbeit
def speichern():
ans = asksaveasfilename()
print ans #noch in arbeit
#Hauptprogramm
root = Tk()
menu=Menu(root)
root.config(menu=menu)
filemenu=Menu(menu)
menu.add_cascade(label='File', menu=filemenu)
filemenu.add_command(label='Öffnen', command=oeffnen)
filemenu.add_command(label='Speichern', command=speichern)
filemenu.add_separator()
filemenu.add_command(label='Beenden', command=root.destroy)
helpmenu=Menu(menu)
menu.add_cascade(label="Hilfe", menu=helpmenu)
helpmenu.add_command(label='About', command=later)
toolbar = Frame(root)
Box = toolbar
Box.pack(side=BOTTOM)
# die eigentliche Listbox
fenster = Listbox(Box, width=30, bg = "black", fg = "green", selectmode=SINGLE)
fenster.pack(side=TOP)
b = Button(toolbar,text="start", width=8, command=main)
b.pack(side=LEFT,padx=2,pady=2)
b = Button(toolbar,text="Beenden", width=8, command=root.destroy)
b.pack(side=LEFT,padx=2,pady=2)
toolbar.pack(side=TOP)
mainloop()
Hallo!
Eine einfache Möglichkeit wäre ein Feld mit den Daten Der Dateitypen:
Deine Funktion schieb() sähe dann nur noch so aus:
Eine andere Möglichkeit wäre, den Dateityp durch eine Klasse zu repräsentieren und dann mit einer Liste von Instanzen dieser Klasse zu arbeiten.
hth, auch wenn ich das Thema verfehlt habe
Jan
Und das solltest Du auf jeden Fall machen, bevor Du das GUI in Angriff nimmst. Sonst wirst Du noch an einigen Stellen diese if-elif-Kaskaden vorsehen müssen - je mehr Funktionalität die Oberfläche bekommt (z.B. die Änderung der Zielpfade), desto häufiger.Gerd hat geschrieben:Ist ein wenig lang, könnte man sicher noch vieles vereinfachen.
Eine einfache Möglichkeit wäre ein Feld mit den Daten Der Dateitypen:
Code: Alles auswählen
listTypDaten = (
['Bilder', 'H:\\Python\\Probe\\ausgabe\\bilder', ('bmp','gif','jpg')],
['Audio', 'H:\\Python\\Probe\\ausgabe\\audio', ('mp3','MP3','cda','msv','nra')]
# und so weiter
)
Code: Alles auswählen
def schieb(g, t, typDaten):
for typ in typDaten:
if t in typ[2]:
os.rename(g,typ[1])
print "fertig"
break
else:
print "Konnte nicht zugeordnet werden"
hth, auch wenn ich das Thema verfehlt habe
Jan
Hi Voges
Danke erst einmal für die Verbesserung.
Hab das auch gleich umgebaut, funktioniert nicht in der weise das er das
Feld zwar überprüft, aber mir immer sagt das er die datei nicht zuordnen kann.
Was mach ich falsch? Hoffe du kannst mir helfen.
Hier mein neuer umgebauter code teil, habe dafür erkenn()
rausgenommen und main() kleiner gemacht.
Danke für die Aufmerksamkeit
Gerd
Danke erst einmal für die Verbesserung.
Hab das auch gleich umgebaut, funktioniert nicht in der weise das er das
Feld zwar überprüft, aber mir immer sagt das er die datei nicht zuordnen kann.
Was mach ich falsch? Hoffe du kannst mir helfen.
Hier mein neuer umgebauter code teil, habe dafür erkenn()
rausgenommen und main() kleiner gemacht.
Code: Alles auswählen
def schieb(weg, t, i, listTypDaten):
g = (weg+ "\\" +i)
for typ in listTypDaten:
if t in typ[2] and not os.path.isdir(typ[1]):
os.mkdir(typ[1])
u = (typ[1]+ "\\" +i)
if os.path.exists(u):
print "File existiert bereits"
dr = i
drin(dr)
else:
os.rename(g, typ[1])
print "fertig"
break
else:
print "Konnte nicht zugeordnet werden"
Gerd
Hallo!
Das and not os.path.isdir(typ[1]) verhindert, dass Bilder verschoben werden, wenn das 'Bilder'-Verzeichnis existiert. D.h. wenn der Ordner anfänglich nicht existiert, ist die if-Bedinung nur für das erste gefundene Bild wahr. Dem mkdir() musst Du also ein eigenes if spendieren.
Die runden Klammern bei g = und u = sind nicht schädlich, aber überflüssig.
Jan
Nachtrag: Das break müsste noch um eine Einrückung nach links.
Das and not os.path.isdir(typ[1]) verhindert, dass Bilder verschoben werden, wenn das 'Bilder'-Verzeichnis existiert. D.h. wenn der Ordner anfänglich nicht existiert, ist die if-Bedinung nur für das erste gefundene Bild wahr. Dem mkdir() musst Du also ein eigenes if spendieren.
Die runden Klammern bei g = und u = sind nicht schädlich, aber überflüssig.
Jan
Nachtrag: Das break müsste noch um eine Einrückung nach links.
Hallo Voges
ich bin am ende mit meinen nerven habe das jetzt so gebastelt.
Und als fehlermeldung bekomme ich
File "H:\Python\Probe\Fileparser\oberfläche\2.1\filepars_2_1.py",
line 50, in schieb
os.rename(g, typ[1])
OSError: [Errno 17] File exists
hoffe du kannst mir weiter helfen
So long
gerd
ich bin am ende mit meinen nerven habe das jetzt so gebastelt.
Code: Alles auswählen
def checklist(p, weg):
listTypDaten = (['Bilder',...
...)
for i in p:
i = i.strip()
print i
if os.path.isdir(weg+ "\\" +i):
print "ist dir"
lesen(weg+ "\\" +i)
else:
print "ist datei"
t = i
schieb(weg, t, i, listTypDaten)
def drin(dr): #bricht ab und kehrt zu lesen zurück
del dr
def schieb(weg, t, i, listTypDaten):
g = weg+ '\\' +i
t = string.split(t,'.')
t = t[-1]
for typ in listTypDaten:
if t in typ[2]:
u = typ[1]+ '\\' +i
print u
if not os.path.isdir(typ[1]):
os.mkdir(typ[1])
if not os.path.exists(u):
os.rename(g, typ[1])
print fertig
else:
dr = i
drin(dr)
break
else:
print "Konnte nicht zugeordnet werden"
File "H:\Python\Probe\Fileparser\oberfläche\2.1\filepars_2_1.py",
line 50, in schieb
os.rename(g, typ[1])
OSError: [Errno 17] File exists
hoffe du kannst mir weiter helfen
So long
gerd
Cool bleiben!Gerd hat geschrieben:ich bin am ende mit meinen nerven
Ich muss sagen, dass ich mit os.rename() noch nie gearbeitet habe.
Also, beim 2. Parameter reicht es nicht, den Pfad anzugeben, sondern es muss auch noch der Dateiname dabei sein. (Vom Begriff 'rename' ist das eigentlich auch naheliegend.)
os.rename(g,u) müsste also bei Dir funktionieren.
Jan
PS: Ich weiß, ich bin altmodisch, aber "Kleinschreiber"-Texte lese (und beantworte) ich nicht so gerne
Hallo Voges
Jo vielen dank jetzt funktioniert es.
So jetzt kann ich mich ja langsam wieder der Benutzeroberfläche
widmen.
Also bis später.
Gerd
PS. Sorry wegen der Kleinschreibung, hab ich in der Aufregung nicht berücksichtigt.
Jo vielen dank jetzt funktioniert es.
So jetzt kann ich mich ja langsam wieder der Benutzeroberfläche
widmen.
Also bis später.
Gerd
PS. Sorry wegen der Kleinschreibung, hab ich in der Aufregung nicht berücksichtigt.