如何使用 csv reader 将列从一个文件映射到另一个文件

How to use csv reader to map columns from one file to another

我是 Python csv.reader 的新手,我正在尝试用 sheet1 中的 headers 填充 sheet2 中的数据:

sheet1.csv包含以下headers

  1         2         3         4         5         6         7  

sheet2.csv包含以下数据

  col_1     col_4     col_5     col_7
 yellow      Blue     Green       Red

期望的输出如下:

      1         2         3         4         5         6         7  
 Yellow                          Blue     Green                 Red

最初我是使用 pandas 完成的,但是我想在 python.

中使用 csv.reader

这是我目前的尝试:

import csv

with open('sheet1.csv', newline='') as myFile:
    reader = csv.reader(myFile)
    for row in reader:
        print(row)

我知道我以前回答过这个问题,但我懒得去寻找原文 post。

[mre] 版本:

from io import StringIO
import csv
import sys

# map column names to template
mapper = lambda fieldname: fieldname.split('_')[-1]

template = '''\
1,2,3,4,5,6,7
'''

source = '''\
col_1,col_4,col_5,col_7
Yellow,Blue,Green,Red
White,Black,Cyan,Magenta
'''

fieldnames = csv.DictReader(StringIO(template)).fieldnames

out = csv.DictWriter(sys.stdout, fieldnames)
out.writeheader()

reader = csv.DictReader(StringIO(source))
for row in reader:
    out.writerow({mapper(k): v for (k, v) in row.items()})

实际文件版本:

import csv

# map column names to template
mapper = lambda fieldname: fieldname.split('_')[-1]

with open('template.csv', newline='') as template:
    fieldnames = csv.DictReader(template).fieldnames

with open('source.csv', newline='') as source, open('output.csv', 'w', newline='') as output:
    reader = csv.DictReader(source)

    out = csv.DictWriter(output, fieldnames)
    out.writeheader()

    for row in reader:
        out.writerow({mapper(k): v for (k, v) in row.items()})

输出:

1,2,3,4,5,6,7
Yellow,,,Blue,Green,,Red
White,,,Black,Cyan,,Magenta