【问题标题】:How to write on a new line using for loop?如何使用 for 循环在新行上书写?
【发布时间】:2019-11-12 04:39:01
【问题描述】:

我正在设置一个脚本,我需要为我的 for 循环的每个增量写一个新行。

目前,我先写标题,然后再写下一行,但每次递增时,它都会擦除我的行以写入新数据。

headers = [['Name', 'Age']]
for i in range(10):
   line = [[str(name), str(age)]]
   with open('myfile.csv', 'w', newline="") as f:
       writer = csv.writer(f, delimiter=';')
       writer.writerows(headers)
       writer.writerows(line)
       writer.writerows('\n')

我正在尝试使用writer.writerows('\n') 设置下一行,但它不起作用。

我认为第二行总是被覆盖,但我不知道如何使用我的循环跳转到下一行。提前致谢。

【问题讨论】:

  • 您的循环不应该在您的with 内,而不是相反吗?
  • 是的。它应该在withheaders 中的for,就在for 之前。 writerows 写了一整行,所以不需要\n
  • 我很困惑为什么在这里使用writerows。只需从headersline 中删除多余的list 包装,就可以调用普通的writerow

标签: python python-3.x csv for-loop


【解决方案1】:

你把你的代码反过来:

每次循环执行时打开文件进行写入(而不是追加),每次再次写入标题并只写入一行。

writerows,顾名思义,写满行,所以不需要换行。它会写入row_s_,因此您必须使用[[]] 创建标题和行。用writerow写一个。

headers = ['Name', 'Age']
with open('myfile.csv', 'w', newline="") as f:
    writer = csv.writer(f, delimiter=';')
    writer.writerow(headers)
    for i in range(10):
        line = [str(name), str(age)]
        writer.writerow(line)

为什么您的writer.writerows('\n') 不起作用?因为正如我上面所说,它是 row_s_,它需要一个可迭代的。它可以用作writer.writerows(['\n'])(创建一个单元素列表)或writer.writerow('\n')(行,而不是行)。

【讨论】:

    【解决方案2】:

    您应该只打开文件一次,然后使用循环。

    headers = [['Name', 'Age']]
    with open('myfile.csv', 'w', newline="") as f:
        writer = csv.writer(f, delimiter=';')
        writer.writerows(headers) #I assume you want the header only once
        for i in range(10):
           line = [[str(name), str(age)]]
           writer.writerows(line)
           writer.writerows('\n')
    

    【讨论】:

    • 如果您要将open 移出循环,最好将writer 的创建移出循环。
    • @ShadowRanger 是的,我还在编辑代码...感谢您注意到它。
    • 我没有找到使用这种方法的方法。我终于找到了一个解决方案,只需在列表中添加行,然后将其写入最后的 csv 文件。喜欢:list.append(line) 然后writer.writerows(list)
    猜你喜欢
    • 2019-04-06
    • 2015-06-04
    • 2018-05-13
    • 2020-09-26
    • 2023-01-21
    • 2017-11-30
    • 2017-01-09
    • 2022-12-10
    • 2022-11-04
    相关资源
    最近更新 更多