使用Python从CSV读取列并根据该列中的信息写入另一个csv?

时间:2017-05-16 12:05:46

标签: python python-3.x csv keyerror

所以我有一个带有标题的CSV(https://uploadfiles.io/o5xm3)(幸存,pclass,名称等)。我正在尝试使用python来读取幸存的列(0 =死亡,1 =是),如果该人没有生存,它会将该人的其他信息(来自其他列)写入另一个csv文件。以下是我到目前为止的情况:

import csv
with open('titanic-new.csv',newline='') as csvfile:
    spamreader = csv.DictReader(csvfile, delimiter=",")
    sortedlist = sorted(spamreader, key=lambda row:(row['name']), reverse=False)

in_file = open('titanic-new.csv', 'r')
out_file = open('Q2_out.txt', 'w')
dict = {}

in_file.close()
out_file.close()

第一部分是我试图按字母顺序排列名称,但我收到错误:(keyerror' name')如果有人可以帮助我,那也谢谢

编辑: 我下载了同事的文件,看起来像这样(前3行):

survived,pclass,name,sex,age,ticket,fare,cabin
0,3,"Braund, Mr. Owen Harris",male,22,A/5 21171,7.25,
1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,PC 17599,71.2833,C85

1 个答案:

答案 0 :(得分:0)

您正尝试过滤现有的CSV,仅包含非幸存者。这可以按如下方式完成:

import csv

with open('titanic-new.csv',newline='') as f_input, open('Q2_out.txt', 'w', newline='') as f_output:
    csv_input = csv.reader(f_input)
    csv_output = csv.writer(f_output)

    # Copy over the header (without the first column)
    csv_output.writerow(next(csv_input)[1:])

    for row in csv_input:
        if row[0] == '0':
            csv_output.writerow(row[1:])

在这种情况下,第一列即row[0]将为0。如果是这种情况,请将该行写入输出CSV。

这将为您提供输出CSV,其开头为:

pclass,name,sex,age,ticket,fare,cabin
3,"Braund, Mr. Owen Harris",male,22,A/5 21171,7.25,
3,"Allen, Mr. William Henry",male,35,373450,8.05,
3,"Moran, Mr. James",male,,330877,8.4583,
1,"McCarthy, Mr. Timothy J",male,54,17463,51.8625,E46

[1:]告诉它在写作时忽略第一列。

也可以使用DictWriter,但对于这种情况,简单的csv.readercsv.writer也足够了。