获取CSV列名和数字python

时间:2014-12-12 20:02:52

标签: python list csv tsv

我有数百个以制表符分隔的文本文件,每个文件都可以有相同或不同的标题集。我想做以下事情 - 1.阅读文件 2.获取标题名称 3.对于给定(输入)标头之一,从列中获取一个特定元素的计数(也作为输入给出) 由于我有很多文件,我无法知道我感兴趣的每一列的列号。目前我正在阅读像这样的tsv文件

file_name = os.path.join(tsv_name + ".txt")
input_file = open (file_name)
input_file_data = csv.reader(input_file, delimiter = "\t")

然后我通过

获得带有硬编码列数的计数
countt = [rec[1] for rec in input_file_data]
print tsv_name + ".txt", countt.count(barcode)

其中tsv_name是文件名(没有扩展名,由于各种原因不得不撤出扩展名) 但我的问题是,我希望能够输入列名,在运行脚本作为输入时说'codeID',如果在任何标题中找到'codeID',它应该得到列号,使用它在countt声明中。如果未找到,请跳过并转到下一个文件。我陷入了输入列名称并获取其列号的部分。

我的数据看起来像这样

barcodeID   codeID  conceptID   studyID Event   Time    Addi_data
UTGN-02-01-0001 653 1256213 UTGN    Adverse events  48h No
UTGN-02-01-0002 158 1256213 UTGN    Adverse events  48h No
UTGN-02-01-0003 630 1256213 UTGN    Adverse events  1d  No

因此,当我提供python program_name.py codeID 630时,它应该打印filename.txt 1(因为它在第2列中出现了1次,其中codeID为标题)

PS-我不想使用pandas或numpy,因为它需要在运行此脚本的其他设备上进行额外安装。

2 个答案:

答案 0 :(得分:1)

csv模块的DictReader阅读器允许您使用标题名称引用CSV数据。 它可能会引导您更简单地解决您的问题:)

https://docs.python.org/2/library/csv.html#csv.DictReader

答案 1 :(得分:0)

谢谢Benoit Latinier! 根据你的建议,我提出了一段适用于一个文件的代码,我还没有把它整合到我的大脚本中。这是一个示例代码

import csv
from collections import defaultdict
f = csv.DictReader(open(filename), delimiter = "\t")
fi = f.fieldnames
index_num = fi.index('codeID')

这个index_num可用于countt语句(希望!)