Форум сайта python.su
Хотел подробное описание регэкспа, не знаю что такое %s. А ладно сам разберусь!
Офлайн
%s - это не регексп, это старый не модный string formatting: http://docs.python.org/release/2.5/lib/typesseq-strings.html
модный здесь: http://docs.python.org/library/string.html#format-string-syntax
Офлайн
Спасибо, учу re!
методы строк работают быстрее, чем re
Отредактировано (Окт. 28, 2011 10:23:35)
Офлайн
Если хотите быстрее, то читайте построчно и в каждой строке меняйте то, что нужно. Только не readlines, пожалуйста.
Офлайн
Как читать построчно, если не readlines? написать свою функцию, которая по \n будет определять где конец строки? Когда С изучал, там предлагался именно такой метод.
Я обдумывал такой вариант парсинга конфига, без использования re:
1) Прочитать все строки с помощью readlines
2) каждую строку преврать в list из слов с помощью split
3) Сравнить первое слова с шаблоном
4) если первое слово совпадает с шаблоном, то работать уже с этой строкой
5) после изменения, собрать обратно list в строку c помощью join
6) записать в файл
Думаю, что операции split/join по времени будут выполняться так же как и конструкция для re.
Прощу прощения за демогогию, если это не разумно, и для такой простой задачи лучше использовать re, то я закончу эту дискуссию!
Офлайн
readlines читает весь файл. Конечно для вашего случая это неважно, но и не нужно. Если же файл большой, то это уже ненужный расход памяти.
Вам по идее достаточно прочитать строку, заменить в ней чего надо если надо и записать ее в выходной файл.
В конце процесса переименовать выходной файл во входной.
Читать по строкам так:
for line in open(filename):
print line
Офлайн
Спасибо, попробую
Офлайн
Если есть желание - давайте результат сюда, посмотрим, подправим.
Офлайн
Результат конечно напишу!
for line in open(filename) это не тоже самое что и readline? Построчное чтение, гораздо медленее чем readlines.
Офлайн
может быть и медленнее. Напишите оба варианта и попрофилируем. Если вам так важно быстродействие, то выберете самый быстрый. Хотя для админских задач быстродействие на мой взгляд некритично. Впрочем если вы будете апдейтить десятки тысяч конфигов таким образом, то да.
Офлайн