搜索CSV(Excel格式)文件中的特定文本

时间:2018-08-29 19:39:59

标签: python csv full-text-search

CVS Sample

所以我有一个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中不起作用。

2 个答案:

答案 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

您可以修改上面的内容以将它们存储在列表中,然后遍历它们以查找重复项并将适当的字符串合并到字典中。