我有一个 CSV 文件,我想将其转换为不同的格式。CSV 格式如下:
A_to_B,B_to_C,C_to_D,...
0,2,1,...
即,每个标题由两个变量组成,例如 A 和 B,文件中的每一行都包含一个值,即 0、1 或 2。我正在尝试编写一个 Python 脚本来读取这个 CSV 文件和把它变成这样的格式:
A,B,0
B,C,2
C,D,1
...
换句话说,它将包含标题的第一行拆分为变量(例如,A、B、C、D 等),然后匹配新格式的相应值。有谁知道如何做到这一点?我掌握了一些基础知识,但实际算法我无法正确理解。谢谢你的帮助。
更新#1
这是我记录下来的一些代码,但我没有得到正确的输出:
import csv,sys
reader = csv.reader(open(sys.argv[1], 'rt'), delimiter=',')
headers = reader.next()
data = []
for row in reader:
line = ','.join(row)
data.append(line)
for row in data:
for cols, val in zip(headers, row):
newRow = cols[0], cols[-1], val
print newRow
CSV 文件如下所示:
A,B,C
0,2,1
0,1,1
但是,代码的输出看起来像这样,所以我需要一种以正确方式迭代 CSV 文件的方法:
('A', 'A', '0')
('B', 'B', ',')
('C', 'C', '2')
('A', 'A', '0')
('B', 'B', ',')
('C', 'C', '1')
更新#2
如果有人偶然发现这一点,这是我最终得到的代码(没有错误处理或任何东西,但它有效):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import csv,os,sys
reader = csv.reader(open(sys.argv[1], 'rt'), delimiter=',')
headers = reader.next()
i = 1
for row in reader:
os.system('rm id' + str(i) + '.csv')
os.system('cat ./seeds >> id' + str(i) + '.csv')
for srcdest,dist in zip(headers, row):
sd = srcdest.split('_to_')
src,dest = sd[0],sd[-1]
if dist == '0':
pass
else:
f = open('id' + str(i) + '.csv', 'a')
f.write('{},{},{}\n'.format(src.lower().replace('_',''),dest.lower().replace('_',''),float(dist)))
i=i+1
f.close()
谢谢大家的帮助!