- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
import os
import codecs
from xml.dom import minidom
dir = 'C:\\Users\\pee\\AppData\\Roaming\\Thunderbird\\Profiles\\your_profile_here.default\\extensions'
target = 'install.rdf'
TB_id = '{3550f703-e582-4d05-9a08-453d09bdfdc6}'
maxVer = '5.*'
# open file, parse xml, find Thunderbird ID, change maxVersion, save file
def verchanger(rdf):
found = False
print(rdf)
xmldoc = minidom.parse(rdf)
idlist = xmldoc.getElementsByTagName("em:id")
for i in idlist:
if i._get_firstChild().nodeValue == TB_id:
print('Thunderbird ID was founded in em:id node with index ', idlist.index(i)+1)
print(i.parentNode.getElementsByTagName("em:maxVersion")[0]._get_firstChild().nodeValue)
if i.parentNode.getElementsByTagName("em:maxVersion")[0]._get_firstChild().nodeValue == maxVer:
print('file already updated, skipping')
break
else:
found = True
i.parentNode.getElementsByTagName("em:maxVersion")[0]._get_firstChild().nodeValue = maxVer
print('new value is: ', i.parentNode.getElementsByTagName("em:maxVersion")[0]._get_firstChild().nodeValue )
if found:
xmldoc.writexml(codecs.open(rdf,'w','utf-8'), encoding='utf-8')
# get list of files with full paths
filelist = [dir + '\\' + x + '\\' + target for x in os.listdir(dir)]
for i in filelist:
verchanger(i)
Lure Of Chaos 05.07.2011 13:06 # +8
АЦИНИТИ КООТ!!!
вообще-то, предполагается, что автор понимает, в чем говно.
и что это не лаба.
Lure Of Chaos 05.07.2011 13:08 # +1
я все жду, когда копирайт доберется и до Document Object Model, и появится ццшная имплементация freedom :)
gegMOPO4 06.07.2011 18:40 # +2
За Python 3 — хвалю. ;)
Захардкоженные виндовые пути можно указывать как raw strings: r'C:\Users\pee\...'. А можно и прямые слеши вместо обратных использовать, винда не обидится.
Для построения пути следует использовать не конкатенацию с '\\', а os.path.join.
_get_firstChild — приватный метод, деталь реализации. Он доступен, но использование его считается плохим тоном. Следует использовать firstChild. На самом деле тут могут быть подводные камни.
Вместо idlist.index(i) следует использовать итерацию по enumerate или по индексу.
Вместо codecs.open можно использовать просто open и указывать encoding именованным параметром.
i.parentNode.getElementsByTagName("em:ma xVersion")[0] можно выделить в отдельную переменную.
Вместо громоздкого xml.dom.minidom лучше использовать xml.etree.ElementTree.
bugmenot 06.07.2011 19:27 # +4
не прикармливай
omgiafs 07.07.2011 04:29 # 0
roman-kashitsyn 12.07.2011 22:27 # 0
1. Хардкод в топку. Даёшь аргументы командной строки.
2. Функции длиннее 5 строк навевают унылые мысли.
3. Основная ошибка всех новичков (да и не только новичков) - в одном блоке кода перемешивается несколько уровней абстракции.
gegMOPO4 12.07.2011 22:46 # −1
roman-kashitsyn 13.07.2011 12:24 # 0
gegMOPO4 13.07.2011 13:46 # 0
или просто
?
В этом и состоит отличие скриптов, что в них внутри записаны параметры, которые проще изменить (если понадобится), отредактировав скрипт, чем вводить вручную каждый раз при запуске. Так что всё правильно сделал.
lig 13.11.2011 23:36 # 0
Лучше использовать с параметром и его значением по умолчанию, причем значение должно браться так: os.path.expanduser('~/AppData/Roaming/Thunderbird/Profiles')
а оттуда с помощью configparser из profiles.ini путь к дефолтному профилю.
по умолчанию программа должна думать сама.
gegMOPO4 14.11.2011 13:10 # 0
Если уж делать автоопределение параметров и разбор командной строки, то следует ещё выделить отдельный модуль, написать документацию, маны, создать README, INSTALL, COPYING, AUTHORS, THANKS, ChangeLog, NEWS, TODO и запакетироать для дистрибьюции. Давайте, вперёд, не буду отговаривать.
lig 14.11.2011 13:20 # −1
скрипты пишут на bash, а на python пишут программы. я писал на питоне программы для автоматизации своих действий и прекрасно всегда пользовался батарейками для парсинга аргументов и вычисления нужных мне умолчаний.
вы виндовые свои привычки выкинули бы и начинали бы уже линуксом пользоваться, как нормальный человек, может быть тогда и говно перестали бы писать.
gegMOPO4 14.11.2011 13:23 # 0
lig 13.11.2011 23:27 # 0
gegMOPO4 14.11.2011 12:52 # 0
Эту батарейку очень недавно стали включать. И чем оно поможет?
lig 14.11.2011 12:57 # 0
а поможет оно чтобы не вспоминать а набрать script.py -h и увидеть все его возможные параметры
carsten 10.07.2011 17:45 # +1
TheHamstertamer 17.09.2011 18:07 # 0
С прибытием в гвардию говнокодеров
omgiafs 14.11.2011 04:30 # 0
TheHamstertamer 17.12.2011 21:07 # +1
Ц:\Пользователи\ссать
lucidfoxGovno 18.12.2011 01:57 # −3