aivs
Окт. 26, 2011 20:14:55
Хотел подробное описание регэкспа, не знаю что такое %s. А ладно сам разберусь!
Ed
Окт. 26, 2011 20:38:52
aivs
Окт. 27, 2011 17:15:34
Спасибо, учу re!
методы строк работают быстрее, чем re
Ed
Окт. 28, 2011 12:12:58
Если хотите быстрее, то читайте построчно и в каждой строке меняйте то, что нужно. Только не readlines, пожалуйста.
aivs
Окт. 28, 2011 23:22:36
Как читать построчно, если не readlines? написать свою функцию, которая по \n будет определять где конец строки? Когда С изучал, там предлагался именно такой метод.
Я обдумывал такой вариант парсинга конфига, без использования re:
1) Прочитать все строки с помощью readlines
2) каждую строку преврать в list из слов с помощью split
3) Сравнить первое слова с шаблоном
4) если первое слово совпадает с шаблоном, то работать уже с этой строкой
5) после изменения, собрать обратно list в строку c помощью join
6) записать в файл
Думаю, что операции split/join по времени будут выполняться так же как и конструкция для re.
Прощу прощения за демогогию, если это не разумно, и для такой простой задачи лучше использовать re, то я закончу эту дискуссию!
Ed
Окт. 29, 2011 00:48:34
readlines читает весь файл. Конечно для вашего случая это неважно, но и не нужно. Если же файл большой, то это уже ненужный расход памяти.
Вам по идее достаточно прочитать строку, заменить в ней чего надо если надо и записать ее в выходной файл.
В конце процесса переименовать выходной файл во входной.
Читать по строкам так:
for line in open(filename):
print line
aivs
Окт. 29, 2011 10:13:21
Спасибо, попробую
Ed
Окт. 29, 2011 12:16:33
Если есть желание - давайте результат сюда, посмотрим, подправим.
aivs
Окт. 29, 2011 14:54:29
Результат конечно напишу!
for line in open(filename) это не тоже самое что и readline? Построчное чтение, гораздо медленее чем readlines.
Ed
Окт. 29, 2011 21:04:16
может быть и медленнее. Напишите оба варианта и попрофилируем. Если вам так важно быстродействие, то выберете самый быстрый. Хотя для админских задач быстродействие на мой взгляд некритично. Впрочем если вы будете апдейтить десятки тысяч конфигов таким образом, то да.