如何按命名列、python、csv按字母顺序对文件排序
我有三个csv文件,每个文件有三个命名列,“属”、“种”和“源”。我将这些文件合并到一个新文档中,现在我需要按字母顺序排列这些列,首先按属,然后按种。我想我可以先按字母顺序排列物种,然后按属,然后按正确的顺序排列,但我还没有在网上找到任何关于如何对字符串的命名列排序的内容。我尝试了很多不同的排序方法,但它要么没有改变任何东西,要么用最后一个字符串替换了第一列中的所有字符串 以下是我合并文件的代码:如何按命名列、python、csv按字母顺序对文件排序,python,csv,sorting,python-2.x,Python,Csv,Sorting,Python 2.x,我有三个csv文件,每个文件有三个命名列,“属”、“种”和“源”。我将这些文件合并到一个新文档中,现在我需要按字母顺序排列这些列,首先按属,然后按种。我想我可以先按字母顺序排列物种,然后按属,然后按正确的顺序排列,但我还没有在网上找到任何关于如何对字符串的命名列排序的内容。我尝试了很多不同的排序方法,但它要么没有改变任何东西,要么用最后一个字符串替换了第一列中的所有字符串 以下是我合并文件的代码: import csv, sys with open('Footit_aphid_list_mod
import csv, sys
with open('Footit_aphid_list_mod.csv', 'r') as inny:
reader = csv.DictReader(inny)
with open('Favret_aphid_list_mod.csv', 'r') as inny:
reader1 = csv.DictReader(inny)
with open ('output_al_vonDohlen.csv', 'r') as inny:
reader2 = csv.DictReader(inny)
with open('aphid_list_complete.csv', 'w') as outty:
fieldnames = ['Genus', 'Species', 'Source']
writer = csv.DictWriter(outty, fieldnames = fieldnames)
writer.writeheader()
for record in reader:
writer.writerow(record)
for record in reader1:
writer.writerow(record)
for record in reader2:
writer.writerow(record)
for record in reader:
g = record['Genus']
g = sorted(g)
writer.writerow(record)
inny.closed
outty.closed
如果文件不是非常大,则将所有行读取到单个列表中,对其进行排序,然后将其写回:
#!python2
import csv
rows = []
with open('Footit_aphid_list_mod.csv','rb') as inny:
reader = csv.DictReader(inny)
rows.extend(reader)
with open('Favret_aphid_list_mod.csv','rb') as inny:
reader = csv.DictReader(inny)
rows.extend(reader)
with open('output_al_vonDohlen.csv','rb') as inny:
reader = csv.DictReader(inny)
rows.extend(reader)
rows.sort(key=lambda d: (d['Genus'],d['Species']))
with open('aphid_list_complete.csv','wb') as outty:
fieldnames = ['Genus','Species','Source']
writer = csv.DictWriter(outty,fieldnames=fieldnames)
writer.writeheader()
writer.writerows(rows)
如果文件不是非常大,则将所有行读取到单个列表中,对其进行排序,然后将其写回:
#!python2
import csv
rows = []
with open('Footit_aphid_list_mod.csv','rb') as inny:
reader = csv.DictReader(inny)
rows.extend(reader)
with open('Favret_aphid_list_mod.csv','rb') as inny:
reader = csv.DictReader(inny)
rows.extend(reader)
with open('output_al_vonDohlen.csv','rb') as inny:
reader = csv.DictReader(inny)
rows.extend(reader)
rows.sort(key=lambda d: (d['Genus'],d['Species']))
with open('aphid_list_complete.csv','wb') as outty:
fieldnames = ['Genus','Species','Source']
writer = csv.DictWriter(outty,fieldnames=fieldnames)
writer.writeheader()
writer.writerows(rows)
首先将所有数据存储在行列表中,然后进行排序,然后写回文件。您可能会发现此页很有用:首先将所有数据存储在行列表中,然后进行排序,然后写回文件。您可能会发现此页很有用:这很有效!唯一的问题是,因为我使用的是2.7,我不得不从“open”中删除所有的“newline=”属性,但是没有它们一切都很好。@birdoptera更新。请注意,对于Python2 per csv文档,使用二进制模式而不是
newline='
。这很有效!唯一的问题是,因为我使用的是2.7,我不得不从“open”中删除所有的“newline=”属性,但是没有它们一切都很好。@birdoptera更新。请注意,对于Python2 per csv文档,使用二进制模式而不是newline='
。