2009-12-20 56 views
1

我試圖搜索一個文件,其中包含搜索詞的行在用戶定義的搜索詞前後找到並打印,同時還有許多行。編碼我迄今是:文件搜索:TypeError

f = open(f, 'r') 
d = {} 
for n, line in enumerate(f): 
    d[n%numb] = line.rstrip() 
    if search_term in line: 
     for i in rang(n+1,n+1+numb): 
      print d[i%numb] 
     for i in range(1, numb): 
      print f.next().rstrip() 

但我在d [%麻木] = line.rstrip() 不支持的操作數類型(一個或多個),用於獲取%一類型錯誤: 'INT' 和 'STR'

幫助將是巨大的感謝

+0

你有沒有考慮過使用'grep -C'? – 2009-12-20 10:25:55

+0

麻木應該是多少行之前或之後,你想看到搜索字詞後發現。也就是說,如果您希望在找到該單詞前後看到5行,則指定numb = 5 – ghostdog74 2009-12-20 11:13:53

+1

下次應該正確剪切並粘貼。請參閱http://stackoverflow.com/questions/1927276/searching-a-file/1927413#1927413再 – ghostdog74 2009-12-20 11:18:09

回答

1

您還沒有指定什麼numb是,但我猜它是這樣的:

numb = sys.argv[1] 

sys.argv是字符串數組,而不是整數。嘗試將字符串轉換爲整數:

numb = int(sys.argv[1]) 
0

n%numb可以具有不同的含義,具體取決於n和麻木的類型。如果它們都是數字,則意味着「取模數」,我認爲這是您的意圖。如果n是一個字符串,那麼它意味着做%格式化。如果n是一個數字而numb是一個字符串,Python不知道該做什麼並引發TypeError。你看了異常的錯誤信息嗎?它應該說「不支持的操作數類型爲%:'int'和'str'」,它會告訴你你需要知道的一切。

一旦你解決了這個問題,我不認爲你的程序會做你想做的事情 - 有幾個問題。 1)如果您的搜索字詞位於第一個麻木行中,那麼您將會嘗試從字典中讀取尚未插入的行。

2)代碼中的最後一個循環讀取下一個麻木線,但不搜索它們,因此任何出現的搜索詞都會丟失。

3)使用模數來保持行的緩衝區是聰明的,但有一個更好的方法。看看collections.deque類,