Уведомления

Группа в Telegram: присоединиться

#1 Май 16, 2019 12:08:52

Thatzr
Зарегистрирован: 2019-05-16
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться пожалуйста

Добрый день, с программированием все плохо, но тем не менее поступила задача которую нужно выполнить, спросить по данной теме особо не у кого, поэтому очень прошу помощи у Вас.
Нужно написать скрипт, который из xml файла удаляет 2 строчки, затем нужно будет сделать еще некоторые манипуляции, но это пока не важно, гугл перекопал весь, вроде кажется прям на поверхности лежит а сам не могу понять(ну тупой наверное что поделать).
Скорость выполнения особой роли не играет, так что нужно обойтись без подключаемых модулей для работы с xml.
Раньше никогда не сталкивался с программированием, и времени разбираться не так много, очень прошу помощи.Сам дошел только до того как открыть файл и вывести содержимое этих 2 строчек котрые нужно удалить:


 f = open("C:/Users/serv.xml", "r")
all=f.readlines()
f = open("C:/Users/serv.xml", "w")
str1 = f.readline()
str2 = f.readlines()[-1]
print(all,str1,str2)

Помогите советом пожалуйста

Отредактировано FishHook (Май 16, 2019 12:13:46)

Офлайн

#2 Май 16, 2019 21:38:53

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 1432
Репутация: +  202  -
Профиль   Отправить e-mail  

Помогите разобраться пожалуйста

Thatzr
Нужно написать скрипт, который из xml файла удаляет 2 строчки,
по какому признаку скрипт должен понять какие строчки нужно удалить?

Офлайн

#3 Май 16, 2019 23:36:41

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 3426
Репутация: +  185  -
Профиль   Отправить e-mail  

Помогите разобраться пожалуйста

 with open("C:/Users/serv.xml", "r") as f:
   d=f.read()
new_content="\n".join(d.split()[2:]) # рабочая колбаса
with open("C:/Users/serv_new.xml", "w") as f:
   f.write(new_content)

А вообще есть unix средство:
 tail -n +3 C:/Users/serv.xml >C:/Users/serv_new.xml
Оно доступно под виндой если поставить mingw или в эмуляторе nix под десяткой.

Но таки вам правильно пишут. В разметке xml переводы строк игнорируются, сегодня они могут быть а завтра исчезнут, смысл xml от этого почти не зависит.



Отредактировано doza_and (Май 16, 2019 23:47:20)

Офлайн

#4 Май 17, 2019 07:35:45

Thatzr
Зарегистрирован: 2019-05-16
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться пожалуйста

PEHDOM
первая и последняя строка



Спасибо за советы, подсказанная конструкция “with open” позволила мне гуглить в новом направлении, после чего сделал такой код:

with open(r“CUsers/serv.xml”, “r”) as file:
lines = file.readlines()
del lines
del lines
with open(r“CUsers/serv.xml”, “w”) as file:
file.writelines(lines)

Понимаю что все очень просто, но повторюсь ранее никогда не писал ничего) Спасибо!

Офлайн

#5 Май 17, 2019 21:30:00

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 3426
Репутация: +  185  -
Профиль   Отправить e-mail  

Помогите разобраться пожалуйста

Thatzr
первая и последняя строка
Thatzr
после чего сделал такой код:
Он странный
вам бы записать
 file.writelines(lines[1:-1])

Посмотрите тему срезы списков.



Офлайн

#6 Май 20, 2019 06:19:08

Thatzr
Зарегистрирован: 2019-05-16
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться пожалуйста

doza_and
Извиняюсь за опечатку, там где del lines в конце номера строк, спасибо сделал проще, как Вы писали, просто в writelines вставил номера строк которые нужно удалить

    file.writelines(lines[1:-1])

Подскажите пожалуйста такой момент, нужно запустить программку (.exe) она создает файл,который мне и нужно редактировать, программка запускает командную строку, затем нужно нажать любую кнопку - программа закроется и файл создастся. Сделал так:

 import subprocess
def startexe():
    program = "C:/Users/Desktop/script/str.exe"
    process = subprocess.Popen(program, stdout=subprocess.PIPE)
    code = process.communicate()

Программа ждет когда я нажму кнопку, как сделать так, чтобы она запускалась и кнопка жалась автоматически?

Отредактировано Thatzr (Май 20, 2019 09:40:46)

Офлайн

#7 Май 20, 2019 18:01:27

angree77
Зарегистрирован: 2019-04-24
Сообщения: 52
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться пожалуйста

Thatzr
затем нужно нажать любую кнопку - программа закроется и файл создастся
а не проще ее из процессов прибить?
или послать сигнал на завершение работы программы?

Офлайн

#8 Май 20, 2019 20:06:15

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 3426
Репутация: +  185  -
Профиль   Отправить e-mail  

Помогите разобраться пожалуйста

Thatzr
Программа ждет когда я нажму кнопку, как сделать так, чтобы она запускалась
Самый самый правильный подход переделать str.exe так чтобы там не было дурацких кнопок. Судя по всему она там вообще не нужна.
прибить при помощи kill тоже хорошо.
Ну а если хочется помучаться то вам всякие pywinauto помогут.

Еще вариант, объясните что делает это чудо str.exe. Вполне возможно что проще перенести ее функционал на Python. Получите более простую а может быть и производительную систему.



Отредактировано doza_and (Май 20, 2019 20:08:56)

Офлайн

#9 Май 21, 2019 07:57:50

Thatzr
Зарегистрирован: 2019-05-16
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться пожалуйста

angree77
Да, подойдет, если есть такая функция которая убивает через время, так как после запуска нужно пару секунд чтобы поработал процесс.
doza_and
str.exe запускается приложение, которое формирует файл лицензии программы в виде документа xml, при запуске открвыается командная строка в которой нужно нажать любую кнопку, затем приложение закрывается создавая xml файл

Офлайн

#10 Май 21, 2019 09:19:24

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 3426
Репутация: +  185  -
Профиль   Отправить e-mail  

Помогите разобраться пожалуйста

Thatzr
открвыается командная строка
Для консольного интерфейса все может оказаться довольно просто
https://stackoverflow.com/questions/49744471/sending-keystrokes-to-subprocess-using-pythons-popen
прицепляетесь к входному потоку и суете ей нажатие кнопки. Получится или нет зависит от того на каком уровне обрабатывается нажатие. может понадобиться флашить выходной буфер.

Есть и спец модули для этого.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version