在切割字符串时Python中的奇怪行为 - 返回空字符串?

时间:2012-11-14 03:42:51

标签: python windows python-2.7 slice

我有一个变量conts,其中包含二进制文件的内容(以rb作为模式读取)。现在,当我尝试通过切片获取字符串时,我希望看到变量的适当长度(显然也是内容),但我没有。

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

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'>

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

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

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

实现错误后

编辑:我打算从长度超过17个字节的字符串中获取字节0到6以及字节10到17。

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分:2)

也许不是

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

可是:

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

我的意思是先应该&gt;除了负步骤(第三个参数)指定的切片中的第二个索引?

根据你的编辑:

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

答案 2 :(得分:1)

conts[10:7]你的意思可能是conts[7:10]