从某个位置开始替换字符串的一部分
Substituting part of a string starting at a position
我正在尝试有条件地更新从指定位置开始的字符串的一部分。我有这样的东西:
i = 0
bre = 'newtext'
with open(myfile, "r") as f:
data = f.readlines()
for line in data:
if i > 0 and line[98] == '1':
print 'ok'
line[1562] = bre
i += 1
# write line to a file
我收到的错误是:
Traceback (most recent call last):
File "test.py", line 19, in <module>
line[1562] = bre
您正试图将一个字符串元素更改为另一个字符串
line = line[:1562] + bre + line[1563:]
# to skip the length of your bre
line = line[:1562] + bre + line[(1562+len(bre)):]
例子
bre = 'newtext'
myString = "asdfghjkl"
#replace character at index 2 with my string bre
myString = myString [:2]+ bre+ myString [3:]
print(myString)
asnewtextfghjkl
字符串也不像列表那样可变
您不能转到索引并更改字符
例子
s = "abc"
a[1] = 'z' # is wrong because 'str' object does not support item assignment
s = a[:1] + 'z' + a[2:] #but this will work
# this takes the pointer s and points it a completely new string
有趣的事实:
这就是您可以使用字符串作为字典中的键而不是列表的原因。字符串可以被散列
在 python 中,字符串是不可变的。此外,当您执行 line[1562] = bre
时,您正试图将一个字符串 (bre
) 分配给另一个字符 (line[1562]
)。幸运的是在python 中很简单地解决了这个问题。执行此操作的一个好方法是将所有先前的 line
字符串与 bre
和 line
字符串之后的字符串连接起来。最后,您将其分配给 var line
。
像
line = line[:1562] + bre + line[1563:]
但是请注意,当您这样做时,data
对象中的行不会改变。您只是在更改它的副本。如果你想读取一个文件行然后将它写入文件中,你需要做一些像
这样的事情
i = 0
bre = 'newtext'
with open(myfile, "r") as f:
data = f.readlines()
for x,line in enumerate(data):
if i > 0 and line[98] == '1':
print 'ok'
data[x] = line[:1562] + bre + line[1563:]
i += 1
with open(new_file, 'w') as f
for line in data:
f.write(data)
你在问题中提供的上下文太少,无法给你一个完整的答案,但我发现你的代码有一个主要问题:你试图分配给一个 str
对象,但是 str
是不可变的。
如果您报告了完整的回溯,您会注意到类似以下内容:
TypeError: 'str' object does not support item assignment
因此您必须从已有的字符串开始创建一个新字符串,例如:
s = 'I like dogs more than mice!'
t = 'cat'
n = 7
u = s[:n] + t + s[n + len(t):]
print(u)
# I like cats more than mice!
我正在尝试有条件地更新从指定位置开始的字符串的一部分。我有这样的东西:
i = 0
bre = 'newtext'
with open(myfile, "r") as f:
data = f.readlines()
for line in data:
if i > 0 and line[98] == '1':
print 'ok'
line[1562] = bre
i += 1
# write line to a file
我收到的错误是:
Traceback (most recent call last):
File "test.py", line 19, in <module>
line[1562] = bre
您正试图将一个字符串元素更改为另一个字符串
line = line[:1562] + bre + line[1563:]
# to skip the length of your bre
line = line[:1562] + bre + line[(1562+len(bre)):]
例子
bre = 'newtext'
myString = "asdfghjkl"
#replace character at index 2 with my string bre
myString = myString [:2]+ bre+ myString [3:]
print(myString)
asnewtextfghjkl
字符串也不像列表那样可变
您不能转到索引并更改字符
例子
s = "abc"
a[1] = 'z' # is wrong because 'str' object does not support item assignment
s = a[:1] + 'z' + a[2:] #but this will work
# this takes the pointer s and points it a completely new string
有趣的事实: 这就是您可以使用字符串作为字典中的键而不是列表的原因。字符串可以被散列
在 python 中,字符串是不可变的。此外,当您执行 line[1562] = bre
时,您正试图将一个字符串 (bre
) 分配给另一个字符 (line[1562]
)。幸运的是在python 中很简单地解决了这个问题。执行此操作的一个好方法是将所有先前的 line
字符串与 bre
和 line
字符串之后的字符串连接起来。最后,您将其分配给 var line
。
像
line = line[:1562] + bre + line[1563:]
但是请注意,当您这样做时,data
对象中的行不会改变。您只是在更改它的副本。如果你想读取一个文件行然后将它写入文件中,你需要做一些像
i = 0
bre = 'newtext'
with open(myfile, "r") as f:
data = f.readlines()
for x,line in enumerate(data):
if i > 0 and line[98] == '1':
print 'ok'
data[x] = line[:1562] + bre + line[1563:]
i += 1
with open(new_file, 'w') as f
for line in data:
f.write(data)
你在问题中提供的上下文太少,无法给你一个完整的答案,但我发现你的代码有一个主要问题:你试图分配给一个 str
对象,但是 str
是不可变的。
如果您报告了完整的回溯,您会注意到类似以下内容:
TypeError: 'str' object does not support item assignment
因此您必须从已有的字符串开始创建一个新字符串,例如:
s = 'I like dogs more than mice!'
t = 'cat'
n = 7
u = s[:n] + t + s[n + len(t):]
print(u)
# I like cats more than mice!