python 在 linux 下写文件的问题

2015 年 6 月 3 日
 jiangxinyu226

python脚本, 先读了一个文件,然后写到另一个文件里,结果新写入的文件的每行都有一个 ^M
,如何去掉啊

4740 次点击
所在节点    Python
15 条回复
Tiande
2015 年 6 月 3 日
脚本第二行加入以下注释:
# -*- coding: utf-8 -*-
jiangxinyu226
2015 年 6 月 3 日
@dtdnqsb 厉害啊。。我之前加了# coding=utf-8是不行的?
这两个有区别吗
CodeDrift
2015 年 6 月 3 日
@dtdnqsb 同问.#coding=utf-8有什么区别。。
TheCure
2015 年 6 月 3 日
windows表示回车换行是\r\n
*nix表示回车是\r
在windwos下打开的文件应为回车的关系,所以你会看到^M
不过我并没有在linux下遇到过这种问题,只有和windows打交道的时候才会出现这个问题,你自己google下就知道了记得有个命令dos2unix之类的,最简单的就是设置utf8编码
weyou
2015 年 6 月 3 日
读取的文件和写入的文件都用rb打开应该可以。
xifangczy
2015 年 6 月 3 日
@callofmx linux 回车不是\n么
Tiande
2015 年 6 月 3 日
@jiangxinyu226
@Anybfans
看上去意思都是指使用 utf-8 编码,但支持 "# -*- coding: utf-8 -*-" 的编辑器更多。
也就是说,Linux 下python 调用的编辑器可能默认只支持 "# -*- coding: utf-8 -*-"

@callofmx
windows 是 <CR><LF>
*nix 是 <LF>
\r\n 是 C 语言的表示方法。
ratazzi
2015 年 6 月 3 日
@jiangxinyu226 @Anybfans 一个是 vim 风格,一个是 emacs 风格,仅此而已,效果一样

文件不一样是因为换行符的原因
CodeDrift
2015 年 6 月 3 日
@dtdnqsb
@ratazzi
谢谢了 。涨姿势了
ratazzi
2015 年 6 月 3 日
准确的说,上面只有 emacs 风格,另外一个应该算不上 vim 风格,参考
https://www.python.org/dev/peps/pep-0263/
fxxkgw
2015 年 6 月 3 日
dos2unix
TheCure
2015 年 6 月 3 日
@dtdnqsb 准确的说 windows是CRLF Linux是LF Classic Mac是CR
另外我不知道什么是C语言的表述方法,不就是换行符吗?Pyhton Java等文本文件都是一样的
lilydjwg
2015 年 6 月 3 日
把脚本贴出来,是不是文本模式和二进制模式的问题?还有你执行和查看文件的操作系统、查看文件所使用的工具、Python 版本是 2 还是 3?

显示成 ^M 的我只知道有一种情况:非 Windows 上的 Vim。它不支持混合换行符,而 Windows 上的文本文件经常没有最后一个换行符,所以被 Windows 上的 Vim 认为是混合换行符,而非 Windows 平台上则会被认为是 UNIX 换行符(LF)所以把所有 CR 字符都显示出来了。
Tiande
2015 年 6 月 3 日
@callofmx 说的也是
jiangxinyu226
2015 年 6 月 5 日
@ratazzi 貌似是,用的Vim打开的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/195796

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX