我正在嘗試列印 7 之后的每一行的 rs_id、p_dot 和相應的標題,其中 CSV 檔案中的一個單元格被占用。
import csv
with open("CYP2C9.csv",'r') as infile:
reader = csv.reader(infile, delimiter=",")
header= next(reader)
for row in reader:
rs_id = row[4]
snp = row[7]
p_dot = row[1]
if snp != (""):
print(rs_id, p_dot, header[7])
我嘗試將 snp 定義為 row[7:8] 并列印標題 [7:8] 但輸出與我單獨執行 [7] 或 [8] 時的輸出不匹配。
uj5u.com熱心網友回復:
row[7]是串列的單個元素,并且將是一個字串。您可以將其與字串 ( "") 進行比較,因為它已經是字串。
row[start:end]是 的一個切片,rows它是一個串列。您不能將串列與字串進行比較,因為這是兩個不同的東西。相反,您希望將切片的每個元素與該空字串進行比較。考慮以下:
import csv
with open("CYP2C9.csv",'r') as infile:
reader = csv.reader(infile, delimiter=",")
header= next(reader)
for row in reader:
rs_id = row[4]
p_dot = row[1]
non_empty_headers = [head for head, cell in zip(header[7:], row[7:]) if cell]
if non_empty_headers:
print(rs_id, p_dot, *non_empty_headers)
首先,讓我們看一下串列推導:
non_empty_headers = [head for head, cell in zip(header[7:], row[7:]) if cell]
我們壓縮從 7 開始的元素header并row同時迭代它們。然后,如果cell行中的值是真值,我們只選擇串列推導中的標題值。請記住,非空字串是真實的。
if non_empty_headers:
print(rs_id, p_dot, *non_empty_headers)
現在我們有了非空單元格的所有標題,我們檢查這個串列是否真實(即它包含至少一個元素),并列印其中的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/523235.html
標籤:PythonCSV
