出口不完整

时间:2012-10-19 12:24:17

标签: python csv

这是我的剧本:

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 个答案:

答案 0 :(得分:5)

您只有一个列表(在每个循环中重置klantgegevens),并且您将该列表写为好像是一整套多行。

CSV模块将一个列表视为一组序列,这意味着每个字符串条目都被视为一系列单个字符,然后将其写入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)