Προς το περιεχόμενο
  • 0
Συνδεθείτε  
Spect~

Greek to Greeklish Μετονομασια

Ερώτηση

Δημοσ. (επεξεργασμένο)

Ηθελα να κανω αλλη μια χαμαλοδουλεια και η πιο ευκολη επιλογη ηταν να φτιαξω ενα script να το κανει για μενα. Στο συγκεκριμενο επιλεγεις τον φακελο root στον οποιο θες να μετονομασει ολα τα ονοματα αρχειων που ειναι γραμμενα στα ελληνικα στα αγγλικα(greeklish). Μολις γινει η μετονομασια εμφανιζει οσα αρχεια μετονομαστικαν και δινει την επιλογη για μετονομασια πισω στο αρχικο ελληνικο ονομα (Αυτη η επιλογη δουλευει οσο δεν εχει κλεισει το προγραμμα). 

 

 

 

 

from tkinter.filedialog import askdirectory
from tkinter import messagebox
from tkinter import *
import tkinter as tk
import time
import os

Letter_Map = {
    'Α': 'a',
    'Ά': 'a',
    'Β': 'b',
    'Γ': 'g',
    'Δ': 'd',
    'Ε': 'e',
    'Έ': 'e',
    'Ζ': 'z',
    'Η': 'i',
    'Ή': 'i',
    'Θ': 'th',
    'Ι': 'i',
    'Ί': 'i',
    'Κ': 'k',
    'Λ': 'l',
    'Μ': 'm',
    'Ν': 'n',
    'Ξ': 'x',
    'Ο': 'o',
    'Ό': 'o',
    'Π': 'p',
    'Ρ': 'r',
    'Σ': 's',
    'ς': 's',
    'Τ': 't',
    'Υ': 'y',
    'Ύ': 'y',
    'Φ': 'f',
    'Χ': 'x',
    'Ψ': 'ps',
    'Ω': 'w',
    'Ώ': 'w'
}


class MainWindow(Frame):
    def __init__(self, root):
        Frame.__init__(self, root)
        self.root = root
        self.not_pressed = True
        self.changed = False
        self.root_directory = None
        self.original_names_list = None
        self.original_names = {}
        self.letter_map = Letter_Map.copy()
        self.path_entry()

    def init(self):
        start = time.time()
        self.root.title("Greek to Greeklish Rename")

        scrollbar = tk.Scrollbar(self.root, orient="vertical")
        self.original_names_list = tk.Listbox(self.root, width=50, height=20, yscrollcommand=scrollbar.set)
        scrollbar.config(command=self.original_names_list.yview)
        scrollbar.pack(side="right", fill="y")
        self.original_names_list.config(width=0)
        self.original_names_list.pack(fill="both", expand=True)

        Button(self.root, text="Rename to original name", command=self.rename_to_original).pack(fill=X)

        for subdir, dirs, files in os.walk(self.root_directory):
            if files:
                for current_file_name in files:
                    current_folder_path = os.path.join(self.root_directory, subdir)
                    original_file_path = os.path.abspath(os.path.join(current_folder_path, current_file_name))
                    if os.path.exists(original_file_path):
                        name_changed_to_greeklish = self.name_change(current_file_name)
                        if self.changed:
                            renamed_file_path = current_folder_path + "\\" + name_changed_to_greeklish
                            os.rename(original_file_path, renamed_file_path)
                            self.original_names[name_changed_to_greeklish] = {'original_name': current_file_name}
                            self.original_names_list.insert('end', current_file_name + '  -->  ' + name_changed_to_greeklish)
                        self.changed = False
        self.root.deiconify()
        end = time.time()
        messagebox.showinfo('Rename to Greeklish', 'Completed in :  ' + str(end - start) + 'seconds.')

    def rename_to_original(self):
        if self.not_pressed:
            start = time.time()
            self.not_pressed = False
            self.original_names_list.delete(0, END)
            for subdir, dirs, files in os.walk(self.root_directory):
                if files:
                    for current_file_name in files:
                        current_folder_path = os.path.join(self.root_directory, subdir)
                        original_file_path = os.path.abspath(os.path.join(current_folder_path, current_file_name))
                        if os.path.exists(original_file_path) and current_file_name in self.original_names:
                            name_changed_to_greek = self.original_names.get(current_file_name).get('original_name')
                            renamed_file_path = current_folder_path + "\\" + name_changed_to_greek
                            os.rename(original_file_path, renamed_file_path)
                            self.original_names_list.insert('end', current_file_name + '  -->  ' + name_changed_to_greek)
            end = time.time()
            messagebox.showinfo('Rename to Greek', 'Completed in :  ' + str(end - start) + 'seconds.')

    def name_change(self, old_name):
        name_english = ''
        ext_position = old_name.rfind('.')
        extension = old_name[ext_position:]
        for letter in old_name[:ext_position]:
            self.letter_change(letter)
            en_letter = self.letter_change(letter)
            name_english += en_letter
        name_english = name_english.title() + extension
        return name_english

    def letter_change(self, gr_letter):
        cap = False
        if gr_letter.istitle():
            cap = True
        en_letter = self.letter_map.get(gr_letter.title())
        if en_letter:
            self.changed = True
        else:
            en_letter = gr_letter
        if cap:
            en_letter = en_letter.title()
        return en_letter

    def path_entry(self):
        self.root.withdraw()
        self.root_directory = askdirectory()
        while not self.root_directory:
            pass
        self.init()


rt = Tk()
app = MainWindow(rt)
rt.mainloop()

 

 

 

Λινκ για το exe

https://www.dropbox.com/s/5ze9rpqff6atq3f/GreekToGreeklishRename.zip?dl=0

 

 

ΥΓ: ανανεωσα ξανα τον κωδικα

Επεξ/σία από Spect~

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

8 απαντήσεις σε αυτή την ερώτηση

Προτεινόμενες αναρτήσεις

  • 0

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Ναι το ειχα διαβασει το ποστ αλλα βαριομουν να μπω στη διαδικασια να το κανω γιατι ηταν πιο απλο και γρηγορο να κανω την if elif! :P

 

Αν δεν βαριεμαι αργοτερα ισως το αλλαξω!


τελικα βαριομουν τοσο που το εκανα :P θα κανω αργοτερα update τον κωδικο και το εκτελεσιμο. 

 

Για την ιστορια ετρεξα τους 2 κωδικες με if elif + dict στον ιδιο φακελο εννοειται

 

και τα αποτελεσματα φαινονται στην φωοτγραφια

 

 


και ο φακελος στον οποιο ετρεξαν

 

24,530 Files, 2,363 Folders

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

To elif που είχες γράψει ήταν ιδιαίτερα αργό γιατί σε κάθε branch έκανες

gr_letter.upper() == 'c'

Δηλαδή:

 

1. attribute lookup για να βρεις τη μέθοδο upper

2. function call όταν καλούσες την μέθοδο

3. comparison

 

Αν το είχες γράψει έτσι:

upper_gr_letter = gr_letter.upper()
if upper_gr_letter == 'c':
     ....
elif upper_gr_letter == 'd':
     ...

οι διαφορές δεν θα ήταν τόσο μεγάλες γιατί θα είχες μόνο τα comparisons

 

ΥΓ.  H θέση του κώδικα είναι σε github/gitlab/bitbucket και όχι εδώ.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Σωστο αλλα δεν μου περασε καν απο το μυαλο να κανω το παραμικρο για καλυτερο performance ειναι η αληθεια.

 

Ειμαι αρκετα τεμπελης για να το ανεβασω καπου. Καποια στιγμη θα γινει και αυτο παντως. 

 

Απλα αυτες τις μερες κοιταω τι βλακειες δουλειες εχω να κανω και φταιχνω σκριπτακια για περασει η ωρα και να κανω τις δουλειες μου γρηγορα -και ισως και καποιος αλλος στο μελλον-.

 

Σε λιγακι θα ανεβασω τον κωδικα με τις τελευταιες αλλαγες


ΥΓ: Ανανεωσα το αρχικο ποστ με το νεο κωδικα και νεο λινκ για το νεο exe

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

def dictionary_construction();

 

Hmm... very suspicious...

LETTER_MAP = {
    'Α': 'a',
    'Ά': 'a',
    'Β': 'b',
    'Γ': 'g',
    # ...
}

class Foo(object):
    def __init__(self, ):
        self.letter_map = LETTER_MAP.copy()

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Την συνάρτηση romanize την είχα γράψει και εγώ παλιότερα. Δεν πειράζει μικρά κεφαλαία εννοώ τα αφήνει ως έχουν και καλύπτει την περίπτωση που το string έχει μικτούς χαρακτήρες ελληνικά και λατινικά δηλαδή. https://github.com/k33theod/greeklish

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε έναν λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι εύκολο!

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
Συνδεθείτε  
×
×
  • Δημιουργία νέου...

Χρήσιμες πληροφορίες

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.