1

我有一个conts包含二进制文件内容的变量(以rbas 模式读取)。现在,当我尝试通过切片获取字符串片段时,我希望看到变量的正确长度(当然还有内容),但我没有。

这是我可以重现的代码,我不知道这里发生了什么:

hdr1, hdr2 = conts[0:6], conts[10:7]
print "----------------"
print len(conts)
print len(hdr1)
print len(hdr2)
print len(conts)
print "----------------"
print type(hdr1)
print type(hdr2)
print type(conts)

然而,我得到的输出是:

----------------
32174321
6
0
32174321
----------------
<type 'str'>
<type 'str'>
<type 'str'>

这里发生了什么?我认为切片会为每个切片创建一个新字符串?

蟒蛇版本:2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]

注意:切片之间的四字节间隙故意的。问题在于第二个切片返回一个长度为零的字符串,即使有足够的数据。我没有发现任何文件(切片时)需要相邻。

编辑:在意识到我的错误之后:我打算从一个长度超过 17 个字节的字符串中获取字节 0 到 6 和字节 10 到 17。

4

3 回答 3

4

这是一个空字符串的原因是因为您没有提到您想要切片的负步骤,假设您确实打算向后切片。

hdr1, hdr2 = conts[0:6], conts[10:7:-1]

会做你想做的事,注意-1让python知道你在切片时要后退而不是前进。

顺便说一句,这也导致了一种反转字符串的简单方法:

reverse = string[::-1]

切片格式为:

[start_index:end_index:step]


从您的编辑中,我可以看到这个答案对于您的目的可能是多余的,但这是您知道的很好的信息,所以我将保留它。
以下是您将如何执行您在编辑中所说的操作:

hdr1, hdr2 = conts[0:6], conts[10:17]
于 2012-11-14T03:46:37.173 回答
2

也许不吧

hdr1, hdr2 = conts[0:6], conts[10:7]

但:

hdr1, hdr2 = conts[0:6], conts[7:10]

我的意思是除了指定的负步骤(第三个参数)之外,切片中的第一个>第二个索引应该是什么?

因此,根据您的编辑:

hdr1, hdr2 = conts[0:6], conts[10:17]
于 2012-11-14T03:45:33.587 回答
1

conts[10:7]你可能是说conts[7:10]

于 2012-11-14T03:45:32.753 回答