【问题标题】:Python add entire column to csv file, without reading the file contentPython将整列添加到csv文件,而不读取文件内容
【发布时间】:2019-10-14 23:14:29
【问题描述】:

我需要使用 Python 将列添加到 csv 文件。我能想到的唯一方法是读取整个文件,编辑每一行以添加 1 个元素,然后再次写入文件。但是我真的不想这样做,因为文件的大小(超过 32000 行,每次我想添加一列时似乎需要大量读写)。即使使用 csv 模块,我认为原理是一样的,阅读所有内容,再次编辑和编写。

要清楚,下面是一个 csv 文件示例。

1,2
1,2
1,2
1,2

我想添加第三列,这样文件就会变成:

1,2,3
1,2,3
1,2,3
1,2,3

如果我想添加一整行(或一行),我可以使用open(csvfile, 'a') 并将最后一行“附加”到文件中。是否有类似的选项来添加列?

【问题讨论】:

  • awksed 可以在这里使用
  • 但即使在这种情况下,您也必须读取(和写入)孔文件,不是吗?
  • 不,这是不可能的。我建议您使用 pandas 而不是 csv 库来操作您的数据。有点矫枉过正,但更直观。
  • 错误的解决方案 - 循环遍历每一行。附加新值。将其写入新文件或同一文件。最好的解决方案是使用pandas

标签: python file csv


【解决方案1】:

对于原始 csv 文件,例如 foo.csv

1,2 
1,2
1,2
1,2

只需创建另一个包含要添加的列的文件,例如bar.csv

3
3
3
3

然后,可以在 python 中使用os.system as 调用 Unix 的 paste 命令

import os
os.system("paste foo.csv  bar.csv -d ',' > output.csv")

这给出了output.csv 的结果

1,2,3
1,2,3
1,2,3
1,2,3

【讨论】:

  • 我认为使用粘贴本质上意味着该文件将被读取以合并到新文件中。但是我认为这是最好的答案!简单,无需在 Python 中进行任何数据操作。我接受了,但由于声誉低而无法投票。
  • paste 确实会遍历文件的全部内容,但它不会在内存中一起读取整个文件。它逐行遍历。
【解决方案2】:

很遗憾,这是不可能的。文本文件是序列,如果你想在中间添加一些东西,你必须移动所有剩余的内容(因此你必须读写它)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多