• 技术文章 >后端开发 >Python教程

    Python换行符问题:rn还是n?

    2016-06-06 16:23:41原创2315
    执行以下Python代码:

    fn = 'test.txt'
    file(fn, 'w+').write('test\ntest2')
    content = file(fn, 'r').read()
    print content.replace('\r', '\\r').replace('\n', '\\n')

    打印的结果不依赖平台,都是:
    test\ntest2
    但是test.txt的内容却依赖平台而变化(用notepad++、vi等程序查看):
    windows下是:test\r\ntest2
    linux下却是:test\ntest2

    我想问的问题是,如何保证Python写入文件的'\n'字符不随平台变化,即保证一定是'\n'?

    回复内容:

    章硕,js & python
    夏一一、乔3少 赞同
    这不是python的问题,windows的换行是\r\n,unix的是\n,mac的是\r。
    这是一个很经典的问题。因为不同系统下默认的换行符不同。字符处理时候,这样的“不同”会带来很大的问题,例如line[-2]和line.strpi()会因为平台不同返回不同的值。

    解决方法:
    Python 2
    PEP 278 -- Universal Newline Support,感谢毕勤的补充):
    1)如果不是txt文件,建议用wb和rb来读写。通过二进制读写,不会有换行问题。
    2)如果需要明文内容,请用rU来读取(强烈推荐),即U通用换行模式(Universal new line mode)。该模式会把所有的换行符(\r \n \r\n)替换为\n。只支持读入,但是也足够了。这是Python 提供给我们的最好的选择,没有之一。

    对比r和rU的结果:
    content = file(fn, 'r').read()
    # test\r\ntest2
    # 这里的换行会因不同系统而不同                       
    
    file(fn, 'w+').write('test\ntest2')
    改成
    file(fn, 'wb+').write('test\ntest2')
    就行了。Windows 平台上 Python 区分 Binary 和 ASCII 模式。ASCII 模式下换行符会在读写时自动换为 \r\n (详见 [1])。*nix 平台下没有这个区别。
    [1]: docs.python.org/tutoria python可以根据系统自动选择换行符,只要使用 os.linesep 就可以判断出来 这不是python的问题,windows的换行是\r\n,unix的是\n,mac的是\r。 回答除了第一个都略微偏题了. 个人习惯来说,当编辑文件时,尽量使用二进制格式,这样会避免跨平台时出错. 根本不需要知道每个平台是\r,还是\n. 只要养成 rb,wb等习惯就行了. Rio 就是一个很好的编程习惯. 不特别指定的话,python会自适应各个平台的差异,比如\n 和 \r\n的不同。
    想达到楼主的目地,可以用二进制模式打开和操作文件即可。 现在这个答案已经错了0.0,正确如下(在不可预见的未来,这个答案也很可能错了,期待有人@我)。
    在远古时代:windows的换行是\r\n,unix的是\n,mac的是\r完全正确!
    Mac OS 9 以及之前的系统的换行符是 CR(\r),从 Mac OS X (后来改名为“OS X”)开始的换行符是 LF(\n)。
    参考Did Mac OS Lion switch to using line feeds (LF '\n') for line breaks instead of carriage returns (CR '\r')? 我知道的一点是:CLRF结尾的文件可以用【dos2unix】命令转换为RF结尾的文件。

    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    快捷开发Web应用及小程序:点击使用

    支持亿级表,高并发,自动生成可视化后台。

    上一篇:编程初学者如何在GitHub寻找适合自己的小项目? 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 使用Python处理KNN分类算法• Python NumPy教程之数据类型对象• Python标准库中的logging用法示例• python发腾讯微博代码分享• python解析之namedtuple函数的用法
    1/1

    PHP中文网