我有数百个以制表符分隔的文本文件,每个文件都可以有相同或不同的标题集。我想做以下事情 - 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,因为它需要在运行此脚本的其他设备上进行额外安装。
答案 0 :(得分:1)
csv模块的DictReader阅读器允许您使用标题名称引用CSV数据。 它可能会引导您更简单地解决您的问题:)
答案 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语句(希望!)