我为具有多个列和数千行数据的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批发的。不过,重复的姓氏可能会失败。

10-07 23:49