2016-11-29 11 views
0

私はいくつかの行と列を含むcsvファイルを持っています。私は、そのテーブルからいくつかの特定の値を選択し、それらを拡張し、別のCSVファイルにエクスポートする必要があります。私はちょうどoutput.csvにエクスポートinput.csvの最後の行を受け取り、出力としてcsvをインポートし、csvに操作してエクスポートします。

import csv 
from urllib.parse import quote 

afn='https://r.refinedads.com/bs-mapping.php?v=a1&aid=7909&oid=1031&url=' 
zx='https://r.refinedads.com/bs-mapping.php?v=z1&aid=3814&oid=1031&zanpid=##zxClickID##&userid=##UserID##&url=' 
zxpn='https://r.refinedads.com/bs-mapping.php?v=z1&aid=3840&oid=1031&zanpid=##zxClickID##&userid=##UserID##&url=' 
la='https://r.refinedads.com/bs-mapping.php?aid=3843&oid=1031&c1=leadalliance&c2=XXXXX&c3=default&clid=YYYYY&url=' 
tv='https://r.refinedads.com/bs-mapping.php?aid=7639&oid=1031&c1=leadalliance&c2=XXXXX&c3=default&clid=YYYYY&url=' 


with open('input_csv.csv', 'r', newline='') as csvfile: 
    matrixreader = csv.DictReader(csvfile) 
    for row in matrixreader: 
     va = afn+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
     vzx = zx+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
     vzxpn = zxpn+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
     vla = la+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
     vtv = tv+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
    liste = [[row['Name'], va, vzx, vzxpn, vla, vtv]] 
    print(liste) 

    with open('output.csv', 'w', newline='') as csvfile: 
     a = csv.writer(csvfile, delimiter=',') 
     a.writerows(liste) 

私のPython 3のコードは次のようになります。あたかもコードが最初の行を上書きするかのように思えます。

input.csvは次のようになります。

*Name,Promocode,Link 

BASE Plus + iPhone 7,ASDFNOWEDF,base.de/base-plus 

BASE Pro + iPhone 7,JBONEDGASD,base.de/base-pro 

BASE Light + iPhone 7,NAFODSFNTE,base.de/base-light 

BASE Pur + iPhone 7,NAEWRIONF,base.de/base-pur* 

は、フランツ・

+0

ありがとうございます。あなたのソリューションはそれを作ったerrikos。 –

答えて

0

があれば、ループ内LISTE割り当てを入れてみてください 、あなたの助けのために事前に非常に多くの 乾杯をありがとう -

import csv 
from urllib.parse import quote 

afn='https://r.refinedads.com/bs-mapping.php?v=a1&aid=7909&oid=1031&url=' 
zx='https://r.refinedads.com/bs-mapping.php?v=z1&aid=3814&oid=1031&zanpid=##zxClickID##&userid=##UserID##&url=' 
zxpn='https://r.refinedads.com/bs-mapping.php?v=z1&aid=3840&oid=1031&zanpid=##zxClickID##&userid=##UserID##&url=' 
la='https://r.refinedads.com/bs-mapping.php?aid=3843&oid=1031&c1=leadalliance&c2=XXXXX&c3=default&clid=YYYYY&url=' 
tv='https://r.refinedads.com/bs-mapping.php?aid=7639&oid=1031&c1=leadalliance&c2=XXXXX&c3=default&clid=YYYYY&url=' 


with open('input_csv.csv', 'r', newline='') as csvfile: 
    matrixreader = csv.DictReader(csvfile) 
    liste=[] # initialize here 
    for row in matrixreader: 
     va = afn+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
     vzx = zx+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
     vzxpn = zxpn+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
     vla = la+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
     vtv = tv+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
     liste = liste.append([[row['Name'], va, vzx, vzxpn, vla, vtv]]) # keep appending 
    print(liste) 

    with open('output.csv', 'w', newline='') as csvfile: 
     a = csv.writer(csvfile, delimiter=',') 
     a.writerows(liste) 
1

1つの問題は、liste変数を読み取りループ外に更新しようとすることです。もう1つの問題は、appendingではなく、liste変数に再割り当てすることです。

ただし、リスト内のすべての行を収集して出力に書き込む必要はありません。あなたは読んで書いた瞬間に各行を書くことでそれを行うことができます。

with open('input_csv.csv', 'r', newline='') as csvfile_in: 
    with open('output.csv', 'w', newline='') as csvfile_out: 
     matrixreader = csv.DictReader(csvfile_in) 
     a = csv.writer(csvfile_out, delimiter=',') 
     for row in matrixreader: 
      va = afn+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
      vzx = zx+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
      vzxpn = zxpn+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
      vla = la+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
      vtv = tv+quote(row['Link']+'&prf[pid]=[PARTNERID]&prf[a]=[AFFID]'+'-'+row['Promocode']) 
      a.writerow([row['Name'], va, vzx, vzxpn, vla, vtv]) 

これは、入力ファイルが非常に大きい場合は、これがより効率的でメモリにやさしい方法です。

関連する問題