Вы можете выполнить замену символов с помощью изменяемого стандарта array
типа:
>>> import array
>>> long_sentence = "This is a long long long long sentence"
>>> indices = [[6, "is"], [8, "is a"], [18, "long"], [23, "long"]]
>>> temp = array.array('c', long_sentence) # Could replace long_sentence too
>>> for end, substr in indices:
... temp[end-len(substr)+1:end+1] = array.array('c', '.'*len(substr))
...
>>> temp
array('c', 'This .... long .... .... long sentence')
Новая строка может быть записана в выходной файл с помощью:
temp.tofile(your_file)
(Сама строка возвращается temp.tostring()
.)
Преимущество этого подхода состоит в том, что предотвращает создание слишком большого количества новых строк путем нарезки , что требует времени. Другое преимущество состоит в том, что он эффективен для памяти : обновление строки выполняется на месте (это показано по адресу, найденному в temp.buffer_info()
, который остается постоянным). Побочным эффектом является то, что эта экономия памяти может позволить вашему компьютеру избежать перестановки и, следовательно, ускорить процесс.
Вы также можете ускорить процесс с помощью кэширования '.'*len(substr)
строк через специальный класс DotString
с помощью специального метода __getitem__
, где DotString[4]
возвращает '....'
и т. Д.
PS : для большинства попыток оптимизации сначала используется профилирование . Вы можете профилировать свою программу с помощью:
python -m cProfile -o stats.prof <Python program name and arguments>
Затем вы можете проанализировать время с помощью:
python -m pstats stats.prof
Первая команда, которую вы обычно запускаете, это sort time
(сортировка функций по времени, потраченному строго внутри кода функции), а затем stats 10
(первые 10 самых длинных выполнений функции).
Это можно сделать для усеченной версии входного файла, чтобы время выполнения не было слишком долгим. Это скажет вам, какие функции занимают больше всего времени и должны быть в центре внимания оптимизации.
PPS : тип 'c'
, использованный в приведенном выше примере, предназначен для байтовых строк (обычно кодирование ASCII). Строки символов (иначе говоря, строки Unicode) могут обрабатываться с 'u'
.