【问题标题】:Add new entry to existing csv with csv writer使用 csv writer 向现有 csv 添加新条目
【发布时间】:2021-06-28 13:47:48
【问题描述】:

遇到了一个非常简单的问题。但无法弄清楚我的错误。我想将在特定时间间隔内更新的值的列表 csv_line = ["name 1", "value 1", "name 2", "value 2",...] 保存为 csv 文件。我目前的方法(受post 启发)看起来像:

with open("live_data.csv", "a", newline="") as file:

    writer = csv.writer(file)
    writer.writerow(csv_line)
    file.close()

导致如下输出:

n
a
m
e

1

v
a
...

当我明确希望我的 csv 看起来像这样时:

entry1
entry2
...

我想我在这里遗漏了一些非常明显的东西......

【问题讨论】:

  • 确保发布实际使用的代码及其生成的确切输出。您的代码可以按照您输入的方式工作。 file.close() 也是不必要的。 with 将关闭文件。

标签: python list csv delimiter


【解决方案1】:

跑步

import csv

csv_line = ["name 1", "value 1", "name 2", "value 2"]
with open("live_data.csv", "a", newline="") as file:

    writer = csv.writer(file)
    writer.writerow(csv_line)

保存在 live_data.csv 中 name 1,value 1,name 2,value 2 据我了解,这是您打算完成的。

编辑:我忘了提到 with 语句你不需要关闭文件 [1]


[1]https://docs.python.org/3/reference/compound_stmts.html#the-with-statement

【讨论】:

    【解决方案2】:

    这应该按预期工作:

    import csv
    
    csv_line = ["name 1", "value 1", "name 2", "value 2"]
    
    with open("live_data.csv", "w", newline="") as file:
        writer = csv.writer(file)
        for line in csv_line:
            writer.writerow([line])
    

    使用开放语法时,您不再需要关闭文件。另外,在使用 writerow 时,该函数需要一个列表输入,因此使用字符串作为输入将首先将其转换为列表然后写入,从而获得不同列中的每个字母。

    此外,根据您的用例,如果您只编写一次,您可以在 open() 中使用 'w' 作为选项。否则,保留 'a' 将继续添加到该文件中。

    【讨论】:

    • 过于复杂。 @user2556520 答案是正确的(不需要 for 并将 [line] 包装为列表)以及 OP 最初在问题中的内容,因此需要编辑问题以显示真实代码和真实输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2021-07-27
    • 2021-09-30
    • 2020-06-01
    • 2019-07-23
    相关资源
    最近更新 更多