【问题标题】:Appending .csv's in Python在 Python 中附加 .csv
【发布时间】:2016-01-28 14:34:46
【问题描述】:

我正在尝试使用 python 附加一个带有月度数字的 .csv 文件。 .csv 看起来像这样:

Month,Jan,Feb
Total,70,80
Critical,20,30
High,50,50

我一直在尝试按照这些思路开发一种方法,但没有成功:

def append_csv(high_value, critical_value)

这将导致以下结果:

append_csv(30, 20)

输出:

Month,Jan,Feb,Mar
Total,70,80,50
Critical,20,30,20
High,50,50,30

我查看了Appending to the end of a certain line,但是对于我想要完成的工作感觉效率低下并且不会修改第一行。感谢您的帮助。

【问题讨论】:

  • Month,High,Critical,Total,然后为每个月添加一行:Jan,20,50,70Feb,30,50,80 等会更有意义,也更容易。
  • 写起来更容易,但这些数据是通过表示随时间变化的值的图表直观地表示的。
  • 但是将适当的 csv 文件的列转换为图形很容易。 @MarkTolonen 的建议你还是会更好。
  • CSV 由专有仪表板使用。这是它使用的格式。我很想改变它,但它已经很好地确定了数据的呈现方式
  • 追加一行与重写整个文件以添加一列。糟糕的设计。

标签: python csv


【解决方案1】:

如果要将数据附加到文件的行,则必须将剩余的行复制到文件的下方,以便为更大的行腾出空间。通过编写一个新文件然后在最后重命名它,您可以在任何给定时间在内存中保存更少的数据。链接的答案对于您想要的东西来说太过分了......因为您只想附加数据,所以您不需要 csv 模块从现有文件中分割出行。

此脚本假定您只想将一组数据添加到文件中。

import os

def append_data(filename, month, total, critical, high):
    vals = month, total, critical, high
    tmp_filename = filename + '.tmp'
    if os.path.exists(tmp_filename):
        os.remove(tmp_filename)
    with open(filename) as fin, open(tmp_filename, 'w') as fout:
         for val in vals:
             col = ',{}\n'.format(val)
             fout.write(next(fin)[:-1] + col)
    os.remove(filename)
    os.rename(tmp_filename, filename)

# test

with open('deleteme', 'w') as fp:
    fp.write("""Month,Jan,Feb
Total,70,80
Critical,20,30
High,50,50
""")

append_data('deleteme', 'Mar', 50, 20, 30)

print(open('deleteme').read())

【讨论】:

  • 这是为我做的。非常感谢!
猜你喜欢
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 2013-11-14
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 2016-11-13
相关资源
最近更新 更多