所以我有一个csv文件(上面链接中的示例),其变量名在第7行,值在第8行。变量后面都有单位,而值只是这样的数字:
Velocity (ft/s) Volumetric (Mgal/d Mass Flow (klb/d) Sound Speed (ft/s)
.-0l.121 1.232 1.4533434 1.233423
还有更多的变量,但是基本上我需要一些方法在csv文件中搜索特定的单位组,然后将与之关联的值附加到列表中。例如,搜索文本“(ft / s)”,然后制作一个以Velocity和Sound speed作为Keys及其相关值的字典。我无法执行此操作,因为csv的格式类似于excel电子表格,并且单元格包含整个变量名称及其单位
最后,我将为每个单元组提供一个字典,并且我需要这样做,因为生成的每个csv文件都会改变单元组(ft / s变为m / s)。我也不能使用excel读取,因为它在IronPython中不起作用。
答案 0 :(得分:1)
您可以使用csv模块将相应的行读入list
中。
defaultdict
是数据聚合的理想选择,而可变
名称和单位可以通过在'('
上拆分来轻松地分开。
import csv
import collections
with open(csv_file_name) as fp:
reader = csv.feader(fp)
for k in range(6): # skip 6 lines
next(reader)
varnames = next(reader) # 7th line
values = next(reader) # 8th line
groups = collections.defaultdict(dict)
for i, (col, value) in enumerate(zip(varnames, values)):
if i < 2:
continue
name, units = map(str.strip, col.strip(')').split('(', 1))
groups[units][name] = float(value)
编辑:添加了跳过前两列的代码
答案 1 :(得分:0)
我将帮助您解决我认为停留的部分,该部分正在尝试从类别中提取单位。根据您的数据,最好的选择是使用正则表达式,以下方法应该可以工作:
import re
f = open('data.csv')
# I assume the first row has the header you listed in your question
header = f.readline().split(',') #since you said its a csv
for item in header:
print re.search(r'\(.+\)', item).group()
print re.sub(r'\(.+\)', '', item)
这应该为您打印以下内容:
(ft/s)
Velocity
(Mgal/d)
Volumetric
(klb/d)
Mass Flow
(ft/s)
Sound Speed
您可以修改上面的内容以将它们存储在列表中,然后遍历它们以查找重复项并将适当的字符串合并到字典中。