Posts: 3
Threads: 1
Joined: May 2026
Hello Everyone.
Years ago, in Xunbuntu,
I used to use the original pyRenamer,
to rename my photos off my camera,
with this date time format,
which makes the files list in correct chronological order:
YYYY MMDD HHmm ss
Then as Xubuntu and Python evolved,
pyRenamer ceased working, and I was lost,
then, I found KRename,
with which I can do the same thing.
https://userbase.kde.org/KRename
Recently, from being a complete beginner,
I have began to learn Python,
which is quite exciting for me.
So, then, with renewed interest in Python,
I remembered pyRenamer,
which I have been able to find on github,
in partially updated working version, here:
https://github.com/TheTimeTombs/pyRenamer
I have been able to download it and run it,
with some syntax warnings and gtk errors.
Please can I encourage and inspire you all,
to please revisit and renew pyRenamer,
so that it works well for now and for the future,
and is available for everyone, please ?
When I was using pyRenamer,
I always felt it was a phenomenally important software.
RSVP.
Best wishes, Micheal Jenkins.
Hollingbury. Brighton. UK.
Posts: 2,192
Threads: 12
Joined: May 2017
Here a "patch":
diff --git a/pyrenamer/pyrenamer.py b/pyrenamer/pyrenamer.py
index c383612..50d8af0 100755
--- a/pyrenamer/pyrenamer.py
+++ b/pyrenamer/pyrenamer.py
@@ -171,6 +171,7 @@ class pyRenamer:
# Get defined signals
signals = {
+ "on_view1_activate": self.on_view1_activate,
"on_main_window_destroy": self.on_main_quit,
"on_main_window_window_state_event": self.on_main_window_window_state_event,
"on_main_window_configure_event": self.on_main_window_configure_event,
@@ -300,20 +301,20 @@ class pyRenamer:
self.builder.get_object("subs_capitalization_combo").set_active(0)
# # Init some menu items
- self.builder.get_object("menu_rename").set_sensitive(False)
- self.builder.get_object("menu_clear_preview").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("menu_clear_preview").set_sensitive(False)
# # Init delete radio buttons
- self.builder.get_object("delete_from").set_sensitive(False)
- self.builder.get_object("delete_to").set_sensitive(False)
+ # self.builder.get_object("delete_from").set_sensitive(False)
+ # self.builder.get_object("delete_to").set_sensitive(False)
# # Init pattern comboboxes
self.populate_pattern_combos()
# # Init the undo/redo manager
self.undo_manager = undo.Undo()
- self.builder.get_object("menu_undo").set_sensitive(False)
- self.builder.get_object("menu_redo").set_sensitive(False)
+ # self.builder.get_object("menu_undo").set_sensitive(False)
+ # self.builder.get_object("menu_redo").set_sensitive(False)
def create_selected_files_treeview(self):
"""Create the TreeView and the ScrolledWindow for the selected
@@ -553,6 +554,10 @@ class pyRenamer:
# ---------------------------------------------------------------------------------------
# Callbacks
+ def on_view1_activate(self, widget):
+ """I don't know for what this is..."""
+ print(widget)
+
def on_selected_files_cursor_changed(self, treeview):
"""Clicked a file"""
@@ -618,11 +623,11 @@ class pyRenamer:
self.file_selected_model.foreach(self.preview_rename_rows, paths)
self.selected_files.columns_autosize()
- self.builder.get_object("clear_button").set_sensitive(True)
- self.builder.get_object("menu_clear_preview").set_sensitive(True)
- self.builder.get_object("rename_button").set_sensitive(True)
- self.builder.get_object("menu_rename").set_sensitive(True)
- self.file_selected_model.foreach(self.enable_rename_and_clean)
+ # self.builder.get_object("clear_button").set_sensitive(True)
+ # self.builder.get_object("menu_clear_preview").set_sensitive(True)
+ # self.builder.get_object("rename_button").set_sensitive(True)
+ # self.builder.get_object("menu_rename").set_sensitive(True)
+ # self.file_selected_model.foreach(self.enable_rename_and_clean)
def on_clean_button_clicked(self, widget):
"""Clean the previewed filenames"""
@@ -721,15 +726,15 @@ class pyRenamer:
def on_subs_spaces_combo_changed(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_subs_capitalization_combo_changed(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
diff --git a/pyrenamer/tools/filetools.py b/pyrenamer/tools/filetools.py
index 9d2d8dc..6aa815f 100644
--- a/pyrenamer/tools/filetools.py
+++ b/pyrenamer/tools/filetools.py
@@ -259,17 +259,17 @@ def rename_using_patterns(name, path, pattern_ini, pattern_end, count, ext=""):
pattern = pattern_ini
newname = pattern_end
- pattern = pattern.replace(".", "\.")
- pattern = pattern.replace("[", "\[")
- pattern = pattern.replace("]", "\]")
- pattern = pattern.replace("(", "\(")
- pattern = pattern.replace(")", "\)")
- pattern = pattern.replace("?", "\?")
- pattern = pattern.replace("{#}", "([0-9]*)")
- pattern = pattern.replace("{L}", "([a-zA-Z]*)")
- pattern = pattern.replace("{C}", "([\S]*)")
- pattern = pattern.replace("{X}", "([\S\s]*)")
- pattern = pattern.replace("{@}", "(.*)")
+ pattern = pattern.replace(".", r"\.")
+ pattern = pattern.replace("[", r"\[")
+ pattern = pattern.replace("]", r"\]")
+ pattern = pattern.replace("(", r"\(")
+ pattern = pattern.replace(")", r"\)")
+ pattern = pattern.replace("?", r"\?")
+ pattern = pattern.replace("{#}", r"([0-9]*)")
+ pattern = pattern.replace("{L}", r"([a-zA-Z]*)")
+ pattern = pattern.replace("{C}", r"([\S]*)")
+ pattern = pattern.replace("{X}", r"([\S\s]*)")
+ pattern = pattern.replace("{@}", r"(.*)")
try:
repattern = re.compile(pattern)
@@ -289,7 +289,7 @@ def rename_using_patterns(name, path, pattern_ini, pattern_end, count, ext=""):
# If {num2} the number will be 02
# If {num3+10} the number will be 010
count = repr(count)
- cr = re.compile("{(num)([0-9]*)}|{(num)([0-9]*)(\+)([0-9]*)}")
+ cr = re.compile(r"{(num)([0-9]*)}|{(num)([0-9]*)(\+)([0-9]*)}")
try:
cg = cr.search(newname).groups()
if len(cg) == 6:
@@ -387,10 +387,10 @@ def rename_using_patterns(name, path, pattern_ini, pattern_end, count, ext=""):
# ie. {rand20,5} will be a number between 0 and 20 of 5 digits (00012)
rnd = ""
cr = re.compile(
- "{(rand)([0-9]*)}"
- "|{(rand)([0-9]*)(\-)([0-9]*)}"
- "|{(rand)([0-9]*)(\,)([0-9]*)}"
- "|{(rand)([0-9]*)(\-)([0-9]*)(\,)([0-9]*)}"
+ r"{(rand)([0-9]*)}"
+ r"|{(rand)([0-9]*)(\-)([0-9]*)}"
+ r"|{(rand)([0-9]*)(\,)([0-9]*)}"
+ r"|{(rand)([0-9]*)(\-)([0-9]*)(\,)([0-9]*)}"
)
try:
cg = cr.search(newname).groups()
diff --git a/pyrenamer/pyrenamer.py b/pyrenamer/pyrenamer.py
index c383612..1aa5b15 100755
--- a/pyrenamer/pyrenamer.py
+++ b/pyrenamer/pyrenamer.py
@@ -171,6 +171,7 @@ class pyRenamer:
# Get defined signals
signals = {
+ "on_view1_activate": self.on_view1_activate,
"on_main_window_destroy": self.on_main_quit,
"on_main_window_window_state_event": self.on_main_window_window_state_event,
"on_main_window_configure_event": self.on_main_window_configure_event,
@@ -300,20 +301,20 @@ class pyRenamer:
self.builder.get_object("subs_capitalization_combo").set_active(0)
# # Init some menu items
- self.builder.get_object("menu_rename").set_sensitive(False)
- self.builder.get_object("menu_clear_preview").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("menu_clear_preview").set_sensitive(False)
# # Init delete radio buttons
- self.builder.get_object("delete_from").set_sensitive(False)
- self.builder.get_object("delete_to").set_sensitive(False)
+ # self.builder.get_object("delete_from").set_sensitive(False)
+ # self.builder.get_object("delete_to").set_sensitive(False)
# # Init pattern comboboxes
self.populate_pattern_combos()
# # Init the undo/redo manager
self.undo_manager = undo.Undo()
- self.builder.get_object("menu_undo").set_sensitive(False)
- self.builder.get_object("menu_redo").set_sensitive(False)
+ # self.builder.get_object("menu_undo").set_sensitive(False)
+ # self.builder.get_object("menu_redo").set_sensitive(False)
def create_selected_files_treeview(self):
"""Create the TreeView and the ScrolledWindow for the selected
@@ -543,16 +544,20 @@ class pyRenamer:
else:
prev = False
- self.builder.get_object("rename_button").set_sensitive(val or prev)
- self.builder.get_object("menu_rename").set_sensitive(val or prev)
- self.builder.get_object("clear_button").set_sensitive(val or prev)
- self.builder.get_object("menu_clear_preview").set_sensitive(val or prev)
+ # self.builder.get_object("rename_button").set_sensitive(val or prev)
+ # self.builder.get_object("menu_rename").set_sensitive(val or prev)
+ # self.builder.get_object("clear_button").set_sensitive(val or prev)
+ # self.builder.get_object("menu_clear_preview").set_sensitive(val or prev)
return False
# ---------------------------------------------------------------------------------------
# Callbacks
+ def on_view1_activate(self, widget):
+ """I don't know for what this is..."""
+ print(widget)
+
def on_selected_files_cursor_changed(self, treeview):
"""Clicked a file"""
@@ -598,14 +603,14 @@ class pyRenamer:
"""For everyrow rename the files as requested"""
self.undo_manager.clean()
- self.builder.get_object("menu_undo").set_sensitive(True)
- self.builder.get_object("menu_redo").set_sensitive(False)
+ # self.builder.get_object("menu_undo").set_sensitive(True)
+ # self.builder.get_object("menu_redo").set_sensitive(False)
self.file_selected_model.foreach(self.rename_rows, None)
self.dir_reload_current()
- self.builder.get_object("clear_button").set_sensitive(False)
- self.builder.get_object("menu_clear_preview").set_sensitive(False)
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("clear_button").set_sensitive(False)
+ # self.builder.get_object("menu_clear_preview").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
self.ignore_errors = False
def on_preview_button_clicked(self, widget):
@@ -618,11 +623,11 @@ class pyRenamer:
self.file_selected_model.foreach(self.preview_rename_rows, paths)
self.selected_files.columns_autosize()
- self.builder.get_object("clear_button").set_sensitive(True)
- self.builder.get_object("menu_clear_preview").set_sensitive(True)
- self.builder.get_object("rename_button").set_sensitive(True)
- self.builder.get_object("menu_rename").set_sensitive(True)
- self.file_selected_model.foreach(self.enable_rename_and_clean)
+ # self.builder.get_object("clear_button").set_sensitive(True)
+ # self.builder.get_object("menu_clear_preview").set_sensitive(True)
+ # self.builder.get_object("rename_button").set_sensitive(True)
+ # self.builder.get_object("menu_rename").set_sensitive(True)
+ # self.file_selected_model.foreach(self.enable_rename_and_clean)
def on_clean_button_clicked(self, widget):
"""Clean the previewed filenames"""
@@ -679,140 +684,140 @@ class pyRenamer:
def on_original_pattern_changed(self, widget):
"""Reload current dir and disable Rename button"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_renamed_pattern_changed(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_subs_spaces_toggled(self, widget):
"""Enable/Disable spaces combo"""
- self.builder.get_object("subs_spaces_combo").set_sensitive(widget.get_active())
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("subs_spaces_combo").set_sensitive(widget.get_active())
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_subs_capitalization_toggled(self, widget):
"""Enable/Disable caps combo"""
- self.builder.get_object("subs_capitalization_combo").set_sensitive(
- widget.get_active()
- )
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("subs_capitalization_combo").set_sensitive(
+ # widget.get_active()
+ # )
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_subs_replace_toggled(self, widget):
"""Enable/Disable replace with text entries"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
- self.builder.get_object("subs_replace_new").set_sensitive(widget.get_active())
- self.builder.get_object("subs_replace_orig").set_sensitive(widget.get_active())
- self.builder.get_object("subs_replace_label").set_sensitive(widget.get_active())
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("subs_replace_new").set_sensitive(widget.get_active())
+ # self.builder.get_object("subs_replace_orig").set_sensitive(widget.get_active())
+ # self.builder.get_object("subs_replace_label").set_sensitive(widget.get_active())
if self.autopreview:
self.on_preview_button_clicked(None)
def on_subs_spaces_combo_changed(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_subs_capitalization_combo_changed(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_subs_replace_orig_changed(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_subs_replace_new_changed(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_subs_accents_toggled(self, widget):
"""Enable/Disable accents"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_subs_duplicated_toggled(self, widget):
"""Fixes duplicated symbols"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_insert_radio_toggled(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
- self.builder.get_object("insert_entry").set_sensitive(True)
- self.builder.get_object("insert_pos").set_sensitive(True)
- self.builder.get_object("insert_end").set_sensitive(True)
- self.builder.get_object("delete_from").set_sensitive(False)
- self.builder.get_object("delete_to").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("insert_entry").set_sensitive(True)
+ # self.builder.get_object("insert_pos").set_sensitive(True)
+ # self.builder.get_object("insert_end").set_sensitive(True)
+ # self.builder.get_object("delete_from").set_sensitive(False)
+ # self.builder.get_object("delete_to").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_insert_entry_changed(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_insert_pos_changed(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_insert_end_toggled(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
- self.builder.get_object("insert_pos").set_sensitive(
- not self.builder.get_object("insert_end").get_active()
- )
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("insert_pos").set_sensitive(
+ # not self.builder.get_object("insert_end").get_active()
+ # )
if self.autopreview:
self.on_preview_button_clicked(None)
def on_delete_radio_toggled(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
- self.builder.get_object("delete_from").set_sensitive(True)
- self.builder.get_object("delete_to").set_sensitive(True)
- self.builder.get_object("insert_entry").set_sensitive(False)
- self.builder.get_object("insert_pos").set_sensitive(False)
- self.builder.get_object("insert_end").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("delete_from").set_sensitive(True)
+ # self.builder.get_object("delete_to").set_sensitive(True)
+ # self.builder.get_object("insert_entry").set_sensitive(False)
+ # self.builder.get_object("insert_pos").set_sensitive(False)
+ # self.builder.get_object("insert_end").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
def on_delete_from_changed(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if (
self.builder.get_object("delete_from").get_value()
> self.builder.get_object("delete_to").get_value()
@@ -825,8 +830,8 @@ class pyRenamer:
def on_delete_to_changed(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if (
self.builder.get_object("delete_to").get_value()
< self.builder.get_object("delete_from").get_value()
@@ -839,8 +844,8 @@ class pyRenamer:
def on_manual_changed(self, widget):
"""Disable Rename button (user has to click on Preview again)"""
- self.builder.get_object("rename_button").set_sensitive(False)
- self.builder.get_object("menu_rename").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("menu_rename").set_sensitive(False)
if self.autopreview:
self.on_preview_button_clicked(None)
@@ -1148,8 +1153,8 @@ class pyRenamer:
self.populate_stop()
self.stop_button.show()
- self.builder.get_object("clear_button").set_sensitive(False)
- self.builder.get_object("rename_button").set_sensitive(False)
+ # self.builder.get_object("clear_button").set_sensitive(False)
+ # self.builder.get_object("rename_button").set_sensitive(False)
self.file_selected_model.clear()
while Gtk.events_pending():
@@ -1278,10 +1283,10 @@ class pyRenamer:
self.selected_files.set_model(self.file_selected_model)
self.selected_files.columns_autosize()
- self.builder.get_object("clear_button").set_sensitive(True)
- self.builder.get_object("menu_clear_preview").set_sensitive(True)
- self.builder.get_object("rename_button").set_sensitive(True)
- self.builder.get_object("menu_rename").set_sensitive(True)
+ # self.builder.get_object("clear_button").set_sensitive(True)
+ # self.builder.get_object("menu_clear_preview").set_sensitive(True)
+ # self.builder.get_object("rename_button").set_sensitive(True)
+ # self.builder.get_object("menu_rename").set_sensitive(True)
f.close()
diff --git a/pyrenamer/tools/filetools.py b/pyrenamer/tools/filetools.py
index 9d2d8dc..6aa815f 100644
--- a/pyrenamer/tools/filetools.py
+++ b/pyrenamer/tools/filetools.py
@@ -259,17 +259,17 @@ def rename_using_patterns(name, path, pattern_ini, pattern_end, count, ext=""):
pattern = pattern_ini
newname = pattern_end
- pattern = pattern.replace(".", "\.")
- pattern = pattern.replace("[", "\[")
- pattern = pattern.replace("]", "\]")
- pattern = pattern.replace("(", "\(")
- pattern = pattern.replace(")", "\)")
- pattern = pattern.replace("?", "\?")
- pattern = pattern.replace("{#}", "([0-9]*)")
- pattern = pattern.replace("{L}", "([a-zA-Z]*)")
- pattern = pattern.replace("{C}", "([\S]*)")
- pattern = pattern.replace("{X}", "([\S\s]*)")
- pattern = pattern.replace("{@}", "(.*)")
+ pattern = pattern.replace(".", r"\.")
+ pattern = pattern.replace("[", r"\[")
+ pattern = pattern.replace("]", r"\]")
+ pattern = pattern.replace("(", r"\(")
+ pattern = pattern.replace(")", r"\)")
+ pattern = pattern.replace("?", r"\?")
+ pattern = pattern.replace("{#}", r"([0-9]*)")
+ pattern = pattern.replace("{L}", r"([a-zA-Z]*)")
+ pattern = pattern.replace("{C}", r"([\S]*)")
+ pattern = pattern.replace("{X}", r"([\S\s]*)")
+ pattern = pattern.replace("{@}", r"(.*)")
try:
repattern = re.compile(pattern)
@@ -289,7 +289,7 @@ def rename_using_patterns(name, path, pattern_ini, pattern_end, count, ext=""):
# If {num2} the number will be 02
# If {num3+10} the number will be 010
count = repr(count)
- cr = re.compile("{(num)([0-9]*)}|{(num)([0-9]*)(\+)([0-9]*)}")
+ cr = re.compile(r"{(num)([0-9]*)}|{(num)([0-9]*)(\+)([0-9]*)}")
try:
cg = cr.search(newname).groups()
if len(cg) == 6:
@@ -387,10 +387,10 @@ def rename_using_patterns(name, path, pattern_ini, pattern_end, count, ext=""):
# ie. {rand20,5} will be a number between 0 and 20 of 5 digits (00012)
rnd = ""
cr = re.compile(
- "{(rand)([0-9]*)}"
- "|{(rand)([0-9]*)(\-)([0-9]*)}"
- "|{(rand)([0-9]*)(\,)([0-9]*)}"
- "|{(rand)([0-9]*)(\-)([0-9]*)(\,)([0-9]*)}"
+ r"{(rand)([0-9]*)}"
+ r"|{(rand)([0-9]*)(\-)([0-9]*)}"
+ r"|{(rand)([0-9]*)(\,)([0-9]*)}"
+ r"|{(rand)([0-9]*)(\-)([0-9]*)(\,)([0-9]*)}"
)
try:
cg = cr.search(newname).groups()I never worked with PyGObject. I just fixed the missing raw-Strings and removed set_sensitive. Maybe I missed some of them. I don't know what set_sensitive does, but there should be a replacement.
ukmjenkins likes this post
Posts: 12,133
Threads: 496
Joined: Sep 2016
FYI: To install a python patch, use pypatch which you can install using: pip install pypatch
You can find usageinstructions here
ukmjenkins likes this post
Posts: 3
Threads: 1
Joined: May 2026
Hello DeaD_EyE.
Thank you for your interest and your input.
Please may I ask,
did you manually read the Python script,
then manually work to create this patch, please ?
Thank you for doing this !
Have you tested this patch yourself ?
I am very new to Python.
I will try to follow,
the next respondent's Larz60+'s instructions,
for how to apply a patch.
Best wishes, Michael.
|