将命名元组的值从字符串转换为整数

2024-09-28 11:39:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个脚本,将csv文件从列标题读入一组命名元组。然后,我将使用这些namedtuples来提取满足特定条件的数据行。在

我已经计算出了输入(如下所示),但是在将数据输出到另一个文件之前,我遇到了过滤数据的问题。在

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

我的输入文件的内容如下:

^{pr2}$

它们从我的代码中打印如下:

Base(Locus='chr1:6484996', Total_Depth='1030', Average_Depth_sample='1030', Depth_for_17='1030') Base(Locus='chr1:6484997', Total_Depth='14', Average_Depth_sample='14', Depth_for_17='14') Base(Locus='chr1:6484998', Total_Depth='0', Average_Depth_sample='0', Depth_for_17='0')

我只想提取总深度大于15的记录。在

直觉上我尝试了以下功能:

if Base.Total_Depth >= 15 :
    print row

但是,这只打印最后一行数据(来自上面的输出表)。我认为问题是双重的。据我所知,我不会将我的命名元组存储在任何地方供以后引用。其次,数字是以字符串格式而不是整数来读取的。在

首先,如果我需要把我的名字对存储在某个地方,有人能纠正我吗。在

第二,如何将字符串值转换为整数?或者这是不可能的,因为namedtuples是不可变的。在

谢谢!在

previously asked a similar question与字典有关,但现在想改用namedtuples。:)


Tags: 文件csv数据sampleforbasenamedtuplerow
1条回答
网友
1楼 · 发布于 2024-09-28 11:39:54

创建命名元组实例时,将值映射到int

row = Base(r[0], *map(int, r[1:])) 

这将保留r[0]值作为字符串,并将其余值映射到int()。在

这需要CSV列的知识,因为哪些列可以转换为整数在这里是硬编码的。在

演示:

^{pr2}$

请注意,您应该针对行而不是Base类进行测试:

if row.Total_Depth >= 15:

在循环中,或在收集的行的新循环中。在

相关问题 更多 >

    热门问题