use*_*635 5 python csv enumerate
我的 CSV 看起来像
John,Bomb,Dawn
3,4,5
3,4,5
3,4,5
Run Code Online (Sandbox Code Playgroud)
我想在前面添加 ID 列,如下所示:
ID,John,Bomb,Dawn
1,3,4,5
2,3,4,5
3,3,4,5
Run Code Online (Sandbox Code Playgroud)
使用 enumerate 函数,但我不知道如何。到目前为止,这是我的代码:
import csv
with open("testi.csv", 'rb') as input, open('temp.csv', 'wb') as output:
reader = csv.reader(input, delimiter = ',')
writer = csv.writer(output, delimiter = ',')
all = []
row = next(reader)
row.append('ID')
all.append(row)
count = 0
for row in reader:
count += 1
while count:
all.append(row)
row.append(enumerate(reader, 1))
break
writer.writerows(all)
Run Code Online (Sandbox Code Playgroud)
并且输出全错了:
John,Bomb,Dawn,ID
3,4,5,<enumerate object at 0x7fb2a5728d70>
3,4,5,<enumerate object at 0x1764370>
3,4,5,<enumerate object at 0x17643c0>
Run Code Online (Sandbox Code Playgroud)
所以 ID 最终出现,它应该在开始的时候,它甚至不做 1、2、3。出现了一些奇怪的错误。
我可以建议下面的代码来解决您的问题:
import csv
with open("testi.csv", 'rb') as input, open('temp.csv', 'wb') as output:
reader = csv.reader(input, delimiter = ',')
writer = csv.writer(output, delimiter = ',')
all = []
row = next(reader)
row.insert(0, 'ID')
all.append(row)
for k, row in enumerate(reader):
all.append([str(k+1)] + row)
writer.writerows(all)
Run Code Online (Sandbox Code Playgroud)
更紧凑的代码可以是:
all = [['ID'] + next(reader)] + [[str(k+1)] + row for k, row in enumerate(reader)]
Run Code Online (Sandbox Code Playgroud)
更新(一些解释):
您对功能的理解错误enumerate。enumerate应该在for循环中使用,当您迭代enumerate函数结果时,您会得到元组的序列,其中第一项是列表中项目的有序数,第二项是项目本身。
但enumerate函数返回是对象(文档),因此当您尝试将其转换为字符串时,它会调用__repr__魔术方法并将枚举对象转换为<enumerate object at ...>。
换句话说,enumerate有助于避免循环中的额外计数器,例如count += 1变量。
另外你这里有一个非常奇怪的代码:
while count:
all.append(row)
row.append(enumerate(reader, 1))
break
Run Code Online (Sandbox Code Playgroud)
这部分代码永远不能执行多次。