我正在創建一個腳本,以便將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文件。 :) –