Фон
У меня есть текстовый файл (это файл DAT), который я хочу импортировать в отформатированную программу как есть, хотя с некоторыми дополнительными строками, вставленными для выбора строк. Файл слишком велик, чтобы вносить незначительные изменения вручную.
Произвольная строка выбора имеет следующие определяющие свойства:
- начинается с
select_string_
, за которой следует уникальная строка $_
, который можно обнаружить с помощью регулярного выражения. - заканчивается элементом следующего набора строк: {'string_A', 'string_B', 'string_ C'}
Для каждой строки выбора точная строка, которую я хочу вставить, зависит от того, какой из этих элементов строки появляется в конце строки, и от известного сопоставления.
(Строки без выбора содержат произвольные строки; они не отображаются в некотором простом порядке. Кстати, за всеми выбранными строками за указанной выше уникальной строкой $_
следует _blah_
, который можно обнаружить с помощью регулярных выражений )
Итак, начиная со строки 1, мы имеем что-то вроде следующего:
select_string_$__blah_string_A
non_select_arbitrary_string
non_select_arbitrary_string
non_select_arbitrary_string
select_string_$__blah_string_A
non_select_arbitrary_string
non_select_arbitrary_string
non_select_arbitrary_string
select_string_$__blah_string_B
select_string_$__blah_string_B
non_select_arbitrary_string
non_select_arbitrary_string
select_string_$__blah_string_C
non_select_arbitrary_string
non_select_arbitrary_string
select_string_$__blah_string_C
Для данной строки выбора текст, который я хочу вставить, принадлежит после $_
, и я хотите, чтобы указанная строка c была вставлена, чтобы отразить следующую простую (широко определенную) биективную функцию f :
f = {(string_A, f (строка_A)), (строка_B, f (строка_B)), (строка_ C, f (строка_ C)))
Следующий словарь фиксирует это отображение:
{'string_A' : '*f*(string_A)', 'string_B' : '*f*(string_B)', 'string_C' : '*f*(string_C)'}
Итак, возьмем string_A
в качестве произвольного примера: во всех выбранных строках, заканчивающихся string_A
, после $_
должна быть вставлена f(string)
. Таким образом, я хочу, чтобы все выделенные строки, содержащие string_A
, выглядели следующим образом:
select_string_$_f(string_A)_blah_string_A
Обобщая этот произвольный пример, я задаю следующий вопрос:
Вопрос
Используя python 3, как мне сгенерировать следующий текст?
select_string_$_f(string_A)_blah_string_A
non_select_arbitrary_string
non_select_arbitrary_string
non_select_arbitrary_string
select_string_$_f(string_A)_blah_string_A
non_select_arbitrary_string
non_select_arbitrary_string
non_select_arbitrary_string
select_string_$_f(string_B)_blah_string_B
select_string_$_f(string_B)_blah_string_B
non_select_arbitrary_string
non_select_arbitrary_string
select_string_$_f(string_C)_blah_string_C
non_select_arbitrary_string
non_select_arbitrary_string
select_string_$_f(string_C)_blah_string_C
В более общем случае: используя python, как вставить строку в отдельные строки текстового файла, где вставленная строка зависит от содержимого строки и известного отображения?