【问题标题】:Writing to csv with for loops使用 for 循环写入 csv
【发布时间】:2018-01-19 06:16:00
【问题描述】:

我正在尝试为 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)

我需要更改哪些内容,以便循环的每次迭代(对于 list_people 中的每个人)写入一个新行?

【问题讨论】:

  • 我想你想使用writerows(注意s)而不是writerow
  • @UnholySheep 这会产生错误:“_csv.Error: sequence expected”

标签: python csv for-loop


【解决方案1】:

将每对姓名和年龄附加为一个列表,然后使用csv.writerwriterows方法:

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)

【讨论】:

    【解决方案2】:

    打开你的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)
    

    【讨论】:

      猜你喜欢
      • 2017-11-21
      • 2016-09-30
      • 2018-03-14
      • 2013-08-28
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多