python 在 linux 下写文件的问题

2015-06-03 14:37:48 +08:00
 jiangxinyu226

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

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

@callofmx
windows 是 <CR><LF>
*nix 是 <LF>
\r\n 是 C 语言的表示方法。
ratazzi
2015-06-03 17:07:02 +08:00
@jiangxinyu226 @Anybfans 一个是 vim 风格,一个是 emacs 风格,仅此而已,效果一样

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

显示成 ^M 的我只知道有一种情况:非 Windows 上的 Vim。它不支持混合换行符,而 Windows 上的文本文件经常没有最后一个换行符,所以被 Windows 上的 Vim 认为是混合换行符,而非 Windows 平台上则会被认为是 UNIX 换行符(LF)所以把所有 CR 字符都显示出来了。
Tiande
2015-06-03 19:37:41 +08:00
@callofmx 说的也是
jiangxinyu226
2015-06-05 02:44:34 +08:00
@ratazzi 貌似是,用的Vim打开的

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

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

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

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

© 2021 V2EX