我为一个包含多列和数千行数据的 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 .不过,重复的姓氏可能会失败。
关于python - 拆分和编辑 CSV 列并按字母顺序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37129341/