这与我想要做的类似:breaking a 32-bit number into individual fields
这是我典型的“字符串”00000000110000000000011000000000
我需要把它分成四个相等的部分:
00000000
11000000
00000110
00000000
我需要将列表附加到一个新文本文件中,并将原始字符串作为标题。
我知道如果有空格之类的分隔符,但是我的字符串是连续的,那么如何分割字符串。
这些可以被认为是32位和8位二进制数,但它们只是文本文件中的文本(暂时)!
我是用Python编程的新手,所以请,我需要耐心的细节,没有概括。
不要以为我知道任何事情。
谢谢,
拉尔夫
答案 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'等等。