2012-11-14 98 views
1

我有一個變量conts它包含一個二進制文件的內容(以rb作爲模式讀取它)。現在,當我嘗試通過切片獲取字符串的片段時,我期望看到變量的適當長度(顯然也是內容),但我不這樣做。在切分字符串時Python中的奇怪行爲 - 返回空字符串?

下面是代碼,我可以重現此,我的想法是怎麼回事上:但是

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

回答

4

的原因,這是一個空字符串是因爲你沒有提到你想要的切片一個negitive一步,假設你是故意向後切片。

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

會做你想要什麼,注意-1,讓蟒蛇知道要倒退切片,而不是前鋒時。

順便說一句,這也導致了一種簡單的方法來扭轉字符串:

reverse = string[::-1] 

切片的格式爲:

[start_index:end_index:step]


從您的編輯,我可以看到這個答案可能對你的目的而言是多餘的,但是這對你來說是很好的信息,所以我會放棄它。
這裏是你會怎麼做你在你的編輯說:

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

conts[10:7]你可能意味着conts[7:10]

+0

權,第二個參數是結束*標記*不長。 - >在鍵盤上頭。謝謝'*臉紅*' – 0xC0000022L

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] 
+0

是的,我的壞。我真的很困惑(編程語言之間跳過太多,我猜)'*臉紅*' – 0xC0000022L

+0

@ 0xC0000022L有時會發生這種情況))) –