2015-12-14 75 views
0

讓我詳細描述我的問題。python如何讀取塊結構文件

通常,我使用Python讀取的CSV文件,其結構是這樣的:

date1, value1_1, value1_2, value1_3, ... 
date2, value2_1, value2_2, value2_3, ... 
... 
在這種情況下

,一條線是一個數據片和我只是使用numpy.loadtxt()讀取他們。

但今天,我的同事給了我塊結構的文件,它看起來像:

date1 
value1_1, value1_2 
value1_3, ... 
date2 
... 

,這讓我頭疼......

有誰有這個什麼好的解決辦法?有沒有我可以用來處理這個文件的函數,還是我必須自己寫一個reading_messed_files()函數?

在此先感謝

+0

可能更容易從源頭上解決這個問題,並要求你的同事是他或她可以給你一個標準的CSV格式的文件來代替。 – Evert

+1

這些仍然是行分隔的字符串?有一些結構嗎? – tdelaney

+0

沒有一個這個文件看起來像樣的體面的例子,我們不能猜測如何解析它。 – tdelaney

回答

2

這不是一個完整的答案,但對於一個評論有點長。

numpy csv讀者如loadtxtgenfromtxt接受任何可迭代的輸入。雖然它通常是打開並逐行讀取的文件名,但它也可以是行列表,或者一次返回一行的生成器。

因此,您可以打開文件,逐行讀取它,將塊重新修改爲正常的csv行,並將它們傳遞給loadtxt。我記得使用它讀取多個文件(具有相同列),跳過行或讀取塊的示例。還有一些示例處理這些行以替換難以使用的分隔符。

我經常使用從剪切 - 粘貼示例派生的行列表來演示loadtxt

我在想是這樣的:

def foo(afile): 
    header=None 
    for line in afile: 
     strings = line.split(delimiter) 
     if len(strings)==1: 
      header = strings[0] 
     else: 
      line = delimiter.join([header]+strings) 
      yield line 

with open(filename) as f: 
    A = np.loadtxt(foo(f),....)