我正在将大型ASCII文件读入python,其中包含某些大气化合物的排放数据。我使用以下函数从列中读取数据,该函数返回一个包含列中值的列表:
def get_col(col):
f = open(file_name, 'r')
col_data = []
# Loop over lines and extract column of interest
for line in f:
line = line.strip()
columns = line.split()
col_data.append(float(columns[col]))
f.close()
return col_data
到目前为止还不错。但是,我遇到了这样一个问题:在某些行中,由于某种原因,数据不是预期的格式。作为一个例子,我从我的数据中包括了四行。前两行是数据的外观,后两行是出错的地方。你知道吗
17 127 15 3.61 0 0 0 3.61 0 0 0 0 0 0
17 128 15 3.61 0 0 0 3.61 0 0 0 0 0 0
17 129 15 11.1 2 0.0 0 0.0 0 2.1 2 3.6 4 0.0 1 0.0 0 0.0 0 4.7 3 0.6 2 0.00
17 130 15 11.1 2 0.0 0 0.0 0 2.1 2 3.6 4 0.0 1 0.0 0 0.0 0 4.7 3 0.6 2 0.00
Correct row 4:
17 130 14 11.12 0.00 0.00 2.12 3.64 0.01 0.01 0.00 4.73 0.62 0.00
在最后两行中,第1-3列中的值仍然正确,但从第4列开始,在每个值的第一个和第二个小数点之间包含额外的空格。这当然会导致读取数据时出错。你知道吗
我该如何解决这个问题?我更喜欢python的解决方案,但我也愿意使用其他解决方案来修复数据的格式。你知道吗
编辑: 链接到数据:https://github.com/AartZwaan/CO_data
Fabio的答案确实很好,但可能不需要考虑损坏的数据并不总是像示例那样。在给定的文件中,有这样的行,其中错误以点结束或开始:
我建议使用这个正则表达式来修正行并保持相同的格式(每列之间有表格)
您可以使用以下正则表达式处理每一行:
例如,给定您的输入:
使用正确的行,没有任何变化:
曾经分裂成以下列表:
用错误的行取而代之的是:
曾经分裂成以下列表:
我认为您可以删除源文件中的空格(但不能删除制表符)。 如果你在一个类似unix的系统中,你可以运行
那么你的程序应该能够解析它。你知道吗
编辑
只能使用Python修改
for
循环中的第一行:在
相关问题 更多 >
编程相关推荐