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

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

P.S. Можно даже без GUI, на основе config файла.
lion9
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")


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

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

А каким манером объявить переменной имя только что открытого файла? Точнее, может быть, не так выражаюсь… Как в GUI открыть файл, чтобы его имя сохранилось как переменная, к которой можно было бы дописать “_backup”? Чувствую, что ещё больше запутываюсь… Если без GUI, как сделать так, чтобы программа хотя бы открывала любой файл с расширешнием sdlxliff, который лежит в определённой папке?
Shaman
lion9
А каким манером объявить переменной имя только что открытого файла?
name='name.nam'
f = open(name)
f = open('name.nam')
name = f.name
?
Shaman
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()
4kpt
Эти две строки вынесли мне мозг :)
import tkinter as tk
from tkinter import filedialog, messagebox
И еще эта.
root = tk.Tk()
Зачем, если Вы наследуете от рамки. Она сама себе построит корневое окно. Имеет смысл задавать root, если Вы собираетесь фиксировать его размер.
Shaman
4kpt
Эти две строки вынесли мне мозг
А как лучше? Такой аккорд часто встречается.
4kpt
Зачем, если Вы наследуете от рамки. Она сама себе построит корневое окно. Имеет смысл задавать root, если Вы собираетесь фиксировать его размер
Я с Tk дел почти не имею. Код накопипастил откуда-то, когда был нужен.
Shaman
http://docs.python.org/3/library/tkinter.html#a-simple-hello-world-program - вот он! Этот вредный источник гражданской наружности.
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