Advertisement
Guest User

moverTK.py

a guest
Feb 3rd, 2014
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.22 KB | None | 0 0
  1. # -*- coding: UTF-8 -*-
  2. '''moverTk.py - files autosorter script with tkinter GUI
  3. - Moves EVERY file in dir with corresponding file's type name except files,
  4.    listed in ex() and files with no extensions
  5. '''
  6. __version__ = "1.0.2r"
  7. __date__ = "26.09.2013"
  8. _news_ ='''\
  9. NEW: +Further optimization
  10. NEW: stdout into Text widget
  11. '''
  12.  
  13. import os
  14. import sys
  15. import locale
  16. import codecs
  17. from shutil import move
  18. from tkinter import *
  19. from tkinter import ttk
  20.  
  21. # print('* sys.stdout.encoding: %s *' % sys.stdout.encoding)
  22. # sys.stdout = sys.stdout.detach()
  23. # sys.stdout = codecs.getwriter('cp866')(sys.stdout, errors='replace')
  24. # print("Something... Что то здесь не так")
  25. # sys.stdout = codecs.getwriter('utf-8')(sys.stdout, errors='replace')
  26.  
  27. root = Tk()
  28.  
  29. ex = ("py", "pyc", "pyw", "ini", "ico", "bat", "exe", "lnk", "DMF",
  30.       "DFMr", "download", "sys")
  31. exvar = StringVar(value=ex)
  32. wlvar = StringVar()
  33. count = 0
  34.  
  35.  
  36. class StdoutRedirector(object):
  37.  
  38.     def __init__(self, text_area):
  39.         self.text_area = text_area
  40.  
  41.     def write(self, str):
  42.         self.text_area.insert(END, str)
  43.         self.text_area.see(END)
  44.  
  45.  
  46. def info():
  47.     print(
  48.         '* sys.getdefaultencoding(): %s *' % sys.getdefaultencoding(),
  49.         '* locale.getpreferredencoding(): %s *' % locale.getpreferredencoding(), sep='\n'
  50.     )
  51.     # print(sys.getdefaultencoding(),locale.getpreferredencoding(), sep='\n')
  52.  
  53.  
  54. def fetch(path=''):
  55.     count = 0
  56.     wl = []
  57.     global wlvar
  58.     print('-' * 32)
  59.     if path:
  60.         print("Directory to sort:", path[0])
  61.     else:
  62.         path = os.getcwd()
  63.         print("Directory to sort:", path)
  64.     # detecting and checking files in  directory:
  65.     fl = [e for e in os.listdir(path)
  66.           if os.path.isfile(e) and not e.endswith(ex)]
  67.     for p in fl:
  68.         if p.rfind('.') != -1:
  69.             wl.append(p)
  70.             count += 1
  71.         elif p.rfind('.') == -1:
  72.             print('no extension:', p)
  73.             pass
  74.         else:
  75.             print('unknown error with', p)
  76.             pass
  77.     if wl:
  78.         print('white list:', wl)
  79.     else:
  80.         print('white list: empty!')
  81. # wlvar = StringVar(value=tuple(wl))
  82. # print(wlvar.get())
  83.     return wl, count, wlvar.set(value=tuple(wl))
  84.  
  85.  
  86. def moveit():  # теперь moveit двигает файлы из списка
  87.     wlist, count, void = fetch()
  88.     print(wlist, count, sep='\n')
  89.     moved = 0  # не проверяя их
  90.     t = ''  # t стала локальной
  91.     for x in wlist:
  92.         t = x[x.rfind('.') + 1:]
  93.         print('\'.%s\' file detected' % t)
  94.         # create dir with file-type name:
  95.         try:
  96.             os.mkdir(".\\%s\\" % t)
  97.         except OSError:
  98.             pass
  99.         # moving files into created directory
  100.         if not os.path.exists(".\\%s\\%s" % (t, x)):
  101.         # если файла в директории нет, то перемещаем текущий файл
  102.             move(x, ".\\%s\\" % t)
  103.             moved += 1
  104.             print('\'%s\' moved into \'%s\'' % (x, t))
  105.         else:
  106.             print('skipped: \'%s\' already exists in \'%s\'' % (x, t))
  107.     if count:
  108.         print('-' * 32)
  109.         print('%d of %d files processed' % (moved, count))
  110.     else:
  111.         print("nothing to move! :'<")
  112.  
  113. w = ttk.Frame(root)
  114. w.grid(column=0, row=0, sticky=(N, W, E, S))
  115. root.grid_columnconfigure(0, weight=1)
  116. root.grid_rowconfigure(0, weight=1)
  117. w.grid_columnconfigure(0, weight=1)
  118. w.grid_rowconfigure(0, weight=1)
  119.  
  120. lBel = ttk.Label(w, text='Exceptions:')
  121. lWel = ttk.Label(w, text='Files to sort:')
  122. bQuit = ttk.Button(w, text='Quit', command=lambda: root.quit())
  123. bSort = ttk.Button(w, text='Sort', command=moveit)
  124. bInfo = ttk.Button(w, text='Info', command=info)
  125. lBlist = Listbox(w, listvariable=exvar, activestyle=NONE, height=16,
  126.                  width=10)
  127. sBlist = ttk.Scrollbar(w, orient=VERTICAL, command=lBlist.yview)
  128. lBlist['yscrollcommand'] = sBlist.set
  129. lWlist = Listbox(w, listvariable=wlvar, activestyle=NONE,
  130.                  height=16, width=42)
  131. sWlist = ttk.Scrollbar(w, orient=VERTICAL, command=lWlist.yview)
  132. lWlist['yscrollcommand'] = sWlist.set
  133.  
  134. tOut = Text(w, width=20, height=8)
  135. sOut = ttk.Scrollbar(w, orient=VERTICAL, command=tOut.yview)
  136. tOut['yscrollcommand'] = sOut.set
  137.  
  138. lBel.grid(column=0, row=0, sticky=(N, S, W, E), columnspan=2)
  139. lWel.grid(column=2, row=0, sticky=(N, S, W, E), columnspan=2)
  140. lBlist.grid(column=0, row=1, sticky=(N, S, W, E), columnspan=2)
  141. lWlist.grid(column=2, row=1, sticky=(N, S, W, E), columnspan=2)
  142. sBlist.grid(column=1, row=1, sticky=(N, S, E))
  143. sWlist.grid(column=3, row=1, sticky=(N, S, E))
  144. bQuit.grid(column=0, row=2, sticky=SE)
  145. bSort.grid(column=1, row=2, sticky=SW)
  146. bInfo.grid(column=2, row=2, sticky=SW)
  147. tOut.grid(column=0, row=3, sticky=(N, S, W, E), columnspan=4)
  148. sOut.grid(column=4, row=3, sticky=(N, S, E))
  149. root.bind('<Escape>', lambda e: root.quit())
  150.  
  151. sys.stdout = StdoutRedirector(tOut)
  152. fetch()
  153.  
  154. if __name__ == "__main__":
  155.     print('''Auto files sorter Tk v%s by crad, %s
  156. I like to move it move it! :D
  157. %s''' % (__version__, __date__, _news_))
  158.     print('black list:', ex)
  159.     w.master.title("Mover-Tk v%s" % __version__)
  160.     w.master.minsize(125, 25)
  161.     root.mainloop()
  162.     root.destroy()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement