解决方案:TypeError: ‘str‘ object does not support item assignment

解决 TypeError: ‘str’ object does not support item assignment

一、背景

当处理excel数据时,出现TypeError: 'str' object does not support item assignment错误,这代表字符串是一个不可变的类型,不能直接以赋值的形式修改字符串。如下:

a = 'abc'
print(type(a)) #查看a的类型(str 字符串)
print(a[1]) #通过a[1]的方式验证数据可以获取到
a[1]='d' #想通过直接赋值来修改字符串
print(a)

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
<class 'str'>
b
Traceback (most recent call last):
  File "D:\pythonProject\CSDN_Demo\practice.py", line 4, in <module>
    a[0]='d'
TypeError: 'str' object does not support item assignment

Process finished with exit code 1

显而易见,这种方式不能实现我们想要的结果-修改字符串的值。在这篇文章里,通过几个小例子验证不同的方法来实现我的目的。

二、解决方式

1、replace函数

replace函数:对字符串中的元素进行替换,返回一个新的字符串。不会对原有的字符串进行修改,通过此语句可验证原有字符串不可更改(print(a.replace(a[1],'d')))。

a = 'abc'
print(a)
a=a.replace(a[1],'d')
print(a)

运行结果

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
abc
adc

Process finished with exit code 0

2、换成列表进行更换

str类型不可变,但是list是可变的。我们可以将字符串转为列表类型,进行数值的修改,

a = 'abc'
print(a) 
a=list(a)  #将字符串强转为列表类型
print(type(a)) #输出a的类型(已转为列表)
a[1]='d'  #直接赋值即可
print(a) #输出修改后的a
print(''.join(a)) #通过''.join()函数,将不同的字符串无缝连接

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
abc #原数据
<class 'list'>  #处理后的数据类型
['a', 'd', 'c'] #列表型的字符串组成很显然不是我们想要的形式
adc #运行结果是我们想要的

Process finished with exit code 0

3、字符串切片方式

通过切片方式,替换我们想要替换的部分,在实际应用中我想要更换姓名的第二位,那这样我们就可以通过这种方式进行更换。

a = 'abc'
print(a) 
a=a[0]+"d"+a[2:] #a[0]代表第一位,a[2:]代表从第二位到最后。通过拼接的方式更改字符串。
print(a)

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
abc
adc

Process finished with exit code 0

4、重新赋值(简单粗暴,不能灵活处理)

将整个字符串都进行替换,这种方式对单一的数据可以使用,但是处理大量数据时,将增加很多不必要的代码,而且要保证替换的数据全部知悉才行。

a = 'abc'
print(a) 
a='adc' #直接替换整个字符串
print(a)

运行结果:

D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\CSDN_Demo\practice.py 
abc
adc

Process finished with exit code 0

三、结论

在这里,我提供了四种方式来满足我得需求,四种中选其优,我更倾向于利用字符串切片的方式,这样可以在固定位置替换成我想要替换的内容,大家也可以根据自己的需要去使用。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值