Python CSV格式硬返回



我正在尝试将数据附加到CSV文件中。我希望能够在ExcelMacOS中不时手动更改文件,然后重新运行python程序。

但是,当我打开文件并将其保存在ExcelMacOS中时,它会删除硬返回。然后在随后的运行中,缺少硬返回会打乱格式。

with open("test.csv", 'a', newline='', encoding='utf-8') as csvfile:
fieldnames = ['ID', 'Name']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow({'ID': "1", 'Name': "Frank"})
writer.writerow({'ID': "2", 'Name': "Bob"})

在初始python运行之后

$ cat -e test.csv
1,Frank^M$
2,Bob^M$

在MacOS 上手动保存在Excel中之后

$ cat -e test.csv
1,Frank^M$
2,Bob

第二次运行python程序后。请注意格式混乱。

$ cat -e test.csv
1,Frank^M$
2,Bob1,Frank^M$
2,Bob^M$

我认为您正在尝试利用附加模式,当Excel没有添加(或直接删除(尾部换行符时,您的流程就会中断。

最简单的答案是;不要创建一个依赖于最后换行的过程;。Excel不必包含它^1:

2. The last record in the file may or may not have an ending line
break.  For example:
aaa,bbb,ccc CRLF
zzz,yyy,xxx

我不能说什么时候追加是正确的做法,但我认为这对CSV来说是错误的。

相反,始终将您的数据视为CSV。。。总是使用CSV模块的读取器和写入器,因为他们可以处理CSV规范的模糊性;没有最后的新行";这对他们来说不是问题。

以下是Excel中的数据模型:

cat -e test.csv
1,Frank^M$
2,Bob

运行此:

import csv
Fieldnames = ["ID", "Name"]
# Normalize previous CSV data into `previous_rows`
with open("test.csv", newline="") as csvfile:
reader = csv.DictReader(csvfile, fieldnames=Fieldnames)
previous_rows = list(reader)
# previous_rows = [row for row in reader if row]  # to drop empty rows

with open("test.csv", "w", newline="") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=Fieldnames)
writer.writerows(previous_rows)
# "Append" new rows
writer.writerow({"ID": "3", "Name": "Frank"})
writer.writerow({"ID": "4", "Name": "Bob"})

它只是起作用:

cat -e test.csv
1,Frank^M$
2,Bob^M$
3,Frank^M$
4,Bob^M$

相关内容

  • 没有找到相关文章

最新更新