繁体   English   中英

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

[英]Searching for specific text in csv(excel format) file

CVS样本

所以我有一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM