我正在创建一个脚本来将 csv 文件从其列标题读取到一组命名元组中。然后,我将使用这些命名元组来提取满足特定条件的数据行。
我已经计算出输入(如下所示),但在将数据输出到另一个文件之前过滤数据时遇到问题。
import csv
from collections import namedtuple
with open('test_data.csv') as f:
f_csv = csv.reader(f) #read using csv.reader()
Base = namedtuple('Base', next(f_csv)) #create namedtuple keys from header row
for r in f_csv: #for each row in the file
row = Base(*r)
# Process row
print(row) #print data
我的输入文件的内容如下:
Locus Total_Depth Average_Depth_sample Depth_for_17
chr1:6484996 1030 1030 1030
chr1:6484997 14 14 14
chr1:6484998 0 0 0
它们是从我的代码中打印出来的,如下所示:
基数(轨迹='chr1:6484996',Total_Depth='1030',
Average_Depth_sample='1030',Depth_for_17='1030')
基数(轨迹='chr1:6484997',Total_Depth='14',
Average_Depth_sample='14',Depth_for_17='14')
基础(轨迹='chr1:6484998',Total_Depth='0',Average_Depth_sample='0',
Depth_for_17='0')
我希望能够仅提取 Total_Depth 大于 15 的记录。
直觉上我尝试了以下功能:
if Base.Total_Depth >= 15 :
print row
然而,这仅打印最后一行数据(来自上面的输出表)。我认为问题是双重的。据我所知,我不会将命名元组存储在任何地方以供以后引用。其次,数字是以字符串格式而不是整数读取的。
首先,如果我需要将命名元组存储在某个地方,有人可以纠正我吗?
其次,如何将字符串值转换为整数?或者这是不可能的,因为命名元组是不可变的。
Thanks!
I 以前问过类似的问题 https://stackoverflow.com/questions/17238567/returning-a-row-from-a-csv-if-specified-value-within-the-row-matches-condition关于字典,但现在想使用命名元组代替。 :)