如何在python中将一个csv拆分为多个文件

2024-06-07 11:53:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件(world.csv)如下所示:

"city","city_alt","lat","lng","country"
"Mjekić","42.6781","20.9728","Kosovo"
"Mjekiff","42.6781","20.9728","Kosovo"
"paris","42.6781","10.9728","France"
"Bordeau","16.6781","52.9728","France"
"Menes","02.6781","50.9728","Morocco"
"Fess","6.6781","3.9728","Morocco"
"Tanger","8.6781","5.9728","Morocco"

我想按国家将其拆分为多个文件,如下所示:

科索沃.csv:

"city","city_alt","lat","lng","country"
"Mjekić","42.6781","20.9728","Kosovo"
"Mjekiff","42.6781","20.9728","Kosovo"

France.csv:

"city","city_alt","lat","lng","country"
"paris","42.6781","10.9728","France"
"Bordeau","16.6781","52.9728","France"

Morroco.csv:

"city","city_alt","lat","lng","country"
"Menes","02.6781","50.9728","Morocco"
"Fess","6.6781","3.9728","Morocco"
"Tanger","8.6781","5.9728","Morocco"

Tags: 文件csvcityaltcountrylnglatparis
3条回答

试试这个:

根据国家名称筛选列。然后使用pandas中的to_csv将其转换为csv文件

df = pd.read_csv('test.csv')

france = df[df['country']=='France']
kosovo = df[df['country']=='Kosovo']
morocco = df[df['country']=='Morocco']

france.to_csv('france.csv', index=False)
kosovo.to_csv('kosovo.csv', index=False)
morocco.to_csv('morocco.csv', index=False)

如果不能使用pandas,可以使用内置的csv模块和itertools.groupby()函数。您可以使用此选项按国家分组

from itertools import groupby
import csv

with open('world.csv') as csv_file:
    reader = csv.reader(csv_file)
    next(reader) #skip header
    
    #Group by column (country)
    lst = sorted(reader, key=lambda x : x[4])
    groups = groupby(lst, key=lambda x : x[4])

    #Write file for each country
    for k,g in groups:
        filename = k + '.csv'
        with open(filename, 'w', newline='') as fout:
            csv_output = csv.writer(fout)
            csv_output.writerow(["city","city_alt","lat","lng","country"])  #header
            for line in g:
                csv_output.writerow(line)

最简单的方法如下: #例如,在工作目录中创建一个名为“adata”的文件夹 #导入glob

for i,g in df.groupby('CITY'):
    g.to_csv('adata\{}.csv'.format(i), header=True, index_label='Index')
print(glob.glob('adata\*.csv'))
filenames = sorted(glob.glob('adata\*.csv'))

for f in filenames:
    #your intended processes

相关问题 更多 >

    热门问题