提供输入的CSV文件:
Sample A B C D
Sample_1 0 1 0 0
Sample_2 1 0 0 0
Sample_3 0 0 1 0
Sample_4 0 0 0 1
Sample_5 1 0 0 0
Sample_6 0 1 0 0
我想将样品分类为对照,实验性和均不列出。 A列中所有带有“ 1”的样本将被放置在对照表中,B上所有带有“ 1”的样本将被放置到实验列表中,而C或D中所有带有“ 1”的样本都将被放入实验列表中。放在这两个列表中。这是所需的输出:
Control: sample_2, sample_5
Experimental: sample_1, sample_6
Neither: sample_3, sample_4
但是我在“ if row [1] ==” 1“:”行上收到此错误消息“ IndexError:该行的字符串索引超出范围”
control = []
experimental = []
neither = []
filename = "filename.csv"
infile = open(filename, 'r')
lines = infile.readlines()
for line in lines:
sline = line.split(',')
#print(sline)
for row in sline:
if row[1] == "1":
control.append(row[0])
elif row[2] == "1":
experimental.append(row[0])
else:
neither.append(row[0])
print(length(control))
print(length(experimental))
print(length(neither))
infile.close()
for line in lines:
sline = line.split() # The split character is white spaces not comma
if len(sline) == 5:
seq,a,b,c,d = sline
if "1" in a:
control.append(seq)
elif "1" in b:
experimental.append(seq)
else:
neither.append(seq)
# Print results
print(length(control))
print(length(experimental))
print(length(neither))
infile.close()
此方法假定您感兴趣的行始终包含五条信息。
让我知道这是否对您有用! :D
for line in lines:
sline = line.split(',')
#print(sline)
不更新任何内容,只将分割线丢弃。
您可以使用csv模块进行拆分(并始终使用4个空格缩进),如]所示>
import csv control = [] experimental = [] neither = [] filename = "filename.csv" try: with open(filename, newline='') as infile: reader = csv.reader(infile, delimiter=' ') # dispose of header next(reader) for index, row in enumerate(reader, start=1): if row[1] == "1": control.append(row[0]) elif row[2] == "1": experimental.append(row[0]) else: neither.append(row[0]) except IndexError: print("Invalid row {} in {}. Missing columns: {}".format(index, filename, row)) print(len(control)) print(len(experimental)) print(len(neither))