0

csv 文件具有以下内容:

Cautus Drogisterijen B.V.
Cautus Drogisterijen B.V.
Clever Franke
De Inrichting
Teva Pharmaceuticals Europe B.V.

名称从 csv 导入,然后转换等。

我有以下脚本:

#Gegevens
l = (gegevens)
#script
#Welke sleutels moet hij pakken
sortkey = operator.itemgetter(1,5)
#De identieke sleutel selecteren
l_clean = sorted(l,key=sortkey)
#delijst maken
l_final = [(k, list(v)) for k,v in groupby(l_clean, key = operator.itemgetter(1))]
#importeer csv optie
import csv
#bestand kiezen
with open('export.csv', 'wb') as f:
    #Write 
    writer = csv.writer(f)
    #loop over de lijst
    for k,v in l_final:
    #welke gegevens hij moet tonen
       info_rest = v[0][:5]+v[0][5:]
       #combineerd de verzekeringen
       info_combine = map(operator.itemgetter(5),v)
       uniekid = k
       verzl = info_combine
       name = 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 = []      
       #lijst met alle gegevens
       klantgegevens1 = [uniekid,naam,verz,risicoadr,polisnummer,relatienummer,aanhef,contactpersoon,emailadr]       
       klantgegevens.append (klantgegevens1)     
       for i, w in enumerate(name):
           print (i,w)

       #welke gegevens hij erin moet schrijven
       writer.writerow(klantgegevens)

这产生了这个输出:

(0, 'C')
(1, 'a')
(2, 'u')
(3, 't')
(4, 'u')
(5, 's')
(6, ' ')
(7, 'D')
(8, 'r')
(9, 'o')
(10, 'g')
(11, 'i')
(12, 's')
(13, 't')
(14, 'e')
(15, 'r')
(16, 'i')
(17, 'j')
(18, 'e')
(19, 'n')
(20, ' ')
(21, 'B')
(22, '.')
(23, 'V')
(24, '.')
(0, 'C')
(1, 'a')
(2, 'u')
(3, 't')
(4, 'u')
(5, 's')
(6, ' ')
(7, 'D')
(8, 'r')
(9, 'o')
(10, 'g')
...

如您所见,他在名称中的每个字母上循环并给该字母一个数字,但我想要的是我的输出如下所示:

(0, 'cautus drogisterij B.V.')
(1, 'cautus drogisterij B.V.')

每个名字都有一个数字。

4

2 回答 2

3

如果您name是 a list of names,那么您的代码应该可以正常工作,前提是您没有另一个包含该循环的循环:-

这有效: -

>>> name = ['rohit', 'jain']
>>> for i,x in enumerate(name):
    print (i, x)


(0, 'rohit')
(1, 'jain')

然而,这就是你得到的,你可能有一个外循环,迭代列表: -

>>> name = ['rohit', 'jain']
>>> for name in name:
        for i, x in enumerate(name):
            print (i, x)


(0, 'r')
(1, 'o')
(2, 'h')
(3, 'i')
(4, 't')
(0, 'j')
(1, 'a')
(2, 'i')
(3, 'n')

更新: -

info_rest实际上是一个一维列表: -

for k,v in l_final:
    info_rest = v[0][:5]+v[0][5:]

上面的代码为您提供了二维列表中的一维列表v:-

>>> v = [['rohit', 'jain'], ['a', 'ab']]
>>> info_rest = v[0][:5]+v[0][5:]
>>> info_rest
['rohit', 'jain']

所以,当你说: -

name = info_rest[0];  # name contains 'rohit;

你的名字将包含一个字符串而不是一个列表。-'rohit'在这种情况下

所以,与其迭代你的名字: -

for i, w in enumerate(name):
           print (i,w)

只需打印它:-

print (k, name)  # k is the index from outer loop
于 2012-10-24T11:50:30.550 回答
0

您有一个遍历名称列表的外部循环。因此,此当前循环遍历 string name。不幸的是,提供的代码太短,无法看到更多内容。

编辑:来吧,您的评论显然是在说“loop over de lijst”。只需删除整个for循环,然后print(k, name)

于 2012-10-24T12:02:08.790 回答