我正在创建一个脚本,以便将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', (Locus ='chr1:6484997',Total_Depth = '14', Average_Depth_sample = '14',Depth_for_17 = '14')(平均值='1030', Average_Depth_sample ='1030',Depth_for_17 ='1030') 基地(轨迹= 'CHR 1:6484998',Total_Depth = '0',Average_Depth_sample = '0', Depth_for_17 = '0')
我希望能够用Total_Depth拉出仅记录大于15
直观我尝试以下功能:
if Base.Total_Depth >= 15 :
print row
然而,这仅打印数据的最终行(从上面的输出表格)。我认为这个问题是双重的。据我所知,我不会将我的命名元组存储在任何地方,以便稍后引用它们。其次,数字正在以字符串格式而不是整数读取。
首先有人可以纠正我,如果我需要将我的namedtuples存储在某处。
第二,如何将字符串值转换为整数?或者这是不可能的,因为namedtuples是不可变的。
谢谢!
I previously asked a similar question关于字典,但现在想用namedtuples代替。 :)
谢谢。我可以看到这将后三个命名的元素(相当于我的电子表格列)输出为整数。但是,当我尝试使用我的if语句来过滤它们时,它仍然只会拖出Total_Depth = 0的那个。这是因为我的if语句在第一个函数之外? –
@s_boardman:更新; 'Base.Total_Depth'是一个属性对象,不是一个整数;您可能正在寻找'row.Total_Depth'。 –
太好了,非常感谢!现在使用namedtuple键作为列标题将它们输出到一个新的CSV文件。 :) –