2017-02-16 21 views
0

Это должно быть очень просто, но я ищу эффективный способ его выполнения.substitue string по индексу без использования регулярных выражений

Я знаю, что я мог бы разделить строку на две части и вставить новое значение, но я пытался заменить каждую строку между индексами 22-26 следующим образом:

line.replace(line[22:26],new_value)

Проблемой

Однако эта функция заменяет все в строке, которая похожа на шаблон в line[22:26].

В примере ниже, я хочу, чтобы заменить отмеченное число с номером :

enter image description here

Вот результаты. Обратите внимание на замену 1 с 17 в нескольких местах:

enter image description here

Таким образом, я не понимаю поведение replace команды. Есть ли простое объяснение того, что я делаю неправильно?

Почему я не хочу RE

Значения между индексом 22-26 являются не объединены в форме.

Примечание: Я использую python 3.5 на машинах Unix/Linux.

+0

'строки [22:26]' дает вам строку '1' и пространствам. Вы используете этот шаблон для замены всех вхождений в этой строке на 'new_value'. –

ответ

1

str.replace заменяет 1 образец подстроки другим в строке.

например.

'ab cd ab ab'.replace('ab', 'xy') 
# produces output 'xy cd xy xy' 

аналогично,

mystr = 'ab cd ab ab' 
mystr.replace(mystr[0:2], 'xy') 
# also produces output 'xy cd xy xy' 

что вы могли бы сделать, вместо того, чтобы заменить только символы в позиции 22-26

line = line[0:22] + new_value + line[26:] 

Кроме того, глядя на ваши данные, кажется, для меня текстовый файл с фиксированной шириной. В то время как мое предложение будет работать, более надежный способ обработки этих данных состоял бы в том, чтобы прочитать его &, прежде чем обрабатывать данные, отделить разные поля в записи.

Если у вас есть доступ к pandas библиотеке, она предоставляет полезную функцию только для чтения fixed-width files