2

我有 python 脚本,它通过读取多个 csv 文件作为输入来生成 CSV 文件。从 linux 机器上,我使用 mail 命令将该 csv 文件作为电子邮件附件发送。当我使用 MS Excel 在窗口机器上打开该附件时,它会在 csv 中存在的每一行之间添加一个额外的空白行。当我使用 vi 编辑器在 linux 中打开该文件时,csv 文件中只有四行。当我使用winSCP将该文件从linux复制到窗口并在MS Excel文件中打开时,它更奇怪没有额外的空行。邮件命令有什么问题,或者我的脚本没有生成正确的 csv 文件。

任何人都可以发现我在这个过程中缺少的东西。

4

2 回答 2

1

您可能会遇到不同平台特定行尾的问题。

Windows 使用\r\n,Mac(OS X 之前)使用\r,UNIX 使用\n.

我建议检查导致十六进制编辑器出现问题的 .csv 或hexdump

# hexdump -C test.csv
00000000  31 3b 32 3b 33 0a 61 3b  62 3b 63 0a              |1;2;3.a;b;c.|
0000000c

0a这里是换行符 ( \n)。Windows\r\n会是0d 0a)。

为了(测试)将文件从 UNIX 转换为 Windows 行结尾(反之亦然),您可以使用dos2unix / unix2dos 工具

于 2013-10-27T14:16:06.660 回答
1

有关于 CSV 写入器行为的讨论,涉及额外新行的出现。此外,该行为似乎与 2.7 和 3.0 版本不同。

链接讨论了此类问题的发生。然而,这个SO question 给出了一个解决方案。

根据您的理解,通过执行类似的操作来控制 CSV 编写器必须如何编写换行符总是好的

csv.writer(sys.stdout, lineterminator='\n')
于 2013-10-27T14:30:13.907 回答