使用Python将连续字符串分解为组件?

时间:2011-09-02 16:00:48

标签: python

这与我想要做的类似:breaking a 32-bit number into individual fields

这是我典型的“字符串”00000000110000000000011000000000

我需要把它分成四个相等的部分:

00000000

11000000

00000110

00000000

我需要将列表附加到一个新文本文件中,并将原始字符串作为标题。

我知道如果有空格之类的分隔符,但是我的字符串是连续的,那么如何分割字符串。

这些可以被认为是32位和8位二进制数,但它们只是文本文件中的文本(暂时)!

我是用Python编程的新手,所以请,我需要耐心的细节,没有概括。

不要以为我知道任何事情。

谢谢,

拉​​尔夫

5 个答案:

答案 0 :(得分:9)

这应该做你想要的。有关详细信息,请参阅comprehensions

>>> s = "00000000110000000000011000000000"
>>> [s[i:i+8] for i in xrange(0, len(s), 8)]
['00000000', '11000000', '00000110', '00000000']

答案 1 :(得分:3)

+1罗伯特的回答。至于'我需要将列表附加到一个新的文本文件,原始字符串作为标题':

s = "00000000110000000000011000000000"
s += '\n' + '\n'.join(s[i:i+8] for i in xrange(0, len(s), 8))

将给出

'00000000110000000000011000000000\n00000000\n11000000\n00000110\n00000000'

因此我将每个'字节'放在一个单独的行上,正如我从你的问题中所理解的那样......

编辑:一些注意事项可以帮助您理解: 列表[](请参阅here)包含您的数据,在本例中为括号内的字符串。列表中的第一项检索如下:

mylist[0]
在Python中,字符串本身也是一个对象,具有特定的methods that you can call。所以'\n'(表示回车)是'string'类型的对象,你可以用你的列表作为参数调用它的方法join()

'\n'.join(mylist)

然后,列表中的元素与每个元素之间的字符串'\n'“连接”在一起。结果不再是列表,而是字符串。两个字符串可以一起添加,因此

s += '\n' + '\n'.join(mylist)

添加到s(已经是一个字符串),右边的部分本身就是字符串的“和”。 (我希望清除一些东西?)

答案 2 :(得分:1)

使用索引运算符[]可以打破字符串,列表和元组。 使用索引操作符内的:运算符可以在那里实现字段。 尝试类似:

x = "00000000110000000000011000000000"
part1, part2, part3, part4 = x[:8], x[8:16], x[16:24], x[24:]

答案 3 :(得分:1)

作为参考,这里有一些将字符串分成相等长度部分的替代方法:

>>> import re
>>> re.findall(r'.{1,8}', s, re.S)
['00000000', '11000000', '00000110', '00000000']

>>> map(''.join, zip(*[iter(s)]*8))
['00000000', '11000000', '00000110', '00000000']

将序列分成n长度组的zip方法记录为here,但它仅适用于长度可被n整除的字符串(这不是问题这个特殊的问题)。如果字符串长度不能被n整除,则可以使用itertools.izip_longest(*[iter(s)]*8, fillvalue='')

答案 4 :(得分:0)

你需要一个子串

x = 01234567
x0 = x[0:2]
x1 = x[2:4]
x2 = x[4:6]
x3 = x[6:8]

因此,x0将保持'01',x1将保持'23'等等。