2016-08-24 122 views
0

我有兩個文本文件,內容如下(分別爲file1.txtfile2.txt);python結果不一致

MKKVEAIIRPFKLDEVKIALVNAGIVGMTVSEVRGFGRQKGQTERYRGSEYTVEFLQKLKVEIVVEDNQVDMVVDKIIAAARTGEIGDGKIFISPVEQVIRIRTGEKNTEAV 

​​3210

我需要在此基礎上的字符串,我知道的索引取字符。現在,我需要獲取索引值之前的20個字符和索引值之後的20個字符,這使得總共包含41個字符(包括索引字符)。 這裏是我的代碼

with open('file1.txt', 'r') as myfile: 
    x = 50 
    data=myfile.read() 
    str1 = data[x:x+1+20] 
    temp = data[x-20:x] 
    print temp+str1 

file1.txt一個輸出爲SEVRGFGRQKGQTERYRGSEYTVEFLQKLKVEIVVEDNQVD這是正確的。

問題是如果我在file2.txt上運行相同的代碼並將索引(x的值)更改爲56,則我應該得到的輸出爲AASHTDLKVVGGASFVSGESYNTDGNGHGTHVAGTVAALDN。相反,我得到ASHTDLKVVGGASFVSGESYNTDGNGHGTHVAGTVAALDNT 這是爲什麼?

+0

@DanielLee我這樣做,是 – Ghauri

+0

您的問題是你有問題表達你想要什麼。你想讓文字給你41字符鏈,它的中心有你字符串的第56個字符嗎?如果是這樣,你應該使用x = 55而不是56 – WNG

+0

不能重現。作爲一個附註,你應該添加一個檢查'x <20',否則當slice的'from'位置爲負時你會得到有趣的結果。 –

回答

0

好吧,如果您檢查,文件1(第一行)中的索引50是Y,左邊的20個元素從SEV...開始,這意味着從索引30開始。這是您對file1的結果,您認爲這是正確的。現在

M K K V E A I I R P F K L D E V K I A L V N A G I V G M T V S E V R G F G R Q K G Q T E R Y R G S E Y T V E F L Q K L K V E I V V E D N Q V D M V V D K I I A A 
A Q T V P Y G I P L I K A D K V Q A Q G Y K G A N V K V G I I D T G I A A S H T D L K V V G G A S F V S G E S Y N T D G N G H G T H V A G T V A A L D N T T G V 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 

,用於file2的(第二行),需要設置索引56這是在文件2 N,並從左側20個元素從開始ASH...,從索引36。這是預期的結果,我不開始你明白你爲什麼說這是錯的。

第三行表示索引號

而且見下圖: enter image description here

+0

謝謝你的澄清。答案現在標記。 – Ghauri

0
temp = data[x-20:x] 

會給你

temp = data[36:56] 

即您的字符串的36至55(含)的字符

字符串開始於字符0,所以數據[36]的確是你的第二個一,即你的字符串

沒有錯誤的字符第37屆這裏,只是一個計數器問題

你可能實際上想要設置x = 55(即中間的字是你的字符串的第56屆,因爲它有55索引,因爲索引在零蟒蛇開始)

+0

好吧,我很困惑。 – Ghauri

0
with open('file1.txt', 'r') as myfile: 
    x = 50 
    data=myfile.read() 
    print data[x-20:x+21] 

這需要一個切片從位置x-20到位置X + 21。這會給你一個41字符的片。

data2,56返回: ASHTDLKVVGGASFVSGESYNTDGNGHGTHVAGTVAALDNT - 您的代碼是正確的。