Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: UTF-8 -*-
- '''moverTk.py - files autosorter script with tkinter GUI
- - Moves EVERY file in dir with corresponding file's type name except files,
- listed in ex() and files with no extensions
- '''
- __version__ = "1.0.2r"
- __date__ = "26.09.2013"
- _news_ ='''\
- NEW: +Further optimization
- NEW: stdout into Text widget
- '''
- import os
- import sys
- import locale
- import codecs
- from shutil import move
- from tkinter import *
- from tkinter import ttk
- # print('* sys.stdout.encoding: %s *' % sys.stdout.encoding)
- # sys.stdout = sys.stdout.detach()
- # sys.stdout = codecs.getwriter('cp866')(sys.stdout, errors='replace')
- # print("Something... Что то здесь не так")
- # sys.stdout = codecs.getwriter('utf-8')(sys.stdout, errors='replace')
- root = Tk()
- ex = ("py", "pyc", "pyw", "ini", "ico", "bat", "exe", "lnk", "DMF",
- "DFMr", "download", "sys")
- exvar = StringVar(value=ex)
- wlvar = StringVar()
- count = 0
- class StdoutRedirector(object):
- def __init__(self, text_area):
- self.text_area = text_area
- def write(self, str):
- self.text_area.insert(END, str)
- self.text_area.see(END)
- def info():
- print(
- '* sys.getdefaultencoding(): %s *' % sys.getdefaultencoding(),
- '* locale.getpreferredencoding(): %s *' % locale.getpreferredencoding(), sep='\n'
- )
- # print(sys.getdefaultencoding(),locale.getpreferredencoding(), sep='\n')
- def fetch(path=''):
- count = 0
- wl = []
- global wlvar
- print('-' * 32)
- if path:
- print("Directory to sort:", path[0])
- else:
- path = os.getcwd()
- print("Directory to sort:", path)
- # detecting and checking files in directory:
- fl = [e for e in os.listdir(path)
- if os.path.isfile(e) and not e.endswith(ex)]
- for p in fl:
- if p.rfind('.') != -1:
- wl.append(p)
- count += 1
- elif p.rfind('.') == -1:
- print('no extension:', p)
- pass
- else:
- print('unknown error with', p)
- pass
- if wl:
- print('white list:', wl)
- else:
- print('white list: empty!')
- # wlvar = StringVar(value=tuple(wl))
- # print(wlvar.get())
- return wl, count, wlvar.set(value=tuple(wl))
- def moveit(): # теперь moveit двигает файлы из списка
- wlist, count, void = fetch()
- print(wlist, count, sep='\n')
- moved = 0 # не проверяя их
- t = '' # t стала локальной
- for x in wlist:
- t = x[x.rfind('.') + 1:]
- print('\'.%s\' file detected' % t)
- # create dir with file-type name:
- try:
- os.mkdir(".\\%s\\" % t)
- except OSError:
- pass
- # moving files into created directory
- if not os.path.exists(".\\%s\\%s" % (t, x)):
- # если файла в директории нет, то перемещаем текущий файл
- move(x, ".\\%s\\" % t)
- moved += 1
- print('\'%s\' moved into \'%s\'' % (x, t))
- else:
- print('skipped: \'%s\' already exists in \'%s\'' % (x, t))
- if count:
- print('-' * 32)
- print('%d of %d files processed' % (moved, count))
- else:
- print("nothing to move! :'<")
- w = ttk.Frame(root)
- w.grid(column=0, row=0, sticky=(N, W, E, S))
- root.grid_columnconfigure(0, weight=1)
- root.grid_rowconfigure(0, weight=1)
- w.grid_columnconfigure(0, weight=1)
- w.grid_rowconfigure(0, weight=1)
- lBel = ttk.Label(w, text='Exceptions:')
- lWel = ttk.Label(w, text='Files to sort:')
- bQuit = ttk.Button(w, text='Quit', command=lambda: root.quit())
- bSort = ttk.Button(w, text='Sort', command=moveit)
- bInfo = ttk.Button(w, text='Info', command=info)
- lBlist = Listbox(w, listvariable=exvar, activestyle=NONE, height=16,
- width=10)
- sBlist = ttk.Scrollbar(w, orient=VERTICAL, command=lBlist.yview)
- lBlist['yscrollcommand'] = sBlist.set
- lWlist = Listbox(w, listvariable=wlvar, activestyle=NONE,
- height=16, width=42)
- sWlist = ttk.Scrollbar(w, orient=VERTICAL, command=lWlist.yview)
- lWlist['yscrollcommand'] = sWlist.set
- tOut = Text(w, width=20, height=8)
- sOut = ttk.Scrollbar(w, orient=VERTICAL, command=tOut.yview)
- tOut['yscrollcommand'] = sOut.set
- lBel.grid(column=0, row=0, sticky=(N, S, W, E), columnspan=2)
- lWel.grid(column=2, row=0, sticky=(N, S, W, E), columnspan=2)
- lBlist.grid(column=0, row=1, sticky=(N, S, W, E), columnspan=2)
- lWlist.grid(column=2, row=1, sticky=(N, S, W, E), columnspan=2)
- sBlist.grid(column=1, row=1, sticky=(N, S, E))
- sWlist.grid(column=3, row=1, sticky=(N, S, E))
- bQuit.grid(column=0, row=2, sticky=SE)
- bSort.grid(column=1, row=2, sticky=SW)
- bInfo.grid(column=2, row=2, sticky=SW)
- tOut.grid(column=0, row=3, sticky=(N, S, W, E), columnspan=4)
- sOut.grid(column=4, row=3, sticky=(N, S, E))
- root.bind('<Escape>', lambda e: root.quit())
- sys.stdout = StdoutRedirector(tOut)
- fetch()
- if __name__ == "__main__":
- print('''Auto files sorter Tk v%s by crad, %s
- I like to move it move it! :D
- %s''' % (__version__, __date__, _news_))
- print('black list:', ex)
- w.master.title("Mover-Tk v%s" % __version__)
- w.master.minsize(125, 25)
- root.mainloop()
- root.destroy()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement