Найти - Пользователи
Полная версия: Помогите написать программку
Начало » Центр помощи » Помогите написать программку
1 2
4kpt
Бить его. Ногами :)
Держи. Только под 2.Х, так как в 3.Х не работаю.
# -*- coding: utf-8 -*-
import os
import Tkinter as tk
import tkFileDialog
import tkMessageBox
class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master, bd=3)
        self.pack()
        self.createWidgets()
    def createWidgets(self):
        self.finput=tk.Entry(self, width=48)
        self.finput.pack(side = 'left')
        self.b_select=tk.Button(self, text=u'Выбрать',
                                command=self.select_file).pack(side = 'right')
    def select_file(self):
        self.finput.delete(0, "end")
        self.finput.insert(0, tkFileDialog.askopenfilename(initialdir=os.path.expanduser('~')))
        tkMessageBox.showinfo(u'Имя', self.finput.get())
app = Application()
app.mainloop()
4kpt
Использование StringVar достаточно частая практика. Но это сильно путает код. Хотя - личное дело каждого :)
4kpt
И, как я понимаю, парню нужно было вот это (первый же день изучает, Shaman, ну Вы даете :) )
import Tkinter
import tkFileDialog
root = Tkinter.Tk().withdraw()
path_to_file = tkFileDialog.askopenfilename()
print path_to_file
Shaman
Благодарю.
Помню, мучился с отличиями в Тк для 2-й и 3-й версии. Не получалось взять код от второй и просто изменить регистры имён.
4kpt
+ Классы диалогов разнесены в отдельные модули, а не внутри tkinter…
py.user.next
lion9
В этой конструкции не понимаю ни как сделать бэкап (имя обрабатываемого файла должно оставаться неизменным), ни как сделать множественные замены, а не один символ на другой символ. В идеале слова, по которым производится поиск, должны всё же вводиться через поле в GUI, чтоб было более user-friendly, при этом - да, мне всё же нравится Ваше предложение насчёт конфига… было бы здорово, если бы каждую конфигурацию можно было сохранять. А для этого нужно как-то сохранять через GUI список, а затем делать его импорт… Лишь сегодня начал копаться в Python, поэтому пока в отношении решения данной задачи в полной растерянности.
самое простое - написать для файлов: в одном - одни слова, в другом - другие
но файлы - это тоже разновидность интерфейса
нужно написать часть, которая может получать данные через любой интерфейс, и для начала использовать интерфейс в виде двух файлов
lion9
py.user.next
самое простое - написать для файлов: в одном - одни слова, в другом - другие
но файлы - это тоже разновидность интерфейса
нужно написать часть, которая может получать данные через любой интерфейс, и для начала использовать интерфейс в виде двух файлов
Да, полностью согласен. По задумке - это и будут два файла конфигурации. А создавать и дополнять/изменять их нужно будет через GUI.
py.user.next
lion9
По задумке - это и будут два файла конфигурации.
неважно, что задумано изначально, потом может всё измениться
например, ты думал, что будет два файла, а станет один файл (потому что так будет нужно для чего-нибудь)
например, ты думал, что это будут файлы, а это будут данные из сети вообще без всяких файлов
поэтому нужно сделать общий вход/выход для данных из/в любого источника
и GUI становится одним из таких возможных источников
lion9
Сваял следующее… Работать работает, но ни о каком GUI речь не идёт…

# Сделать бэкап файла
import sys, string, os, shutil
shutil.copyfile("D:/UNBREAKABLE_SPACES/inputfile/file.docx_en-US_ru-RU.sdlxliff", "D:/UNBREAKABLE_SPACES/backup/file.docx_en-US_ru-RU.sdlxliff")
# Открыть файл
file = open ('D:/UNBREAKABLE_SPACES/inputfile/file.docx_en-US_ru-RU.sdlxliff', 'r', encoding='utf-8')
text = file.read()
file.close()
# Определить функцию замены
def replace_all(text, dic):
    for i, j in dic.items():
        text = text.replace(i, j)
    return text 
# Словарь со значениями
reps = {'term1':'replacement1', 'term2':'replacement2'}
# Произвести замену 
replaced = replace_all(text, reps)
# Сохранить изменённый текст в новом файле
filereplaced = open('D:/UNBREAKABLE_SPACES/file.sdlxliff', 'w', encoding='utf-8')
filereplaced.write(replaced)
filereplaced.close()

В связи с вышеизложенным вопросы:

1. Как я могу вынести содержимое reps в отдельный файл и импортировать его при исполнении скрипта? Имеется в виду вынос вот этого текста {'term1':'replacement1', ‘term2’:'replacement2'}.
2. Каким манером сделать так, чтобы скрипт подвергал пакетной автозамене согласно словарю ВСЕ файлы с расширением SDLXLIFF, находящиеся в каталоге inputfile, делал их копию с тем же названием в каталог backup и клал полученный файл с произведёнными автозаменами в каталог UNBREAKABLE_SPACES?

Заранее огромное спасибо.
py.user.next
 
class FileProcessor:
 
    def backup(self, name):
        b = Backuper()
        b.backup(name)
 
    def replace(self, name):
        r = Replacer()
        r.replace_by_dict(name, wdict)
 
 
class Backuper:
 
    def backup(self, name):
        pass
 
 
class Replacer:
 
    def replace_by_dict(self, name, wdict):
        pass
 
 
def process_files()
    fp = FileProcessor()
    names = get_names()
    for name in names:
        fp.backup(name)
        fp.replace(name)
 
def get_names(self):
    name = 'D:/UNBREAKABLE_SPACES/inputfile/file.docx_en-US_ru-RU.sdlxliff'
    return [name]
 
if __name__ == '__main__':
   process_files()
 
набросал тебе общую структуру программы
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB