我正在尝试创建一个CSV阅读器,它只包括所有6、7和8列中具有读数的数据。
我的数据是一年中每天的降雨量。但是,在我的代码中,有一个例外,即某些数据在几天内记录。数据记录的天数在row[6]
中指示,这导致前几天在列6、7和8中留下空白,即使它们是完整的。
因此,对于阅读器,我需要创建一个计数器,首先检查数据是否完整(没有空白),或者如果它有空白并且是另一个读数的一部分(在几天内记录),或不完整(没有读数)。到目前为止,我所做的是:
datalist = []
def read_complete_data():
''' Reads the file'''
filename = input("Enter file name:") #File must be in the same folder as the directory
with open(filename, 'r') as fileobj:
#open file for reading
reader = csv.reader(fileobj, delimiter = ',')
next(reader)
tempList = []
for row in reader:
if row[5] == "" and row[6] == "" and row[7] == "" :
tempList.append(row)
#Checks if the row is complete
elif row[5] != "" and row[6] != "" and row[7] != "":
numDay = int(row[6])
while numDay > 1:
datalist.append(tempList[1-numDay])
numDay -= 1
数据示例:
产品代码,站点编号,年份,月份,日期,降雨量,周期,质量 IDCJAC0009, 70247, 1988, 12, 21, 0, , Y IDCJAC0009, 70247, 1988, 12, 22, 0, , N IDCJAC0009, 70247, 1988, 12, 23, 0.2, 1, Y IDCJAC0009, 70247, 1988, 12, 24, 0.4, 1, Y IDCJAC0009, 70247, 1988, 12, 25, , Y IDCJAC0009, 70247, 1988, 12, 26, 34.8, 2, Y IDCJAC0009, 70247, 1988, 12, 27, 30.8, 1, N
如上所示,前两个数据样本不完整,因为没有指定测量的时间段。可以看到第5行的数据样本不完整,但是下一行的数据样本有一个测量期为2,这意味着第5行实际上是完整的,只是它是在两天而不是一天内测量的。这是一个测量2天的示例,但是还有更大的示例,其中最多将5天分组为一次测量。最后一列是数据的质量和是否进行质量检查。它需要是Y以获得完整数据。如我所补充的,第1行和第2行仍然不完整。但是第7行现在也不完整。
输出:基本上我想要实现的是读取CSV文件并从数据列表中删除不完整的数据行。使用这个临时列表,我试图使数据列表只包含完整的数据集。
期望的输出:
产品代码,站点编号,年份,月份,日期,降雨量,周期,质量 IDCJAC0009, 70247, 1988, 12, 23, 0.2, 1, Y IDCJAC0009, 70247, 1988, 12, 24, 0.4, 1, Y IDCJAC0009, 70247, 1988, 12, 25, , Y IDCJAC0009, 70247, 1988, 12, 26, 34.8, 2, Y
下一个(reader)行用于读取数据的标题而不是实际数据。我认为问题出在我如何编写for循环和while循环的方式上,使用一个临时列表,然后将其复制回主列表(称为datalist)。可能有一行代码我漏掉了,需要它才能正常工作。
我知道这可能是一个非常令人困惑的问题,因为这里没有给出数据,但我非常感谢能够帮助我找出我的代码和读取CSV文件中可能有什么问题。虽然很难解释清楚,但我还是把问题发到了这里。
delimiter = ','
显然是错误的...逗号在哪里? - undefined