从CSV中删除整行(如果空白)

时间:2016-06-23 18:12:16

标签: python csv matplotlib scientific-computing

我有一个来自仪器的数据文件,以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

所以我需要添加一行代码,如果Res的行可以读取。 Ch1或Res。 Ch2为空,然后在追加到最终数据集之前跳过所有变量的整行。这样len(Resistance1)= len(Temp)和每个Res。 Ch1测量匹配到合适的温度。

2 个答案:

答案 0 :(得分: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 :(得分: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

基本上,这会将Resistivity1条目与相应的Temperature条目配对,而对于Resistivity2则相同。