2013-10-01 37 views
1

我想完成的工作:從文件中的行中拉出最後8個字符,將它們分成兩個字符塊,比較這些字符與我的字典塊,並列出結果。這實際上是我在Python中做的第一件事,而我的頭腦在旋轉着所有的答案。
我想我需要基本的游泳訓練,而且每個答案似乎都是世界記錄自由潛水的入門書。切片只使用'with open'和'readline'在文件的最後一行工作

我使用下面的代碼(現在我有過H4 H1的評論,因爲它沒有返回那是在我的字典鍵):

d1 = {'30': 0, '31': 1, '32': 2, '33' : 3, '34': 4, '35': 5, '36': 6, '37': 7, '38': 8, '39': 9, 
    '41': 'A', '42': 'B', '43': 'C', '44': 'D', '45': 'E', '46': 'F'} 



filename = raw_input("Filename? > ") 

with open(filename) as file: 

for line in iter(file.readline, ''): 
    h1 = line[-8:-6] 
    h2 = line[-6:-4] 
    h3 = line[-4:-2] 
    h4 = line[-2:] 


    #h1 = d1[h1] 
    #h2 = d1[h2] 
    #h3 = d1[h3] 
    #h4 = d1[h4] 

    print h1,h2,h3,h4 

這裏是txt文件,我的一部分使用作爲輸入:

naa.60000970000192600748533031453442
naa.60000970000192600748533031453342
naa.60000970000192600748533031453242
naa.60000970000192600748533031453142
naa.60000970000192600748533031434442
naa.60000970000192600748533031434342
naa.60000970000192600748533031434242
naa.60000970000192600748533032363342

當我運行我的腳本,這裏是由上面的代碼生成的輸出:

最後一行看起來完全如我會期待。所有其他線路已經移動或已經放下字符。我對此感到不知所措......我嘗試了許多不同的方法來在Python中打開文件,但一直無法讓它們循環,或者遇到其他問題。

有沒有簡單的解決方法我只是想在這裏失蹤?謝謝,j

回答

0

我懷疑發生了什麼事是你讀的每一行在最後都有一個回車符,除了最後一行。所以最後一個是正確的,但其他人基本上是分割字符串的最後部分。 IOW,我覺得你的文件線條看起來像

>>> open("demo.txt").readline() 
'naa.60000970000192600748533031453442\n' 

其中\n是回車符號,而且是隻有一個字符(它不是\ + n)。我可以寫你的代碼像

with open(filename) as myfile: 
    for line in myfile: 
     line = line.strip() # get rid of leading and trailing whitespace 

     h1 = line[-8:-6] 
     h2 = line[-6:-4] 
     h3 = line[-4:-2] 
     h4 = line[-2:] 

     print h1,h2,h3,h4 

這對我產生

Filename? > demo.txt 
31 45 34 42 
31 45 33 42 
31 45 32 42 
31 45 31 42 
31 43 44 42 
31 43 43 42 
31 43 42 42 
32 36 33 42 

我們可以簡化h部分,但我們會離開,獨自現在。 :^)

+0

完美的工作!感謝帝斯曼。 我的輸出現在顯示爲這樣(我把h1 - 4放回): 文件名? > luns.txt 3 4 A 0 3 4 B 0 ... 最後一件事....是有一個簡單的方法來去除4個結果之間的空間?我目前正在使用以下語句打印它們: print h1,h2,h3,h4 我嘗試了h1 + h2 + h3 + h4,但它增加了數字,而不是將它們彼此相鄰打印。 – FooPlinger

+0

剛剛算出來: print「VM ID ----%s VMAX Lun ---」%line, print'%s%s%s%s'%(h1,h2,h3,h4) VM ID ---- naa.60000970000192600748533031453142 VMAX Lun --- 1E1B – FooPlinger

相關問題