2016-06-23 65 views
2

我有一個輸出爲CSV的儀器的數據文件。讀取文件和相應的列是沒有問題的,但是,由於儀器的輕微更改,數據文件已更改,我不知道如何更改我的代碼以仍然讀取文件。從CSV中刪除整行(如果空白)

f = open('Rotator_050816.dat') 
lines = f.readlines() 
i = 0 
while (lines[i]<>"[Data]\n"): 
    i+=1 
i = i + 2 
Temp = []; Field = []; Resistance1 = []; Resistance2 = []; 
while(i<len(lines)): 
    data = lines[i].split(",") 
    Temp.append(float(data[3]) 
    Field.append(float(data[4]) 
    Resistance1.append(float[12]) 
    Resistance2.append(float[13]) 
i+=1 

Temp = np.array(Temp) 
Field_T = np.array(Field)/10000. 
Resistance1 = np.array(Resistance1) 
Excitation1 = np.array(Excitation1) 

這是以前使用的MWE。如果CSV文件沒有空白條目,這沒有問題,但是,如果存在空白條目,則表示問題爲len(Resistance1)≠len(Temp),因此無法正確繪製它們。所以,我的數據文件現在看起來是這樣的:

Example Data File

所以我需要添加的代碼行如果行的水庫,可以讀取。 Ch1或Res。 Ch2爲空,然後在追加到最後一組數據之前,跳過整行所有變量。這樣len(Resistance1)= len(Temp)和每個Res。 Ch1測量結果與正確的溫度相匹配。

+0

這需要[MCVE](MWE)。什麼是[數據]?另外,'<>'是無效的Python語法。另外,while循環將永遠不會終止。 –

+4

@MorganThrapp''''是有效的Python 2. –

+0

@StefanPochmann嗯,我站在糾正。我不知道。 –

回答

1

1)以只讀方式打開文件,並讓所有的線

lines_in_my_file = [] 
with open("my_file.csv", "r") as my_file: 
    lines_in_my_file = my_file.readlines() 

2)再次打開該文件,這一次是在寫模式,並將所有的非空行到文件:

with open("my_file.csv", "r") as my_file: 
    for line in lines_in_my_file: 
     if line.strip().strip(",") != "" 
      my_file.write(line) 

請記住,這將刪除網絡涵蓋了僅僅空格,製表符或逗號的任何行。因此,任何行看起來像這些:

,,,, (this line has only commas) 
    (this line has only spaces) 
\n (this line is just a newline character) 

...將被刪除。

1

這裏是我已經實現了我的工作的解決方案:

while (i<len(lines)): 
data = lines[i].split(",") 
    if float(data[4]) >30000 and float(data[4]) <50000: 
     Temp_II.append(float(data[3])) #As K 
     Field_II.append(float(data[4])) #As Oe 
     Position_II.append(float(data[5])) #As Degree 
     #loop for Resistivity1 column cleanup 
     if data[12]!= '': 
      Resistivity1_II.append(float(data[12])) 
      Temp1_II.append(float(data[3])) 
     #loop for Resistivity2 column cleanup 
     if data[13]!= '': 
      Resistivity2_II.append(float(data[13])) 
      Temp2_II.append(float(data[3]))       
i+=1 

基本上,這對了是不是空白與相應的溫度項與同爲Resistivity2的Resistivity1條目。