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这是一个很经典的问题。因为不同系统下默认的换行符不同。字符处理时候,这样的“不同”会带来很大的问题,例如line[-2]和line.strpi()会因为平台不同返回不同的值。
夏一一、乔3少 赞同
这不是python的问题,windows的换行是\r\n,unix的是\n,mac的是\r。
解决方法:
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]: http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files 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入门到就业线上直播课:查看学习
前端(VUE)零基础到就业课程:点击学习
快捷开发Web应用及小程序:点击使用
![](http://m.sbmmt.com/img/upload/article/000/000/020/633501a29d313483.png)
相关文章推荐
• ❤️🔥共22门课程,总价3725元,会员免费学• ❤️🔥接口自动化测试不想写代码?• 使用Python处理KNN分类算法• Python NumPy教程之数据类型对象• Python标准库中的logging用法示例• python发腾讯微博代码分享• python解析之namedtuple函数的用法独孤九贱(3)_JavaScript视频教程
javascript是运行在浏览器上的脚本语言,连续多年,被评为全球最受欢迎的编程语言。是前端开发必备三大法器中,最具杀伤力。如果前端开发是降龙十八掌,好么javascript就是第18掌:亢龙有悔。没有它,你的前端生涯是不完整的。《php.cn独孤九贱(3)-JavaScript视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了javascript知识。
JavaScript教程138226次播放
独孤九贱(6)_jQuery视频教程
jQuery是一个快速、简洁的JavaScript框架。设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。 核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等,是全球最流行的前端开发框架之一。PHP中文网根据最新版本,独家录制jQuery最新视频教程,回馈PHP中文网的新老用户。
jQuery教程113652次播放
jQuery与Ajax基础与实战
jQuery是最流行的JS函数库,封装了许多实用的功能,其中最引人入胜的就是Ajax。 jQuery中的Ajax操作,语法简单,操作方便,使Ajax从未如此轻松,前端人员从此不再为与服务器异步交互而发愁,本套课程,精选了最常用的几个方法,从基本的语法到每个参数,再到具体实例进行了全面的讲解。
AJAX教程13438次播放
Git教程(60分钟全程无废话版)
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持
JavaScript教程11545次播放