如何找到什么是角色

时间:2017-08-23 10:54:28

标签: python string python-3.x

我有一个字符串cb(来自我无法控制的输入):

foo     

    bar

如果我将此字符串转换为列表:

>>> print(cb.splitlines())
['foo \t', '', '    bar']

我需要\t,但不是空字符串,也不是前导(可能是尾随)空格。所以我稍微调整一下:

cb_formatted = list(filter(None, cb.splitlines()))
for l in cb_formatted:
    l = l.strip()

但是:

>>> print(cb_formatted)
['foo \t', '    bar']

领先的空间仍在这里!所以也许那些不是空间......但它们是什么?

所以我这样做:

    cb_formatted = list(filter(None, cb.splitlines()))
    print(cb_formatted)
    for l in cb_formatted:
        l = l.strip()
        for c in l:
            print(c + "-" + ord(c))

但是:

Traceback (most recent call last):
  File ".\foobar.py", line 61, in <module>
    print(c + "-" + ord(c))
TypeError: must be str, not int

我试了ord(str(c))而没有更多的运气。

如何找到这些字符是什么?

而且,或者,有没有比strip()更好的方法来修剪它们?

5 个答案:

答案 0 :(得分:3)

您无法连接字符串和整数对象。 ord(c)返回一个整数(数字)。 尝试:

print(c + "-" + str(ord(c)))

此外,strip接受一个参数,该参数是一个字符串,用于定义应该删除的所有字符:https://docs.python.org/2/library/string.html#string.strip

答案 1 :(得分:2)

最初的问题源于这种方法:

cb_formatted = list(filter(None, cb.splitlines()))
for l in cb_formatted:
    l = l.strip()

您期望分配给l来修改列表,但事实并非如此。它只是分配给一个变量l,它也已经从列表中分配了字符串,因为字符串不能被变异。此外,.strip()还会删除制表符。我认为这应该产生你想要的行为:

cb_formatted = [line.strip(" ") for line in filter(None, cb.splitlines())]

答案 2 :(得分:0)

在行

for l in cb_formatted:
    l = l.strip()

将已剥离元素的名称设置为用于循环中元素的名称(l)。因此,在每次迭代时,最后一个被剥离的项目将丢失,并且循环l将包含最后一个被剥离的项目。 此外,您根本没有更改列表本身。

对于其他错误,请参阅@ johk95的回答

答案 3 :(得分:0)

当您删除列表中的元素时,您将创建新字符串,但不会更改列表。

要获得所需的结果,请使用:

cb_formatted = [ l.strip(' ') for l in cb.splitlines() if l ]

答案 4 :(得分:0)

您可以对列表中的每个元素使用str.strip来完成输出,并存储生成的新字符串。假设你有一个行列表:

>>> lines = ['foo \t', '', '    bar']
>>> [s.strip(' ') for s in lines if s]
['foo \t', 'bar']