2017-11-17 15 views
1

CSVファイルを2つのフィールド名で変更しています。追加のフィールド名の下に各行の最後に文字列を追加したいと思います。フィールド名を追加する方法を知りましたが、項目を追加する方法は分かりませんでした。それは単純なはずだが、私は困惑しているようだ。Python:各行の末尾に同じ文字列を追加する

import csv 

with open('test2l.csv', 'r') as inny: 
    reader = csv.DictReader(inny) 

    with open('outfile.csv', 'w') as outty: 
     fieldnames = ["Genus", "Species", "Source"] 
     writer = csv.DictWriter(outty, fieldnames = fieldnames) 
     writer.writeheader() 

     for record in reader: 
      g = record['Genus'] 
      s = record['Species'] 

私が試したすべてが「種」で既存の文字列に文字列を追加したばかりしていると私は、「ソース」のレコードを作成することができていない、それが空だから、私が想定しています。

ありがとうございます!

+4

はちょうど 'レコードの[「ソース」] =「何か」'そして 'writer.writerowを使用する(レコード)を行います「何が問題なの? –

答えて

0

単に書く:csv.Readerのドキュメントをチェックアウトし、

for record in reader: 
    record["Source"] = "whateversource" 

をまだお持ちでない場合は、file.`

1

に書いている段階の前に、そう、CSV .DictReader、およびcsv.DictWriter。

ドキュメントは、リーダオブジェクトがイテレータプロトコルを使用してオンオブジェクト上で動作することを示しています。 "Source"を追加するために一度反復すると(例えば、リーダーの行の場合:)、基本となるイテレータを使い果たします。ライターと同じリーダーを使用しようとすると、後で動作しません。これを回避するには

、あなたがリストを作成することができます。

rows = list(csv.DictReader(inny)) 

これはイテレータを排出しながら、あなたは今で動作するようにリストを持っています。しかし、リストが非常に長い場合、これは理想的ではないかもしれません。

別の解決策は、同じ反復中にソースを追加して、行を記述するために、次のようになります。

for row in reader: 
    row['Source'] = 'same string every time' 
    writer.writerow(row) 
関連する問題