2012-12-29 27 views
0

我正在爲攪拌器創建一個簡單腳本,我需要一些幫助,從通過python創建的文件中獲取一些數據。將文件中的數據讀入python中的不同數組中

這個文件得到了結構如下圖所示:

name first morph 
values -1.0000 1.0000 
data 35 0.026703 0.115768 -0.068769 
data 36 -0.049349 0.015188 -0.029470 
data 37 -0.042880 -0.045805 -0.039931 
data 38 0.000000 0.115775 -0.068780 
name second morph 
values -0.6000 1.2000 
data 03 0.037259 -0.046251 -0.020062 
data 04 -0.010330 -0.046106 -0.019890 
… 

等多個2k行,P

我需要的是建立一個循環,閱讀我通過線的數據線,並把價值分爲三個不同的數組:名稱[]值[]和數據[]取決於文件行的第一個字。

Manualy it should be like that: 
names.append('first morph') 
values.append((-1.0000,1.0000)) 
data.append((35, 0.026703, 0.115768, -0.068769)) 
data.append((36, -0.049349, 0.015188, -0.029470)) 
data.append((37, -0.042880, -0.045805, -0.039931)) 
data.append((38, 0.000000, 0.115775, -0.068780)) 
names.append('second morph') 
values.append((-0.6000,1.2000)) 
… 

我不知道爲什麼我創造的那種的atempts「在文件行:」循環創建比完整的數據更多的錯誤,我不知道爲什麼會超出範圍,或者沒有得到正確的數據

請幫助如何自動執行該過程,而不是寫每一行的manualy,因爲我已經將所需參數導出到文件中。

+3

後,你現在所擁有的。 – Blender

回答

2
names = [] 
values = [] 
data = [] 
with open('yourfile') as lines: 
    for line in lines: 
     first, rest = line.split(' ', 1) 

     if first == 'name': 
      names.append(rest) 

     elif first == 'values': 
      floats = map(float, rest.split()) 
      values.append(tuple(floats)) 

     elif first == 'data': 
      int_str, floats_str = rest.split(' ', 1) 
      floats = map(float, floats_str.split()) 
      data.append((int(int_str),) + tuple(floats)) 

爲什麼你需要它這樣?您如何知道您的數據和值列表中的下一個名稱的起始位置?

+0

我將在名稱和值數組索引之間建立連接。對於數組數組,我會添加一個參數等價於當前索引名稱數組,這將增加每次文件中出現'名稱'。 – regg

+0

你確定你不想要一個包含名稱,值和數據屬性的變形對象(或只是元組)的列表嗎? –

0

下面是一個簡單的Python「中系」的解決方案...你可以叫processed.py ...

fp = open("data1.txt", "r") 

data = fp.readlines() 
fp1 = open("processed.py", "w") 

fp1.write("names = []\nvalues=[]\ndata=[]\n") 

for line in data: 
    s = "" 
    if "name" in line: 
     s = "names.append('" + line[5:].strip() + "')" 
    elif "values" in line: 
     s = "values.append((" + ", ".join(line[7:].strip().split(" ")) + "))" 
    elif "data" in line: 
     s = "data.append((" + ", ".join(line[5:].strip().split(" ")) + "))" 

    fp1.write(s + "\n"); 

fp1.close() 
fp.close() 
相關問題