【问题标题】:Python CSV (DictWriter) overwriting data?Python CSV(DictWriter)覆盖数据?
【发布时间】:2021-06-30 19:57:31
【问题描述】:

在过去的 3 个月里,我一直在运行一个 Python 脚本。简单的抓取工具,它抓取当天收集的日期、积分和当前时间,并使用DictWriter 将其写入 CSV。

错误原因

昨天,我不得不打开 CSV(使用 Apple 的默认 Numbers 应用程序)并删除最近输入的日期、点、时间。从那时起,它一直将新条目附加到前一行,创建额外的列。我没有编辑任何代码。

让我尝试创建问题的视觉效果:

bug前的CSV格式

最上面一行是标题

| Date   | Points | Time Completed |
| Mar 29 | 15141  | 08:55 AM       |
| Mar 30 | 15411  | 08:56 PM       |
| Mar 31 | 15681  | 11:08 AM       |
| Apr 01 | 15911  | 10:40 AM       |

编辑后的CSV格式

| Date   | Points | Time Completed  |       |          |
| Mar 29 | 15141  | 08:55 AM        |       |          |
| Mar 30 | 15411  | 08:56 PM        |       |          |
| Mar 31 | 15681  | 11:08 AM        |       |          |
| Apr 01 | 15911  | 10:40 AMApril02 | 16276 | 07:57 PM |

代码

我没有更改之前/之后的任何代码。

def write_csv(points):
    headers = ['Date', 'Points', 'Time completed']
    today = date.today().strftime("%B %d")
    now = datetime.now().strftime("%I:%M %p")
    with open('/Users/Shared/PointsTracker.csv', 'a') as PointsTracker:
        writer = csv.DictWriter(PointsTracker, fieldnames=headers)
        
        writer.writerow({
            headers[0]: today,
            headers[1]: points,
            headers[2]: now
        })

【问题讨论】:

  • 看起来您删除了文件末尾的尾随换行符。不要那样做。也可能是 Numbers 应用程序在做这件事。在这种情况下使用不同的文本编辑器。此外,请在打开文件时使用newline='',如csv 文档中所述。
  • 感谢您的及时回复。将行更改为with open('/Users/Shared/PointsTracker.csv', 'a',newline='') as PointsTracker: 似乎无法解决问题。有什么建议吗?
  • 如果您在编辑文件时删除了换行符,newline='' 将无法修复。这只是要使用的正确参数。使用文本编辑器放回换行符
  • 非常感谢!这个问题已经困扰了我一段时间了!如果您想write the solution again as an answer,我很乐意将其标记为正确。

标签: python python-3.x macos csv apple-numbers


【解决方案1】:

编辑文件时删除了尾随换行符。编辑文件并将其放回原处。

【讨论】:

    猜你喜欢
    • 2016-03-02
    • 2014-01-10
    • 1970-01-01
    • 2018-10-23
    • 2020-08-06
    • 2013-06-28
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    相关资源
    最近更新 更多