-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrenamer.py
46 lines (41 loc) · 1.92 KB
/
renamer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import re
import os
from gui import GUI
class Renamer():
def __init__(self, files, ui):
self.ui = ui
self.files = files
self.matches = self.replaced = []
self.delimiters = ("$MATCH$", "$END$")
self.searchterm = self.replaceterm = ''
self.searchregex = self.replaceregex = None
def confirm(self):
files = []
for pair in self.replaced:
original = pair[0]
newname = pair[1].replace(self.delimiters[0], '').replace(self.delimiters[1], '')
os.rename(original, newname)
files.append(newname)
self.files = files
self.replaceregex = ''
self.searchregex = re.compile('')
self.matches = [m for f in self.files for m in [self.searchregex.finditer(f)] if m]
self.replaced = [(f, self.searchregex.sub(self.replaceregex, f)) for f in self.files if self.searchregex.search(f)]
self.ui.search(self.searchterm, self.matches)
self.ui.replace(self.replaceterm, self.delimiters, self.replaced)
def on_search_change(self, widget, search):
self.searchterm = search
try:
self.searchregex = re.compile(search)
except re.error: return
self.matches = [m for f in self.files for m in [self.searchregex.finditer(f)] if m]
self.ui.search(search, self.matches)
def on_replace_change(self, widget, replacement):
self.replaceterm = replacement
try:
self.replaceregex = "{}{}{}".format(self.delimiters[0]
, bytes(replacement, 'utf-8').decode('unicode_escape')
, self.delimiters[1])
self.replaced = [(f, self.searchregex.sub(self.replaceregex, f)) for f in self.files if self.searchregex.search(f)]
self.ui.replace(replacement, self.delimiters, self.replaced)
except (re.error, UnicodeDecodeError): return