所以我有一个带有标题的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
答案 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.reader
和csv.writer
也足够了。