DarkWood
@DarkWood

Python: замена ключевого слова значениями из списка по порядку следования?

Здравствуйте.

Имеется текстовый файл с ключевым словом. Имеет примерно такой вид:

Sometext

Keyword

More sometext

Keyword

etc

Также имеется список (другой текстовый файл), из которого я хочу получить замены ключевого слова. Ключевое слово одно и то же, значения же для замены - все разные.

Вид списка с заменами:

[attachmentid=1923106]
[attachmentid=1923108]
[attachmentid=1923110]
[attachmentid=1923112]
[attachmentid=1923114]

и так далее.

Я составил следующий скрипт на Python (версия 3.5.1):

list = []
with open('d:/attachment.txt','r') as inf:
   list = inf.read()
file = open('d:/new_1.txt', 'r')
text = file.read()
num_of_words = text.count('Image')
for i in range(0, num_of_words):
    text = text.replace('Image', list, 1)
file.close()
file = open('d:/new_1.txt', 'w')
file.write(text)
file.close()


attachment.txt - хранилище для списка замен (attachmentid), new_1.txt - файл, где производится замена.

Сей код подставляет весь список для каждого вхождения ключевого слова. Мне же хотелось бы, чтобы для первого вхождения ключевого слова был вставлен первый пункт списка, для второго - второй и так далее:

Sometext

Keyword = [attachmentid=1923106]

More sometext

Keyword = [attachmentid=1923108]

etc

Подскажите, пожалуйста, как сие исправить.

P.S. Python не знаю лишь чуть менее, чем совсем. Код собран при помощи гугла и ответов со StackOverflow.
  • Вопрос задан
  • 507 просмотров
Решения вопроса 2
@fireSparrow
В строчке
text = text.replace('Image', list, 1)

Нужно добавить индекс - чтобы на каждом шаге подставлялся только элемент с этим индексом, а не весь список:

text = text.replace('Image', list[i], 1)

Но это будет нормально работать только если количество заменяющих строчек гарантированно не меньше, чем число мест для замены. Иначе - получите ошибку.
Ответ написан
aRegius
@aRegius
Python Enthusiast
Здравствуйте.

Дополню Александра, что list у вас, скорее всего, будет иметь вид одной строки, типа "мама мыла раму"... А потому его нужно будет разбить сплитом - list.split() - иначе list[0] вернет лишь первый элемент строки (в приведенном мною примере букву "м").

>>> text = '''
[attachmentid=1923106] 
[attachmentid=1923108] 
[attachmentid=1923110] 
[attachmentid=1923112] 
[attachmentid=1923114]
'''
>>> text[0]
'\n'
>>> text[1]
'['


>>> new_text = text.split()
>>> new_text[0]
'[attachmentid=1923106]'
>>> new_text[1]
'[attachmentid=1923108]'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы