分离csv文件时如何解决索引错误?

问题描述 投票:0回答:2

提供输入的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()  
python python-3.x
2个回答
0
投票
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

0
投票
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))

© www.soinside.com 2019 - 2024. All rights reserved.