当处理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
显而易见,这种方式不能实现我们想要的结果-修改字符串的值。在这篇文章里,通过几个小例子验证不同的方法来实现我的目的。
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
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
通过切片方式,替换我们想要替换的部分,在实际应用中我想要更换姓名的第二位,那这样我们就可以通过这种方式进行更换。
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
将整个字符串都进行替换,这种方式对单一的数据可以使用,但是处理大量数据时,将增加很多不必要的代码,而且要保证替换的数据全部知悉才行。
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
在这里,我提供了四种方式来满足我得需求,四种中选其优,我更倾向于利用字符串切片的方式,这样可以在固定位置替换成我想要替换的内容,大家也可以根据自己的需要去使用。