使用python将特定行从一个csv复制到另一个csv

使用python将特定行从一个csv复制到另一个csv,python,csv,Python,Csv,我有一个带有行索引号的变量,我想从一个CSV文件中获取该变量,并将这些行写入一个新的CSV文件 我试图从中复制的CSV文件如下所示: sdkgsk;74785797;hdfgsdgfjss asdjkhfgsdkjg;9857349834;jsdhfg 斯卡夫;76578346534;JHFGSDFJHGDF sdifl;56975654;kjdjh afhkddf;439587349346;hsfd kdgfdkj;983496;hioas oish;89468468;jhfdsgsdf jk

我有一个带有行索引号的变量,我想从一个CSV文件中获取该变量,并将这些行写入一个新的CSV文件

我试图从中复制的CSV文件如下所示:

sdkgsk;74785797;hdfgsdgfjss

asdjkhfgsdkjg;9857349834;jsdhfg

斯卡夫;76578346534;JHFGSDFJHGDF

sdifl;56975654;kjdjh

afhkddf;439587349346;hsfd

kdgfdkj;983496;hioas

oish;89468468;jhfdsgsdf

jksdfjhksdfjk;8968;JKFDSJSHKSD

我尝试了多种方法,但这是最后一种:

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行


相反,我收到了这样一条错误消息:“列表索引必须是整数或切片,而不是列表”

问题在于这一行:

writer.writerow(row[row_index])
row\u index
是一个列表,不能用另一个列表为整数列表(
row
)编制索引。这正是python解释器试图告诉您的错误消息:
列表索引必须是整数或切片,而不是列表

您可以使用基于
行索引创建
新行

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)

再次出现
列表索引超出范围的错误消息
会准确地告诉您出了什么问题。下次请仔细阅读和解释错误信息。

谢谢您的回复。。。我现在遇到的问题是,行“new_row=[row[index]for index in row_index]”的“列表索引超出范围”。如果使用您编辑的代码,我会得到以下错误:“列表索引必须是整数或切片,而不是非非类型”。。。。。这也适用于行“new_rows=[lines[index]for index in row_index]”是的,因为我没有为您编写完整的程序,只是添加了重要的部分,所以它不能正常工作。我猜你够聪明的,能找到丢失的东西。