Уведомления

Группа в Telegram: @pythonsu

#1 Июль 14, 2013 23:28:46

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Помогите написать программку

Бить его. Ногами :)
Держи. Только под 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()



Офлайн

#2 Июль 14, 2013 23:30:29

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Помогите написать программку

Использование StringVar достаточно частая практика. Но это сильно путает код. Хотя - личное дело каждого :)



Офлайн

#3 Июль 14, 2013 23:33:02

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Помогите написать программку

И, как я понимаю, парню нужно было вот это (первый же день изучает, Shaman, ну Вы даете :) )

import Tkinter
import tkFileDialog
root = Tkinter.Tk().withdraw()
path_to_file = tkFileDialog.askopenfilename()
print path_to_file



Отредактировано 4kpt (Июль 14, 2013 23:39:52)

Офлайн

#4 Июль 14, 2013 23:34:23

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Помогите написать программку

Благодарю.
Помню, мучился с отличиями в Тк для 2-й и 3-й версии. Не получалось взять код от второй и просто изменить регистры имён.

Офлайн

#5 Июль 14, 2013 23:35:25

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Помогите написать программку

+ Классы диалогов разнесены в отдельные модули, а не внутри tkinter…



Офлайн

#6 Июль 15, 2013 00:16:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Помогите написать программку

lion9
В этой конструкции не понимаю ни как сделать бэкап (имя обрабатываемого файла должно оставаться неизменным), ни как сделать множественные замены, а не один символ на другой символ. В идеале слова, по которым производится поиск, должны всё же вводиться через поле в GUI, чтоб было более user-friendly, при этом - да, мне всё же нравится Ваше предложение насчёт конфига… было бы здорово, если бы каждую конфигурацию можно было сохранять. А для этого нужно как-то сохранять через GUI список, а затем делать его импорт… Лишь сегодня начал копаться в Python, поэтому пока в отношении решения данной задачи в полной растерянности.
самое простое - написать для файлов: в одном - одни слова, в другом - другие
но файлы - это тоже разновидность интерфейса
нужно написать часть, которая может получать данные через любой интерфейс, и для начала использовать интерфейс в виде двух файлов



Офлайн

#7 Июль 15, 2013 00:18:19

lion9
Зарегистрирован: 2013-07-14
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите написать программку

py.user.next
самое простое - написать для файлов: в одном - одни слова, в другом - другие
но файлы - это тоже разновидность интерфейса
нужно написать часть, которая может получать данные через любой интерфейс, и для начала использовать интерфейс в виде двух файлов
Да, полностью согласен. По задумке - это и будут два файла конфигурации. А создавать и дополнять/изменять их нужно будет через GUI.

Отредактировано lion9 (Июль 15, 2013 00:19:01)

Офлайн

#8 Июль 15, 2013 20:45:34

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Помогите написать программку

lion9
По задумке - это и будут два файла конфигурации.
неважно, что задумано изначально, потом может всё измениться
например, ты думал, что будет два файла, а станет один файл (потому что так будет нужно для чего-нибудь)
например, ты думал, что это будут файлы, а это будут данные из сети вообще без всяких файлов
поэтому нужно сделать общий вход/выход для данных из/в любого источника
и GUI становится одним из таких возможных источников



Офлайн

#9 Июль 19, 2013 18:53:30

lion9
Зарегистрирован: 2013-07-14
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите написать программку

Сваял следующее… Работать работает, но ни о каком 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?

Заранее огромное спасибо.

Отредактировано lion9 (Июль 19, 2013 19:46:15)

Офлайн

#10 Июль 22, 2013 08:04:02

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Помогите написать программку

 
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()
 
набросал тебе общую структуру программы



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version