【问题标题】:How to fix the adding to CSV file problem?如何解决添加到 CSV 文件的问题?
【发布时间】:2020-06-01 23:15:16
【问题描述】:

我有一个包含 400 多行和 2 列的 csv 文件,其中包含电影及其类型。 我正在尝试在现有 CSV 文件的末尾添加新电影和新类型。

这是我写的:

import csv

with open('/Users/Desktop/okok.csv','a') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(["newFilm", "newGenre"])

当我在运行后打开文件时,我看到newFilm 被添加到最后一行,列genre 和newGenre,在同一行的一个新列中。

我想要这个:

Taken, Thriller
newFilm, newGenre

我明白了:

Taken, ThrillernewFilm, newGenre

我该如何解决这个问题?

【问题讨论】:

  • 您确定您的原始 csv 格式正确吗?我刚刚使用测试 csv 文件运行了您的代码,它给出了您想要的确切结果。
  • 您注意到 csv 编写器希望文件以换行符结尾,看起来您现有的文件没有。
  • 我刚刚尝试创建一个新的 csv 文件并运行它,但我遇到了同样的问题,你做了什么来尝试让它工作?

标签: python python-3.x csv


【解决方案1】:

okok.csv 不是有效的 CSV 文件。 Python 的 csv 模块假定 CSV 文件中的每一行都以换行符结束。 okok.csv 不是,所以新行附加到旧行。垃圾进,垃圾出。

作者本身无法倒带并检查有效性。但是,如果您有不遵守规则的 CSV 上游作者,您可以编写自己的例程来修复这个常见错误。在打开之前调用它以进行定期更新。

def fix_csv_file_ending(filename):
    with open(filename, "ab+") as fileobj:
        fileobj.seek(-1, 2)
        if fileobj.read() != b"\n":
            fileobj.write(b"\r\n")

# test
lines = b'good\r\ngood\r\n\bad'
open('test.csv', 'wb').write(lines)
fix_csv_file_ending('test.csv')
want = lines + b'\r\n'
got = open('test.csv', 'rb').read()
assert want == got, 'first test'
fix_csv_file_ending('test.csv')
got = open('test.csv', 'rb').read()
assert want == got, 'second test'
print(got)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 2015-12-02
    • 2021-06-28
    • 2017-01-16
    相关资源
    最近更新 更多