如何在原始 excel 或 Libreoffice Calc 单元格有双行条目时编写 csv 文件?

How to write a csv file when it's original excel or Libreoffice Cal cell has double lines entries?

在 excel 或 libreoffice cal 中,一个单元格可以有多个行条目。

Row Fruit       Like/Dislike
--- ----------  ------------
1   apple       Like
    orange
2   pineapple   Dislike
3   kiwi        Like
    banana 
4   starfruit   Dislike

我首先将电子表格保存为 "test.csv" 文件。

接下来,我使用Python3的csv模块读取文件。 假设我将菠萝偏好更改为 "Like"。 此后,我想将修改后的数据写出到一个新的csv文件中。

如何将数据写入新的 csv 而不会出现以下问题?

Row Fruit       Like/Dislike
--- ----------  ------------
1   apple       Like
2   orange
3   pineapple   Like
4   kiwi        Like
5   banana 
6   starfruit   Dislike

期望的结果:

Row Fruit       Like/Dislike
--- ----------  ------------
1   apple       Like
    orange
2   pineapple   Like
3   kiwi        Like
    banana 
4   starfruit   Dislike

我用过的命令是:

 with open("out.csv", "w", newline='\n', encoding='utf_8' ) as out:
     for v in data.values():
         out.write( f'{v.number},{v.results["Fruit"]},{v.results["Choice"]}\n' )

正确的命令是什么?

您可以像这样在引号中嵌入多行字段:

"apple
orange",Like
pineapple,Dislike
"kiwi
banana",Like

当字段已经包含引号时,应使用另一个引号将其转义:

"Monitor 24""
Samsung",...

或者,如果您要从软件导出,请查找参数以将这些字段括在引号中。

如@Danny_ds 所述,我需要使用 python3 的 csv 编写器。另外,我需要设置作者的关键字dialect='excel'。那解决了我的问题。所以我的命令最终看起来像这样:

with open( "out.csv", 'w', newline='', encoding='utf-8' ) as csvfile:
    csvwriter = csv.writer( csvfile, dialect='excel' ) #Use csv writer with excel dialect.
    for v in data.values():
        csvwriter.write( [v.number,v.results["Fruit"],v.results["Choice"]] )