別の形式に変換したいCSVファイルがあります。CSV形式は次のとおりです。
A_to_B,B_to_C,C_to_D,...
0,2,1,...
つまり、各見出しはAとBなどの2つの変数で構成され、ファイルの各行には0、1、または2のいずれかの値が含まれています。このCSVファイルを読み取るPythonスクリプトを作成しようとしています。次のような形式に変換します。
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()
みなさん、ありがとうございました!