2013-08-01 50 views
0

我是新來的蟒蛇。如何讓一個項目在Python枚舉()

我有兩個文件,一個包含符號(字),另一種是地圖文件。

這兩個文件是文本文件。地圖文件確實包含表單提要。

我想找到的地圖文件,它是一個包含 一個在地圖文件符號線以上的線。

我有以下代碼。

Osymbolfile="alistofsymbols" 
mapfile="amapfile" 
maplines = (line.rstrip('\n\f') for line in open(mapfile)) 
for line in Osymbolfile: 
    line = (line.rstrip('\n')) 
    print "line= ",line 
    linecount = 0 
    for index, scanline in enumerate(maplines): 
     if line in scanline: 
      print "scanline=",scanline 
      print "index=",index 
     else: 
      linecount = linecount + 1 
    print "= ",linecount 

print "index=",index後,我已經試過print maplines[index-1],但我得到一個錯誤。

如何獲得maplinesindex'行以上的行?

+2

不要只說「我得到一個錯誤」。用回溯顯示錯誤。通常情況下,它會告訴你_exactly_什麼是錯的,即使你不明白,誰是試圖幫助你願意,並可以解釋給你的人。 – abarnert

回答

2

您的maplines對象是生成器表達式;這些按需生產物品並且不可轉位。

你可以使用列表理解來代替:

maplines = [line.rstrip('\n\f') for line in open(mapfile)] 

現在你有一個可轉位列表對象,而不是。更好的是,你現在可以多次循環這個對象;你不能用發電機做到這一點。

但是處理您的案件的正確方法,是存儲前行只:

with open(mapfile) as maplines: 
    prev = None 
    for line in maplines: 
     if something in line: 
      return prev 
     prev = line 
+0

+1用於存儲上一行。一個更通用的解決方案可以通過一個'collections.deque'完成,它可以讓你指定'maxlen'參數。然後'deque'將儲存到最後一個'n'項目,當你添加一個新項目時會自動刪除最舊的項目。然後你可以使用'prev [-x]'來獲取第'x'項。 – kindall

相關問題