如何解决python中添加到CSV文件的问题

问题描述 投票:0回答:2

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

我写了这个:

 import csv

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

当我运行此文件后打开文件时,我看到newFilm已添加到最后一行的同一行的新列中,列类型和newGenre。我想要这样:

受到惊悚片

newFilm,newGenre

我知道了:

拍摄,惊悚片,新类型

我该如何解决?感谢您的帮助

python python-3.x csv
2个回答
0
投票

只需将newline = ''添加到open()参数:

import csv

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

以上建议的更改会自动添加新行之后,并添加新记录。重要的是,上次打开并手动保存csv文件时,光标在新行中,如图所示:

enter image description here

因此,无需添加新行之前添加新记录。


0
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.