2016-09-18 8 views
0

人の姓と名を持つ1つの列を持つCSVファイルがあります。私は最初と最後の2つの列に各名前を分割するCSVを使用しようとしています。以下のコードでは、最初の名前を行に、最後の名前を次の列の最初の名前にするのではなく、すべての最初の名前を1つの行にまとめ、最後の名前をすべて1つの行に分割します。御時間ありがとうございます。csvに辞表を書く方法

コード: インポートCSV

with open('fullnames.csv','r') as f: 
reader = csv.reader(f) 
newcsvdict = {"first name": [], "last name": []} 
for row in reader: 
    first = row[0].split()[0] 
    last = row[0].split()[1] 
    newcsvdict["first name"].append(first) 
    newcsvdict["last name"].append(last) 


with open('new.csv','w') as f: 
w = csv.DictWriter(f, newcsvdict.keys()) 
w.writeheader() 
w.writerow(newcsvdict) 

出力: enter image description here

+0

'w.writerows(newcsvdict)' – ozgur

+1

FYI、 'first、last = row [0] .split()'。 –

+0

コードの貼り付けに間違いがあり、少なくとも2つの構文エラーがあります。データ構造がキー値マッピング(ディクショナリ)からカンマ区切り値に変換されて以来、ここでの唯一の問題は「csvファイルの書き方」ですが、あなたの「質問」はそのままではありません。実際にそれまたは他の質問をします。 – OJFord

答えて

1

、ちょうどcsv.writer使用:

import csv 

header = ['first name', 'last name'] 
with open('fullnames.csv', 'r') as infile, open('new.csv', 'w') as outfile: 
    writer = csv.writer(outfile) 
    writer.writerow(header) 
    writer.writerows(row[0].split() for row in csv.reader(infile)) 

これは細かい提供に動作することをCSVは、常に1つの最初の名前で構成され、入力のname列1つの姓は空白で区切られています。しかし、二重姓の姓がある場合、例えば、ヘレナ・ボナム・カーター、あなたは名前を分けることについてもっと注意する必要があります。これは動作します:

row[0].split(' ', 1) 

ただし、セパレータは正確に1つのスペースであるとみなします。

0

あなたのCSVファイルを書き込むためにパンダを使用することができます(あなたが実際に全体の問題のためにパンダを使用することができます)、これは自動的にあなたのデータを転置します列のリストから行のリストに:

import pandas as pd 
df = pd.DataFrame(newcsvdict) 
df.to_csv('new.csv', index=False) 
0

あなたは単一のリストのお尻を作成していますキーでおおわれました。 @maxymooを示唆しているように、Pandasを使うか、それぞれの行を別々に書いてください。 csv.DictWriterを使用してほとんど利点がある

この単純な場合
import csv 

with open(r'~/Documents/names.csv', 'r') as fh: 
    reader = csv.reader(fh) 
    with open(r'~/Documents/output.csv', 'w+') as o: 
     writer = csv.writer(o) 
     for row in reader: 
      output = row[0].split(' ', 1) 
      writer.writerow(output) 
関連する問題