2014-10-01 77 views
0

我有一個巨大的整數文本文件。我需要逐行處理它們並根據每行中的數字計算將它們保存在單獨的列表中加載一個巨大的文本文件

最終目標是將數字(第1行除外)加載到兩個列表中 - A =奇數位置B =號碼在偶數位置

文件樣本:

1 3 4 5 
3 4 56 73 
3 4 5 6 

目前我做的是:

with open(filename) as f: 
    for line in f: 
     line = line.split() 
     line_num = line_num + 1 
     if line_num == 1: 
      # do something 
      pass 
     if line_num > 1: 
      line = [int(i) for i in line] 
      for x in range(len(line)): 
       # do something 
       pass 

的問題是,它正在很多的時間。有沒有更好的方法來做到這一點?

+3

你確定這是不是你說的處理需要很長時間?運行需要多長時間?如果你評論你的計算需要多長時間? – Joe 2014-10-01 13:34:12

+0

我需要逐行閱讀才能處理它。如果我刪除了計算,則只需要更少的時間。但是,如何提高逐行讀取的性能? – 2014-10-01 13:41:20

+0

@NEW_PYTHON_LEARNER你已經在閱讀文件行:http://stackoverflow.com/questions/8009882/how-to-read-large-file-line-by-line-in-python – 2014-10-01 13:43:16

回答

0

而不是每次檢查行是否是第一行,在開始處理第一行。不需要檢查循環內部。

with open(filename) as f: 
    line = next(f) 
    # do something for the first line 

    # handle rest lines 
    for line in f: 
     line = line.split() 
     line = [int(i) for i in line] 
     for field in line: 
      # do something with field 
      pass 

我刪除line_num,因爲在原始代碼中沒有用處。但是,如果你需要它,使用enumerate

with open(filename) as f: 
    line = next(f) 

    for line_num, line in enumerate(f, 2): 
     ... 
+0

這將如何提高性能? – Andrey 2014-10-01 13:55:58

+0

@Andrey,它不會大幅提升性能。我想讓OP知道循環內的檢查是不需要的。 – falsetru 2014-10-01 13:57:55

1

聽起來像一個有效率的numpy的:

X = numpy.loadtxt(filename) #can specify if you know for sure all are integers 
odds = X[1::2] 
evens = X[::2]