2015-08-28 34 views
2

我有一個腳本,基本上讀取文本文件並創建8個列表。如果它從第1行讀取文件,它會很好地工作。我需要它從177行開始讀取文本文件到352行(這是最後一行)。如何在Python 2.6中的特定行之後處理數據?

這是我的腳本和變化。我沒有收到任何錯誤,但沒有任何結果。程序掛起有無反應:

f = open("Output1.txt", "r") 

lines = [line.rstrip() for line in f if line != "\n"] #Get all lines, strip 
newline chars, and remove lines that are just newlines. 


NUM_LISTS = 8 

groups = [[] for i in range(NUM_LISTS)] 



listIndex = 0 


for line in lines: 


    while line > 177: #here is the problem 


     if "Transactions/Sec for Group" not in line: 
      groups[listIndex].append(float(line)) 
      listIndex += 1 
      if listIndex == NUM_LISTS: 
       listIndex = 0 
       value0 = groups[0] 
       value1 = groups[1] 
       value2 = groups[2] 
       value3 = groups[3] 
       value4 = groups[4] 
       value5 = groups[5] 
       value6 = groups[6] 
       value7 = groups[7] 



json_file = 'json_global.json' 

json_data = open(json_file) 

data = json.load(json_data) 

for var1 in range(0, 11): 

    a = value0[var1] 
    b = value1[var1] 
    c = value2[var1] 
    d = value3[var1] 
    e = value4[var1] 
    f = value5[var1] 
    g = value6[var1] 
    h = value7[var1] 

    var2 = var1 + 57 

    item = data[var2]['item'] 

    cmd = data[var2]['command'] 


    var1+= 1 

    print item, cmd, a, b, c, d, e, f, g, h) 
+0

謝謝@kittykittybangbang – Gusbok

+0

sed -n'177,352p'| python scriptname – Marichyasana

+0

不客氣,@Gusbok。 :) – kittykittybangbang

回答

2

的問題是,lines是在線路的列表中,所以當你做 -

for line in lines: 

line是一個字符串,該行的不是指數,所以接下來的while循環是真實的因此它應該在那裏進入一個無限循環,因爲在while循環內你永遠不會改變line並且條件總是爲真。

而不是做所有這些,我建議您使用itertools.islice,從177行迭代到最後。示例 -

import itertools 
for line in itertools.islice(lines,177,None): 
    if "Transactions/Sec for Group" not in line: 
     groups[listIndex].append(float(line)) 
     listIndex += 1 
     if listIndex == NUM_LISTS: 
      listIndex = 0 
      value0 = groups[0] 
      value1 = groups[1] 
      value2 = groups[2] 
      value3 = groups[3] 
      value4 = groups[4] 
      value5 = groups[5] 
      value6 = groups[6] 
      value7 = groups[7] 
+0

令人驚歎!有用!我試圖接受你的答案,但我必須等一下。謝謝 – Gusbok

3

line包含每一行,而不是行號的內容。即使做了,這將失敗,因爲你會在環跳由於第一線的數量不超過177這裏有一種方法做你想要什麼:

for linenumber, line in enumerate(lines, 1): 
    if linenumber > 177: 
     do_stuff(line) 

enumerate()需要一個迭代,並返回一組可迭代的元組。 1參數告訴它從哪個索引開始;它默認爲0。根據你想要做的事情調整if linenumber > 177:中的數字和數字。

這樣做的另一種方法是使用itertools.islice(),也可以在his answer中提到的Anand S Kumar。下面是使用islice()一個版本,不將整個文件讀入內存事先:

from itertools import islice 

with open('Output1.txt', 'r') as f: 
    lines = (line.rstrip() for line in f if line != '\n') 
    for line in islice(lines, 177, None): 
     do_stuff(line) 

這將有效地切片線,如果你做了線[177:](這是另一種解決方案)。

請注意,您不包含僅包含換行符的行,因此文件中的第177行與您的程序中的行177不同。

+0

@Cyphrase?我應該替換:for line in line: – Gusbok

+0

@Gusbok,是的,用行代替':line> 177:'用'代替linenumber,代入line enumerate(lines,1):if linenumber> 177:'。 – Cyphase

相關問題