0

これは私のスクリプトです:

from itertools import groupby
import operator
import csv

l = [['Cautus  B.V.', 'Cautus  B.V.plein 92', 'plein 92', '1129008', '10', 'AVB', 'Geachte mevrouw Daa', 'Mevrouw C.P. Daa', 'admin@planet.nl'] ,
['Cautus  B.V.', 'Cautus  B.V.Wei 9-11', 'Wei 9-11', '1019123', '10', 'AVB', 'Geachte mevrouw Daa', 'Mevrouw C.P. Daa', 'admin@planet.nl'] ,
['Cautus  B.V.', 'Cautus  B.V.plein 92', 'plein 92', '1129008', '10', 'BEDR', 'Geachte mevrouw Daa', 'Mevrouw C.P. Daa', 'admin@planet.nl'] ,
['Cautus  B.V.', 'Cautus  B.V.Wei 9-11', 'Wei 9-11', '1019123', '10', 'BEDR', 'Geachte mevrouw Daa', 'Mevrouw C.P. Daa', 'admin.@planet.nl'] ,
['De company', 'De companytiellaan 42', 'tiellaan 42', 'KD0022232', '13', 'AVB', 'Geachte heer Tigch', 'De heer I. Tigch', 'imre@company.nl'] ,
['De company', 'De companytiellaan 42', 'tiellaan 42', 'KD0022232', '13', 'DAS', 'Geachte heer Tigch', 'De heer I. Tigch', 'imre@company.nl'] ,
['Slever ', 'Slever klopt 42', 'klopt 42', 'KD2220115', '17', 'AVB', 'Geachte heer Slever', 'De heer T. Slever', 'info@company.com']]

sortkey = operator.itemgetter(1,5)
l_clean = sorted(l,key=sortkey)
l_final = [(k, list(v)) for k,v in groupby(l_clean, key = operator.itemgetter(1))]

for k,v in l_final:
   info_rest = v[0][:5]+v[0][5:]
   info_combine = map(operator.itemgetter(5),v)
   uniekid = k
   verz = info_combine
   naam = info_rest[0]
   risicoadr = info_rest[2]
   polisnummer = info_rest[3]
   relatienummer = info_rest[4]
   aanhef = info_rest[6]
   contactpersoon = info_rest[7]
   emailadr = info_rest[8]
   klantgegevens = [uniekid,naam,verz,risicoadr,polisnummer,relatienummer,aanhef,contactpersoon,emailadr,]

import csv
   with open('export.csv', 'w') as f:
       writer = csv.writer(f)
       writer.writerows(klantgegevens)

私が書くとき、私は私の.csvファイルで結果としてこれを取得します:

S   l   e   v   e   r       k   l   o   p   t       4   2

ご覧のとおり、彼はその中に1つの通りの名前しか書いていません。

これを手伝ってくれる人はいますか?

4

1 に答える 1

5

リストは1つだけで(klantgegevens各ループでリセットします)、そのリストを複数の行の完全なセットであるかのように記述します。

CSVモジュールは、その1つのリストをシーケンスのセットとして認識します。つまり、各文字列エントリは個々の文字のシーケンスとして認識され、それがcsvファイルに書き込まれます。

>>> klantgegevens
['Slever klopt 42', 'Slever ', ['AVB'], 'klopt 42', 'KD2220115', '17', 'Geachte heer Slever', 'De heer T. Slever', 'info@company.com']
>>> list(klantgegevens[0])
['S', 'l', 'e', 'v', 'e', 'r', ' ', 'k', 'l', 'o', 'p', 't', ' ', '4', '2']

klantgegevensリストを収集しながら、各行を個別に書き込むことができます。

import csv
with open('export.csv', 'w') as f:
    writer = csv.writer(f)
    for k,v in l_final:
       info_rest = v[0][:5]+v[0][5:]
       info_combine = map(operator.itemgetter(5),v)
       uniekid = k
       verz = info_combine
       naam = info_rest[0]
       risicoadr = info_rest[2]
       polisnummer = info_rest[3]
       relatienummer = info_rest[4]
       aanhef = info_rest[6]
       contactpersoon = info_rest[7]
       emailadr = info_rest[8]
       klantgegevens = [uniekid,naam,verz,risicoadr,polisnummer,relatienummer,aanhef,contactpersoon,emailadr,]
       writer.writerow(klantgegevens)

これで、リストは一連の列として扱われ、完了するたびに各行が書き込まれます。

klantgegevensまたは、各リストを結果リストに収集する必要があります。

results = []    
for k,v in l_final:
    # processing
    klantgegevens = [uniekid,naam,verz,risicoadr,polisnummer,relatienummer,aanhef,contactpersoon,emailadr,]
    results.append(klantgegevens)

次に、そのリストのリストをCSVファイルに書き込みます。

import csv
with open('export.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerows(results)
于 2012-10-19T12:36:44.627 に答える