Python 中带字符串的二进制文件

binary with string in Python

我是 python 初学者。 我写了这段代码,但它无法成功运行。 有人能理解为什么吗?

if __name__ == '__main__':
    # if "pro" begin with "test", delete "test" from "pro".
    pro = "001001111010010101001"
    test = "0010"

    if pro.startswith(test):

        pro = pro.lstrip(test)
        # My ideal -> pro == "01111010010101001" 

        print pro
    print pro

此代码不输出任何内容。

lstrip(chars) returns 字符串的副本,其中所有字符都已从字符串的开头删除。因此,如果您传递包含 1,0 的 test,它会删除 pro 中的所有字符(pro 仅包含 0,1)。

>>> pro = pro.lstrip('10')
>>> pro
''

相反,您可以只使用切片 :

>>> if pro.startswith(test):
...    pro=pro[len(test):]
... 
>>> pro
'01111010010101001'

str.lstrip() 删除 所有字符 出现在您给它的 字符集 中。由于您在该集合中同时提供了 01,并且该字符串仅由 个零和一个组成,因此您删除了整个字符串。

换句话说,str.lstrip() 不会 删除前缀。它一次删除一个字符,前提是该字符在参数中命名:

>>> '0123'.lstrip('0')
'123'
>>> '0123'.lstrip('10')
'23'
>>> '0123'.lstrip('20')
'123'

改为删除前 len(test) 个字符:

pro = pro[len(test):]

这是因为 lstrip 从给定的集合中删除了所有左侧字符,因此删除了所有内容:

我认为你需要:

pro = pro.startswith(test) and pro[len(test):] or pro

这将从 pro 的开头删除 test(如果存在)。

额外的..这也行得通:

>>> pro = "001001111010010101001"
>>> test = "0010"
>>> if pro.startswith(test):
       pro = pro.partition(test)[-1]
       print pro

01111010010101001