я следующий код, который я думаю, что должно работать, но не кажется:поиск Python для строки в строке
old_name = 'Some User'
new_name = 'New User'
with open(complete_filename, 'r') as provisioning_file:
lines = provisioning_file.read()
# if the old_name is in this file
if old_name in lines:
file_found = 1
with open(complete_filename + '.new', 'w') as new_provisioning_file:
for line in lines:
line = line.replace(old_name, new_name)
new_provisioning_file.write(line)
# provisioning_file.write(re.sub(old_name, new_name, line))
complete_filename
Файл будет множество конфигурационных файлов, я был тестирования с выбором файлов XML, пример фрагмент одного из них ниже:
<reg reg.1.address="1234" reg.1.label="Some User" >
<reg.1.auth reg.1.auth.password="XXXXXXXXXX" reg.1.auth.userId="1234" />
<reg.1.outboundProxy reg.1.outboundProxy.address="sip.example.com" />
<reg.1.server reg.1.server.1.address="sip.example.com" reg.1.server.1.expires="300" reg.1.server.2.expires="300" />
<reg.1.serverFeatureControl reg.1.serverFeatureControl.dnd="0" />
</reg>
код находит old_name
строку и переходит в if
заявление, а затем открывает complete_filename.new
для письма, но он, очевидно, никогда не находит старое имя в строк и просто выводит файл как есть (т. е. он не заменяет new_name
для old_name
).
Как видно из кода, я также экспериментировал с re.sub с аналогичными результатами. Что мне не хватает?
Спасибо! Это имеет смысл. Думаю, тогда альтернативой будет 'lines = provisioning_file.readlines()'? Будет ли это другим способом решения? а затем итерации, как и я. – btongeorge
Да, и на самом деле это может быть предпочтительным, так как тогда вам не нужно вручную писать символы новой строки в вызове 'write'. Но вам придется изменить условное выражение на 'if any (old_name в строке для строки в строках)', так как 'in' не выполняет частичное совпадение содержимого содержимого. (например, '" a "в [" ab "," cd "]' оценивается как False) – Kevin
Я пробовал это, но получил синтаксическую ошибку условного выражения, любой шанс, который вы могли бы показать мне это в фрагменте в контексте? – btongeorge