Уведомления

Группа в Telegram: @pythonsu

#1 Июль 14, 2013 16:28:36

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

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

По роду деятельности потребовалось написать программку, которая позволяла бы задать перечень слов, после которых обычный пробел заменялся бы неразрывным, и второй перечень слов, перед которыми обычных пробел заменялся бы неразрывным (например, обычный пробел после слова “статья”, если следом стоит цифры, заменялся бы на неразрывный). Файл, с которым программа работать - TTX, SDLXLIFF (по сути - XML). Насколько сложно это реализовать с простеньким GUI, который позволял бы водить список слов и символов, после/перед которыми обычный пробел заменялся бы на неразрывный, делался бы автоматический бэкап файла в работе, была возможна “пакетная” обработка нескольких файлов?

Офлайн

#2 Июль 14, 2013 19:39:44

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

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

Ничего сложного :)

Придеться разработать интерфейс, который будет по-тексту находить нужные слова и автоматически заменять один мнемокод на другой перед или до слова… GUI можно писать даже самое простое.

P.S. Можно даже без GUI, на основе config файла.



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

Офлайн

#3 Июль 14, 2013 19:53:59

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

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

f1 = open('myFile.sdlxliff', 'r')
f2 = open('myFile.sdlxliffOUTPUT', 'w')
for line in f1:
    f2.write(line.replace('Статья ', 'Статья '))
f1.close()
f2.close()

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

Бэкап я делаю так (впрочем, мне приходится указывать имя файла в коде, а хотелось бы, чтобы бэкап был автоматическим при изменении исходного файла):

import sys, string, os, shutil
shutil.copyfile("D:/Downloads/test.docx_en-US_ru-RU.sdlxliff", "D:/Downloads/test.docx_en-US_ru-RU_copy.sdlxliff")


Отредактировано lion9 (Июль 14, 2013 20:31:42)

Офлайн

#4 Июль 14, 2013 20:46:42

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

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

Для обновления файла лучше выполнять такую последовательность:
1. Запись обработанных данных с временным именем.
2. Переименование исходного во временное имя.
3. Переименование результата в оригинальное имя.
4. Удаление исходного.

Если хочется чуть быстрее, но чуть менее надежно:
1. Переименование исходного во временное имя.
2. Запись обработанных данных с оригинальным именем.
3. Удаление исходного.

Офлайн

#5 Июль 14, 2013 20:53:46

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

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

Shaman
Для обновления файла лучше выполнять такую последовательность:1. Запись обработанных данных с временным именем.2. Переименование исходного во временное имя.3. Переименование результата в оригинальное имя.4. Удаление исходного.Если хочется чуть быстрее, но чуть менее надежно:1. Переименование исходного во временное имя.2. Запись обработанных данных с оригинальным именем.3. Удаление исходного.

А каким манером объявить переменной имя только что открытого файла? Точнее, может быть, не так выражаюсь… Как в GUI открыть файл, чтобы его имя сохранилось как переменная, к которой можно было бы дописать “_backup”? Чувствую, что ещё больше запутываюсь… Если без GUI, как сделать так, чтобы программа хотя бы открывала любой файл с расширешнием sdlxliff, который лежит в определённой папке?

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

Офлайн

#6 Июль 14, 2013 21:03:26

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

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

lion9
А каким манером объявить переменной имя только что открытого файла?
name='name.nam'
f = open(name)
f = open('name.nam')
name = f.name
?

Офлайн

#7 Июль 14, 2013 22:04:18

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

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

lion9
Как в GUI открыть файл, чтобы его имя сохранилось как переменная, к которой можно было бы дописать “_backup”?
Python 3
# -*- coding: cp1251 -*-
import os
import tkinter as tk
from tkinter import filedialog, messagebox
class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.v_file = tk.StringVar()
        self.pack()
        self.createWidgets()
    def createWidgets(self):
        self.mframe=tk.Frame(self, bd=3)
        self.finput=tk.Entry(self.mframe, textvariable=self.v_file , width=48)
        self.b_select=tk.Button(self.mframe, text='Выбрать', command=self.select_file)
        self.mframe.pack()
        self.finput.pack(side = 'left')
        self.b_select.pack(side = 'right')
    def select_file(self):
        self.v_file.set(filedialog.askopenfilename(initialdir=os.path.expanduser('~')))
        messagebox.showinfo('Имя', self.v_file.get())
root = tk.Tk()
app = Application(master=root)
app.mainloop()

Отредактировано Shaman (Июль 14, 2013 22:07:29)

Офлайн

#8 Июль 14, 2013 23:01:47

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

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

Эти две строки вынесли мне мозг :)

import tkinter as tk
from tkinter import filedialog, messagebox
И еще эта.
root = tk.Tk()
Зачем, если Вы наследуете от рамки. Она сама себе построит корневое окно. Имеет смысл задавать root, если Вы собираетесь фиксировать его размер.



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

Офлайн

#9 Июль 14, 2013 23:15:23

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

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

4kpt
Эти две строки вынесли мне мозг
А как лучше? Такой аккорд часто встречается.
4kpt
Зачем, если Вы наследуете от рамки. Она сама себе построит корневое окно. Имеет смысл задавать root, если Вы собираетесь фиксировать его размер
Я с Tk дел почти не имею. Код накопипастил откуда-то, когда был нужен.

Отредактировано Shaman (Июль 14, 2013 23:17:45)

Офлайн

#10 Июль 14, 2013 23:22:44

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

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

http://docs.python.org/3/library/tkinter.html#a-simple-hello-world-program - вот он! Этот вредный источник гражданской наружности.

Отредактировано Shaman (Июль 14, 2013 23:25:30)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version