如何更改行尾约定?

3

我原以为这是一项简单的任务。我需要创建一个文本文件,其中每行结尾使用Unix LF约定。然而,当我尝试使用pandas.to_csv来实现这一点时,最终得到的是CR LF。如果我只在自己的机器上工作并且所有工作都是使用Python完成的,那么这并不是一个问题。但是我没有。该代码将成为同事使用的应用程序的一部分,并且该文件将被发送给第三方进行自动化处理。代码如下:

df.to_csv("filename.txt", sep = '\t',line_terminator = '\n')

这段代码位于我的中间,但是当文件保存在目标文件夹中时,它总是切换回CR LF。我认为这可能与Windows“有帮助的”有关。我尝试使用这种解决方案,但没有成功。我也没有找到适用于Python的dos2unix类型软件包。是否有任何方法可以编写以'\n'结尾的行并使其在Windows中保持不变(如果可能使用to_csv)?
我正在使用Python 2.7和Windows 7。

编辑:我知道有notepad++,但我想用Python编写所有内容,这样我的同事只需点击一个按钮(我将使用Tkinter并在完成后将其冻结为.exe)。.txt可以是Windows格式,但我将把相同的信息写入.MAT和.ref文件中。在这些文件中,需要'\n'作为行尾,但Windows仍然给出'\r\n'。


我建议您尝试写文件名时不要使用Windows熟悉的扩展名(如.txt),或者干脆不加扩展名。这在Linux上无所谓。 - Saher Ahwal
@SaherAhwal:文件扩展名与问题无关,问题出在文件中的数据。 - Bryan Oakley
1个回答

7
注意:本回答仅适用于Python 2的CSV处理。 to_csv默认以'w'模式打开文件,默认为文本模式。在Windows中,文本模式将\n转换为\r\n。相反,应该以二进制模式打开文件,并在帧中包含非ASCII字符时指定编码。
df.to_csv('filename.txt',sep='\t',mode='wb',encoding='utf8')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接