使用for循环写入CSV文件

4
我正在尝试为list_people中的每个人的姓名和年龄编写一行新记录。如果列表中有3个人,则我的CSV应该有3行和2列,如下所示:
Joann  15
Maria  13
Peter  19

我的CSV文件只有1行和6列,如下所示:

Joann 15 Maria 13 Peter 19

这里是我使用的代码。
row_lines=[] 

for i in list_people:

    info = inspect.getmembers(i)

    name = info[1]
    row_lines.append(name)
    age = info[2]
    row_lines.append(age)

with open('test.csv', 'w') as csvFile:
    writer=csv.writer(csvFile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
    writer.writerow(row_lines)

我需要改变什么,才能使每次循环(对于列表中的每个人)都写入新的一行?

1
我认为你想使用writerows(注意s)而不是writerow - UnholySheep
@UnholySheep 这会生成一个错误:"_csv.Error: 序列期望" - nikki_c
2个回答

3

只需打开您的csv文件一次,每次迭代写入一行,就不需要那么多变量:

with open('test.csv', 'w') as csvFile:
   writer=csv.writer(csvFile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')

   for i in list_people:
       info = inspect.getmembers(i)
       writer.writerow(info[1:3])

或者完全通过使用生成器推导式将for循环替换为writerows,这样甚至更快:
writer.writerows(inspect.getmembers(i)[1:3] for i in list_people)

0
将每对姓名和年龄作为列表附加,然后使用csv.writer的writerows方法:
for i in list_people:
    info = inspect.getmembers(i)
    row_lines.append(info[1:3]) # slice [1:3] returns a list of items 1 and 2

with open('test.csv', 'w') as csvFile:
    writer = csv.writer(csvFile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
    writer.writerows(row_lines)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接