[英]Searching for specific text in csv(excel format) file
所以我有一个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 read,因为它在IronPython中不起作用。
您可以使用csv模块将适当的行读入list
s。 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)
编辑:添加了代码以跳过前两列
我会帮助您解决我坚持的部分,该部分试图从类别中提取单位。 根据您的数据,最好的选择是使用正则表达式,以下方法应该起作用:
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
您可以修改上面的内容以将它们存储在列表中,然后遍历它们以查找重复项并将适当的字符串合并到字典中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.