2014-09-05 45 views
1

我有n文件數量,我想從m中讀取數據來自每個文件中特定行的列數。我想以,m列表或數組結尾,其中列表或數組的每一行都是來自其中一個文件的行。什麼是做到這一點的方法?或者,這甚至是最好的辦法嗎?我可以定義不同的列表或數組(每個列表或數組都有相似的名稱,可能只是用數字索引),但處理幾個不同的列表或數組似乎通常更復雜和更復雜,而不是僅處理一個具有兩個維度的列表或數組。Python:從多個文件讀取數據到2D numpy數組或列表的方法

例如...

file_names = ("file1" "file2" "file3" "file4") # so in this case n is 4 
for name in file_names do: 
    ### somehow save the m columns as a row in an array or list 
print resulting_list_or_array 

一些可能相關的注意事項:m列我想從文件中讀取不在文件中的第一列m(比方說我需要跳過skip_num列,而我的確知道什麼nm是。

另外,我想讀的行不是第一行,而是說了,row_num行。

回答

1

您可以用做一個通用的代碼內置模塊globnumpy.genfromtxt,如下圖所示,其中的許多test*.txt文件第二條線將建成一個2-d陣列的例子在結尾處:

from glob import glob 

import numpy as np 

def read(fname, skip_header=1): 
    with open(fname) as f: 
     for i in range(skip_header): 
      f.next() 
     return f.next() 

a = np.genfromtxt((read(fname) for fname in glob('test*.txt'))) 
+0

是'glob'通常與Python一起安裝的標準模塊(比如,如果我在Linux機器上的Python中運行'glob import glob',它很可能會工作)還是必須自己安裝? – Joshua 2014-09-07 21:16:48

+0

@Joshua yes ...'glob'是一個標準模塊...你試過這個答案嗎? – 2014-09-08 21:26:44

+0

還沒有。如果我想讀取文件中的特定行,是否需要遍歷'f.next()'到達該行所需的次數? – Joshua 2014-09-09 13:47:40

0

您的問題似乎明確定義

result = [] 

file_names = ("file1", "file2", "file3", "file4") 
for name in file_names do: 
    f = open(name) 
    for i, line in enumerate(f): 
     if i == 122: # note this will be line_no + 1 
      data = line.strip().split() 
      result.append([data[0], data[5], data[6], data[9]]) 

print result # a dynamically created 2D array 
+0

如果我想讀取不是第一行的特定行,該怎麼辦?我編輯了我的問題以反映這一點。 – Joshua 2014-09-05 20:24:39

+0

這就是'枚舉'和'if'語句正在做的事情。 – OregonTrail 2014-09-05 20:25:07

+0

如果'm'是40,該怎麼辦?看起來,在你的以'result.append'開始的行中,列出每個元素特別是將是笨拙的。會像'result.append([數據[skip_num:skip_num + m]])'工作嗎? – Joshua 2014-09-05 21:17:39

相關問題