V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
jiangxinyu226
V2EX  ›  Python

python 在 linux 下写文件的问题

  •  
  •   jiangxinyu226 · 2015-06-03 14:37:48 +08:00 · 3990 次点击
    这是一个创建于 3464 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    15 条回复    2015-06-05 02:44:34 +08:00
    Tiande
        1
    Tiande  
       2015-06-03 14:41:54 +08:00
    脚本第二行加入以下注释:
    # -*- coding: utf-8 -*-
    jiangxinyu226
        2
    jiangxinyu226  
    OP
       2015-06-03 16:20:49 +08:00
    @dtdnqsb 厉害啊。。我之前加了# coding=utf-8是不行的?
    这两个有区别吗
    Anybfans
        3
    Anybfans  
       2015-06-03 16:24:58 +08:00
    @dtdnqsb 同问.#coding=utf-8有什么区别。。
    TheCure
        4
    TheCure  
       2015-06-03 16:33:34 +08:00
    windows表示回车换行是\r\n
    *nix表示回车是\r
    在windwos下打开的文件应为回车的关系,所以你会看到^M
    不过我并没有在linux下遇到过这种问题,只有和windows打交道的时候才会出现这个问题,你自己google下就知道了记得有个命令dos2unix之类的,最简单的就是设置utf8编码
    weyou
        5
    weyou  
       2015-06-03 16:39:21 +08:00
    读取的文件和写入的文件都用rb打开应该可以。
    xifangczy
        6
    xifangczy  
       2015-06-03 16:39:29 +08:00
    @callofmx linux 回车不是\n么
    Tiande
        7
    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
        8
    ratazzi  
       2015-06-03 17:07:02 +08:00
    @jiangxinyu226 @Anybfans 一个是 vim 风格,一个是 emacs 风格,仅此而已,效果一样

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

    显示成 ^M 的我只知道有一种情况:非 Windows 上的 Vim。它不支持混合换行符,而 Windows 上的文本文件经常没有最后一个换行符,所以被 Windows 上的 Vim 认为是混合换行符,而非 Windows 平台上则会被认为是 UNIX 换行符(LF)所以把所有 CR 字符都显示出来了。
    Tiande
        14
    Tiande  
       2015-06-03 19:37:41 +08:00
    @callofmx 说的也是
    jiangxinyu226
        15
    jiangxinyu226  
    OP
       2015-06-05 02:44:34 +08:00 via Android
    @ratazzi 貌似是,用的Vim打开的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1216 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:29 · PVG 02:29 · LAX 10:29 · JFK 13:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.