Hier das schlecht geschriebene Modul:
Code: Alles auswählen
import os
import os.path
import filecmp
allfiles = {}
doublefiles = []
def scandirectory(path):
for root,dirs,files in os.walk(path):
for file in files:
if os.path.splitext(file)[1] not in allfiles.keys():
allfiles[os.path.splitext(file)[1]] = []
allfiles[os.path.splitext(file)[1]].append([os.path.getsize(os.path.join(root, file)), os.path.join(root, file)])
def finddoublefiles():
run_again = False
for filetype in allfiles:
for file in allfiles[filetype]:
to_check_file = file
for i in range(len(allfiles[filetype])):
file = allfiles[filetype][i]
if not to_check_file == file and to_check_file[0] == file[0]:
if filecmp.cmp(to_check_file[1], file[1]):
doublefiles.append(file[1])
allfiles[filetype].remove(file)
run_again = True
break
if run_again:
break
if run_again:
break
if run_again:
finddoublefiles()
def deletedoublefiles():
for file in doublefiles:
os.remove(file)
def resetfilelist():
global allfiles, doublefiles
allfiles = {}
doublefiles = []
Code: Alles auswählen
import tkinter
import tkinter.filedialog as filedialog
import tkinter.messagebox as messagebox
import memorymaker
import os
window = tkinter.Tk()
window.title('Memory Maker')
tkinter.Label(window, text='Startus:').grid(row=0, column=0, sticky='e')
startuslabel = tkinter.Label(window, text='Keine Aktionen verbleibend', width=50, fg='black', bg='#00ffff', font=('bold'))
startuslabel.grid(row=0, column=1, sticky='w')
infolabel = tkinter.Label(window, text='Alles OK', width=50, fg='black', bg='green', font=('bold'))
infolabel.grid(row=0, column=1, sticky='e')
tkinter.Label(window, text='Info:').grid(row=0, column=1)
doublefile_listbox = tkinter.Listbox(window, width=157, height=47)
doublefile_listbox.grid(row=1, column=1)
scrollbar = tkinter.Scrollbar(window)
scrollbar.grid(row=1, column=2, sticky='S'+'N')
doublefile_listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=doublefile_listbox.yview)
def appendpath():
path = filedialog.askdirectory()
if path != '':
startuslabel.config(text='Verzeichnis wird gescannt.')
window.update_idletasks()
memorymaker.scandirectory(path)
startuslabel.config(text='Keine Aktionen verbleibend')
infolabel.config(text='Es wurde noch nicht nach Doppelten Dateien Gesucht.', bg='#ffff00')
def finddoublefiles():
startuslabel.config(text='Suche nach Doppelten Dateien.')
window.update_idletasks()
memorymaker.doublefiles = [] #notwendig um die listbox nicht löschen zu müssen.
try:
memorymaker.finddoublefiles()
for path in memorymaker.doublefiles:
doublefile_listbox.insert('end', path)
except IOError:
infolabel.config(text='Datei Zugriffs Fehler', bg='#ff0000')
else:
startuslabel.config(text='Keine Aktionen verbleibend')
infolabel.config(text='Alles OK', bg='#00ff00')
def resetall():
if messagebox.askyesno('Memory Maker', 'Alle Datei-Informationen gehen verlorren!'):
memorymaker.resetfilelist()
doublefile_listbox.delete(0, 'end')
def deletedoublefiles():
if messagebox.askyesno('Memory Maker', 'Dateien wirklich löschen?'):
try:
for path in doublefile_listbox.get(0, 'end'):
os.remove(path)
except:
infolabel.config(text='Datei Zugriffs Fehler', bg='#ff0000')
else:
doublefile_listbox.delete(0, 'end')
def clearmessagelabel():
infolabel.config(text='Alles OK', bg='#00ff00')
tkinter.Button(window, text='Entfernen',
command=lambda doublefile_listbox=doublefile_listbox: \
doublefile_listbox.delete(tkinter.ANCHOR)).grid(row=1, column=0, sticky='s'+'n'+'e'+'w')
menubar = tkinter.Menu(window)
filemenu = tkinter.Menu(menubar)
filemenu.add_command(label='Verzeichnis Scannen', command=appendpath)
filemenu.add_command(label='Doppelte Dateien Suchen', command=finddoublefiles)
filemenu.add_separator()
filemenu.add_command(label='Zurücksetzen', command=resetall)
filemenu.add_separator()
filemenu.add_command(label='Doppelte Dateien Löschen', command=deletedoublefiles)
filemenu.add_separator()
filemenu.add_command(label='Beenden', command=window.destroy)
menubar.add_cascade(label='Datei', menu=filemenu)
menubar.add_command(label='Nachricht gelessen', command=clearmessagelabel)
window.config(menu=menubar)
tkinter.mainloop()