2016-05-14 7 views
-1

私はPythonで既存のcsvファイルに新しいデータ列を追加するスクリプトを探しています。私は多くの行といくつかの列を持つファイル(例えばfile.csv)を持っています。 for loopの計算から、私は新しい配列を得ました(私のコードではここにあります)。私はその新しい配列(A)を既存のcsvファイルの最後の列として追加したいと思います。私は以下のコードを使用しました。csv/txtファイルの最後に新しいcolを追加する方法python

​​3210

最後の列に新しい列が追加されました。しかし、問題は、列全体が同じ値(最後のループからの値)を得ていることです。では、forループのそれぞれのAの値を最後の列として使用するにはどうしたらいいですか?ありがとう。

各ループからの実施例の入力ファイル

1 2 
2 4 
0 9 
4 8 

3 
4 
0 
9 

最終的なファイルが

1 2 3 
2 4 4 
0 9 0 
4 8 9 

を示すべきであるが、私の場合には

1 2 9 
2 4 9 
0 9 9 
4 8 9 
として示します

答えて

0

コードの問題は、ネストされたforループ内でファイルを上書きしてしまうことです。

実際には、file.csvに依存しない配列ですか?そして、あなたはこのような何かができる:

import csv 

A = compute_new_values_list() 

with open('file.csv') as fpi, open('out.csv', 'w') as fpo: 
    reader = csv.reader(fpi) 
    writer = csv.writer(fpo) 

    #optionaly handle csv header 
    headers = next(reader) 
    headers.append('new_column') 
    writer.writerow(headers) 

    for index, row in enumerate(reader): 
     row.append(A[index]) 
     writer.writerow(row) 

EDIT:あなたの新しい値を計算するためにfile.csvになりの行が必要な場合は

が、あなたは自分の新しい値を計算し、同じコードを使用することができますinside forループ:

import csv 

with open('file.csv') as fpi, open('out.csv', 'w') as fpo: 
    reader = csv.reader(fpi) 
    writer = csv.writer(fpo) 

    #optionaly handle csv header 
    headers = next(reader) 
    headers.append('new_column') 
    writer.writerow(headers) 

    for row in reader: 
     new_value = compute_from_row(row) 
     row.append(new_value) 
     writer.writerow(row) 
+0

実際には、値はfile.csvからデータを読み取った後に計算されます。その場合、どうすればいいですか? Tks –

関連する問題