我为具有多个列和数千行数据的CSV文件开发了以下.py文件。这是我到目前为止的脚本:
infile = open("titanic.csv", "rU")
incsv = csv.reader(infile, delimiter = ',')
outfile = open("titanicOutput.csv", "w")
outcsv = csv.writer(outfile, delimiter = ',')
header = incsv.next()
rowNum = 0
for row in incsv:
(data1, data2, namedata, data4, data5, data6, data7, data8, data9, data10, data11) = row
if '1' in data1:
rowOutput = [namedata, data2, data4, data5]
outcsv.writerow(rowOutput)
rowNum += 1
infile.close()
outfile.close()
基本上,namedata列的信息是为每个人的全名显示的,例如“ Smith,John”。
姓氏后跟名字。我需要分开姓和名,并在输出中为每个名字创建一列-不存在逗号或引号。然后,我还需要按字母顺序在姓氏列中显示信息。我知道sort()将以某种方式用于按字母顺序排序,但拆分我不知道。
我已经走了这么远,但不知道如何拆分namedata列-我在这里读过一个类似问题的解释,但是对我来说太过复杂以至于无法理解。愚蠢的解释将是惊人的,谢谢!
EDIT: Original File Data (Simplified version for illustration) -
data1 data2 namedata data4 data5
0 3 Smith, Mr John m 22
1 1 McMahan, Ms Sally f 38
1 3 Emmit, Mr Brandon f 26
Output csv File (Simplified version for illustration) -
lastname firstname data2 data4
Emmit Mr Brandon 3 m
McMahon Ms Sally 1 f
Smith Mr John 3 f
希望有帮助!
最佳答案
如果我理解正确,您将拥有一个类似以下的字段:
name = "Smith, John"
但是您想要一个类似的列表:
["John", "Smith"]
为此,您可以采取以下措施:
first_last = names.split(', ')
first_last.reverse()
print first_last
对于排序,肯定有很多方法,这可能不是最优雅的方法,但是您可以创建一个字典,对键集进行排序,然后打印出相应的值:
phonebook = dict()
for row in csv:
last_name = get_last_name()
phonebook[last_name] = row
lastnames = phonebook.keys()
lastnames.sort()
for key in lastnames:
print phonebook[key]
后者几乎是从https://stackoverflow.com/a/13990710/695787批发的。不过,重复的姓氏可能会失败。