我有一个变量,该变量具有要从一个CSV文件中获取的行索引号,并将这些行写入新的行中。
我尝试从中复制的CSV文件如下:
sdkgsk; 74785797; hdfgsdgfjss
asdjkhfgsdkjg; 9857349834; jsdhfg
skhgf; 76578346534; jhfgsdjhgdf
sdifl; 56975654; kjdjh
afhkddf; 439587349346; hsfd
kdgfdkj; 983496; hioas
oish; 89468468; jhfdsgsdf
jksdfjhksdfjk; 8968; jkfdsjhksd
我尝试了很多事情,但这是最后一个:
row_index = [2,4,6]
with open('test.csv', 'r') as f,open('out.csv', 'w') as f_out:
reader = csv.reader(f)
writer = csv.writer(f_out)
lines = list(reader)
for row in lines:
writer.writerow(row[row_index])
我希望生成一个名为“ out.csv”的新文件,其中包含来自“ test.csv”的第2、4和6行。
相反,我收到此错误消息:“列表索引必须是整数或切片,而不是列表”
答案 0 :(得分:3)
问题出在这一行:
writer.writerow(row[row_index])
row_index
是一个列表,您不能用另一个列表索引一个整数列表(row
)。这正是python解释器试图通过此错误消息告诉您的内容:
list indices must be integers or slices, not list
您可以使用list comprehension基于new_row
列表创建row_index
:
for row in lines:
new_row = [row[index] for index in row_index]
writer.writerow(new_row)
编辑: 我遗漏了另一个问题,基于您的代码,我认为您想重写每一行的第2,4和6列,但您真正想要索引的是行而不是列。因此,您想重写第2,4和6行。在这种情况下,您可以再次使用列表推导。
with open('test.csv', 'r') as f,open('out.csv', 'w') as f_out:
reader = csv.reader(f)
writer = csv.writer(f_out)
lines = list(reader)
new_rows = [lines[index] for index in row_index]
writer.writerows(new_rows)
同样,list index out of range
错误消息会告诉您确切的错误。下次请尝试仔细阅读和解释错误消息。