给条目编号

2024-09-30 16:20:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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.')

每个名字都有一个数字。你知道吗


Tags: csvininforestfordeoperatorwriter
2条回答

您有一个外部循环,它遍历名称列表。因此,当前循环在字符串name上迭代。不幸的是,提供的代码太短了,不能看到更多的东西。你知道吗

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

如果您的namelist 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

相关问题 更多 >