如何用Python将连续字符串拆分为组件?

6 投票
5 回答
5085 浏览
提问于 2025-04-17 01:16

这跟我想做的事情很像:把一个32位的数字拆分成单独的部分

这是我常见的“字符串”:00000000110000000000011000000000

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

00000000

11000000

00000110

00000000

我还需要把这些部分加到一个新的文本文件里,并把原始字符串作为标题。

我知道如果字符串中有空格这样的分隔符,我可以怎么拆分,但我的字符串是连续的,没有分隔。

这些可以看作是32位和8位的二进制数字,但现在它们只是文本文件里的文本!

我刚开始学习Python编程,所以请给我详细的步骤,不要泛泛而谈。

不要假设我懂任何东西。

谢谢,

拉尔夫

5 个回答

3

这里有几种方法可以把字符串分成相等长度的部分,供你参考:

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

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

关于如何用 zip 方法把一串东西分成n个长度的小组,可以在这里找到详细说明。不过要注意,这个方法只适用于长度能被n整除的字符串(这对这个问题来说不是个大问题)。如果字符串的长度不能被n整除,你可以使用 itertools.izip_longest(*[iter(s)]*8, fillvalue='') 这个方法。

3

对罗伯特的回答表示赞同。关于“我需要把列表追加到一个新文本文件中,并把原始字符串作为标题”的问题:

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

这样做会得到

'00000000110000000000011000000000\n00000000\n11000000\n00000110\n00000000'

这样每个“字节”就会在单独的一行上,正如我从你的问题中理解的那样……

编辑:一些帮助你理解的说明: 一个列表 [](可以在 这里查看)包含了你的数据,在这个例子中是字符串,数据放在方括号之间。列表中的第一个项目可以这样获取:

mylist[0]

在Python中,字符串本身也是一个对象,有一些特定的方法可以调用。所以 '\n'(表示换行)是一个类型为“字符串”的对象,你可以用你的列表作为参数调用它的方法 join()

'\n'.join(mylist)

列表中的元素会用字符串 '\n' 连接在一起,每个元素之间都有这个换行符。结果不再是一个列表,而是一个字符串。两个字符串可以相加,因此

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

会把 s(已经是一个字符串)和右边的部分(它本身是字符串的“和”)相加。 (希望这样能让你明白一些事情?)

10

这段代码应该能满足你的需求。想了解更多细节,可以查看这个链接,里面讲了关于列表推导式的内容。

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

撰写回答