- У меня есть список, содержащий некоторые строки.
- У меня есть набор файлов, которые могут содержать или не содержать эти строки.
- Мне нужно заменить эти строки на модифицированную версию строки в каждом экземпляре файлов. (например,
string1_abc
->string1_xyz
,string2_abc
->string2_xyz
). По сути, подстрока, которая должна быть заменена и/или изменена, является общей для всех элементов в списке.
Есть ли какой-либо оптимизированный или простой способ сделать это? Самый наивный алгоритм, который я могу придумать, смотрит на каждую строку в каждом файле и для каждой строки, перебирает каждый из элементов в списке и заменяет это с помощью line.replace
. Я знаю, что это дало бы мне O (MNQ) сложность где m = number of files
, n = number of lines per file
и q = number of items in the list
Самый оптимизированный способ заменить строку в наборе файлов из списка
Примечание:
- Все размеры файлов не очень большой, так что я не уверен, что чтение строки по строка vs делает file.read() в буфер лучше?
- q также не очень большой. Список составляет около 40-50 наименований.
- m довольно большой.
- n может идти до 5000 строк.
Кроме того, я играл с Python на стороне и не очень привык к нему. Кроме того, я ограничен в использовании Python 2.6
Есть ли вероятность того, что ваша целевая строка перейдет в разрыв строки? т. е. 'string1_abc == stri \ nng1_abc' для этой цели? – dawg
Использование выражения генератора может быть лучше – Viney
Регулярное выражение может более эффективно выполнять совпадение (т. Е. Один проход). Захватите матч и используйте его, чтобы посмотреть, какую замену вам нужно сделать. – pvg