Заменить строку на питон - PullRequest
0 голосов
/ 27 ноября 2011

у меня есть список

http://lincoln.com/picture/2453345/flower.jpg
http://lincoln.com/picture/2354345/flower1.jpg

заменить на:

http://lincoln.com/picture/4453345/flower.jpg
http://lincoln.com/picture/4354345/flower1.jpg

я пытался:

f=open('fileinput','r')
f.replace('2453345/flower.jpg','4453345/flower.jpg')

но у меня больше line.i я провожу много времени :( Пожалуйста, покажите мне, как заменить линию. БЛАГОДАРЯ

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Замена части строки с помощью регулярных выражений

См. Следующее решение:

import re
regexp_test = re.compile('\/\d')
result = regexp_test.sub(lambda x: '/'+str(int(x.group()[1])+2), file_content)

Он будет увеличивать каждую цифру после косой черты ("/") на 2, поэтому "/2" будет заменен на "/4" и так далее ...

Результат даст вам:

>>> print result
http://lincoln.com/picture/4453345/flower.jpg
http://lincoln.com/picture/4354345/flower1.jpg

, если file_content определено следующим образом:

>>> file_content = '''http://lincoln.com/picture/2453345/flower.jpg
http://lincoln.com/picture/2354345/flower1.jpg'''

Использование содержимого файла в виде строки

Как правильно заметил @jsalonen, у вашего скрипта есть еще одна проблема: он использует файл напрямую, как строку. Сначала вы должны прочитать его содержание:

file_content = open('fileinput','r').read()

и затем работайте с переменной file_content, которая является строкой и содержит все содержимое прочитанного вами файла.

1 голос
/ 27 ноября 2011

Я предполагаю, что когда вы запускаете f.replace, вы получаете AttributeError: 'file' object has no attribute 'replace', поскольку - хорошо - replace - это строковый метод, а f - это файловый объект.

Один из способов замены - сначала прочитать все содержимое файла в строку, затем запустить строку и переписать измененную строку обратно в файл:

f=open('fileinput', 'r')
data=f.read()
f.close()
f.open('fileoutput', 'w')
f.write( data.replace('2453345/flower.jpg','4453345/flower.jpg') )
f.close()

Если вы хотите выполнить замену на строку, просто разбейте данные на строки с помощью split и выполните итерации по нему:

for line in data.split('\n'):
   f.write( line.replace('xxx/flower.jpg', 'yyy/flower.jpg') )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...