字符串操作不能处理python字符串

时间:2014-03-03 14:46:32

标签: python string unicode

我正在使用xlrd将xls单元格读入字符串,之后没有任何字符串函数可以处理该字符串。

attribute_name = str(worksheet.cell_value(row,col))
attribute_name.strip()
attribute_name.lower()
print len(attribute_name)
if(len(attribute_name) > 8):
    print 'value' + str(ord(attribute_name[8]))
    print 'attributename:'+attribute_name+':'   

打印:

9
value32
attributename:TSA01_HE :
9
value32
attributename:TSA02_HE :

我主要想要删除属性名称末尾的空格。我错过了什么明显的东西?我已经尝试过替换等,但正如你所看到的,甚至.lower()都不起作用。

$ python --version Python 2.7.5

3 个答案:

答案 0 :(得分:2)

striplower不起作用;他们返回更改的值。所以你应该把他们的结果分配给旧变量。

attribute_name = attribute_name.strip().lower()

答案 1 :(得分:2)

str.XXX这样的方法总是返回新字符串而不是编辑原始字符串。这是因为字符串在python中是不可变的。同样,像+=这样的字符串上的运算符也会将变量重新绑定到新字符串:

In [755]: s='a'

In [756]: id(s)
Out[756]: 30887376

In [757]: s+='bc' #same as s=s+'bc'

In [758]: id(s) #identity of the variable has been changed
Out[758]: 301145192

因此,如果您希望对字符串的操作生效,请务必记住将结果分配回=

int s,float s,tuple s,frozenset等其他不可变项与str s的作用相同。例如,您不会期望i=3; i.__add__(10)生成i==13

答案 2 :(得分:0)

请注意strip()lower()都不会修改您应用它们的字符串;因此,您应该attribute_name = attribute_name.strip().lower()

示例:

>>> a = '   A   '
>>> a.strip().lower()
'a'
>>> a
'   A   '