如何使用 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
我是 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