2017-02-16 47 views
0

它應該很容易,但我正在尋找一種有效的方式來執行它。使用索引替換字符串而不使用正則表達式

我知道我可以在字符串分割成兩個部分並插入新的價值,但我試圖替代指標22-26之間每行如下:

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

的問題

但是,該函數會替換與line[22:26]中的模式類似的行中的所有內容。

在下面的例子中,我想與數更換標記數:

enter image description here

下面是結果。注意更換117在幾個地方:

enter image description here

因此我不明白replace命令的行爲。有什麼我做錯了簡單的解釋?

爲什麼我不想RE

指數22-26之間的數值是形式不統一

注意:我在Unix/Linux機器上使用python 3.5。

+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