Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python将连续字符串分解为组件?_Python - Fatal编程技术网

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

使用Python将连续字符串分解为组件?,python,Python,这与我想做的类似: 这是我典型的“字符串”00000000 1100000000000100000000 我需要把它分成四个相等的部分: 亿 11000000 00000110 亿 我需要将列表附加到一个新的文本文件中,原始字符串作为标题 如果有空格之类的分隔符,我知道如何分割字符串,但我的字符串是连续的 这些可以被认为是32位和8位二进制数,但它们只是文本文件中的文本(目前) 我是Python编程的新手,所以请告诉我,我需要耐心的细节,不要泛化 别以为我知道什么 谢谢, 拉尔夫您需要一个子字符

这与我想做的类似:

这是我典型的“字符串”00000000 1100000000000100000000

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

亿

11000000

00000110

亿

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

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

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

我是Python编程的新手,所以请告诉我,我需要耐心的细节,不要泛化

别以为我知道什么

谢谢,


拉尔夫

您需要一个子字符串

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

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

这应该满足您的要求。有关更多详细信息,请参阅

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

使用索引操作符
[]
可以断开字符串、列表和touple。 使用索引操作符内部的
操作符,可以在那里获得字段。 尝试以下方法:

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

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

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”
(表示回车符)是“string”类型的对象,您可以使用列表作为参数调用它的方法
join()

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

s += '\n' + '\n'.join(mylist)
添加到
s
(它已经是一个字符串),右侧部分本身就是字符串的“和”。
(我希望这能澄清一些问题?

以下是一些将字符串拆分为等长部分的替代方法供参考:

>>> 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
方法是有文档记录的,但它只适用于长度可被n整除的字符串(对于这个特定问题,这不是问题)。如果字符串长度不能被n平均整除,您可以使用
itertools.izip_longest(*[iter(s)]*8,fillvalue='')

谢谢,但是什么是['00000000',11000000','00000110','00000000']?这是一个包含固定位置字符串的“列表”。请尝试使用例如'mylist=['00000000','11000000','00000110','00000000']`mylist[0]将为您提供第一个元素。另请参阅并感谢Remi,以“00000000 110000000000011000000”为例,字符串需要从文本文件中读取,因此我认为对于一个长文件,您可以一次读取32位字符串:使用open('data.txt')作为f:A2=f.read(3)bits=f.read(33).strip()(.strip()去掉尾随空间)谢谢大家,带有:运算符的索引运算符[]似乎是键!!我需要用模式解析一个文本文件,一个典型的模式是:A1 00000000000000 11100000000000000000000000000 11111 000000000000000000000000000000000000 11000110000000000000000000000001100000100000000000000000000000000000000 110000000100000000000000000000 1111111111111100000000000000000000000 1111111111111000000000000000000000000 11000000000001000000000000 110000000000000000000000000000 11000000000000000110000001100000000110000000000011000000000000000001000000000011000000000000000000000000111000000确定,确保检查可用的;了解他们就是力量。。。例如,s.split()将在空格上分割图案,生成32位字符串的列表!如果我有['00000000'、'11000000'、'00000110'、'00000000'],为什么我需要问这个问题?我不明白你使用['00000000'、'11000000'、'00000110'、'00000000'时说了什么?在解析文件中的行之前,字符组成将是未知的。或者['00000000'、'11000000'、'00000110'、'00000000']是否为预期输出?谢谢RalphYeah谢谢KevinDTimm这很好很简单。我必须解析文件以填充x。处理输出并读取下一行,然后再次执行。拉尔夫