python采用open函数打开文件,python open函数默认打开方式
当我们用open()函数去打开文件的时候,有好几种打开的模式。
R-只读
W-只写,如果文件存在,它将被清空,如果不存在,它将被创建。
-追加并写到文件的末尾。
B-二进制模式,如打开图像、音频、word文件。
-Update(可读可写)这个带的有点难懂。在上面的代码中感受一下。
withopen(foo.txt , w )asf:
f.write(bar\n )
查找(0)
Data=f.read()。可以看到,上面的代码不仅可以写,还可以读出。注意定位到开头,f.seek(0),否则会读出空数据。
有些人可能会困惑。既然是可读可写的,那 w 和 r 有什么区别?
也就是说,
w 将被清空并创建(如果文件存在,将被清空;如果不存在,将会创建它。)
r 不要清空,不要创建
不要以二进制模式打开文本文件。
先看下面这段代码的“怪异”现象。
假设在windows下,我有一个f.txt文件,内容如下。
喂
世界
代码一
withopen(f.txt , r)asf:
printf.readlines()
withopen(f.txt , rb)asf:
Printf.readlines()输出
[你好\n ,世界\n]
[hello\r\n , world \ r \ n ]代码二
withopen(f.txt , rb)asf:
data=f.read()
withopen(f.txt , w)asf:
f .写(数据)打开文件,变成了下面这样,
hello^M
world^M
首先,理解换行符 \n 和回车符 \r 的概念。
\n ,换行(LF,Line-Feed),指的是新的一行。
\r ,回车(CR,Carriage-Return),指返回衣柜。因为不同系统的换行符不一样。
windows-\r\n
unix-\n
Mac-\r 这就是为什么打开linux时,windows下的txt在行尾有 m 的原因。
这就是为什么我在linux下运行脚本导出游戏数据,然后打开到本地windows成为一行。
其实文本文件也是二进制文件,是用文本编码的二进制文件。文本文件中处理了一些不可见的字符,以提高可读性。
在python中,可以通过windows下的os.linesep获取当前系统的换行符ID,比如os.linesep是 \r\n 。
在python中操作换行符logo时,不管是什么平台,用 \n 即可。python会根据不同的系统自动转换成不同的logos。
有了以上的理论基础,我们就可以分析本文开头代码的“怪异”现象了。
在代码一中,如果一个文件以文本模式打开,换行符将被python处理成 \n ,而如果以二进制模式打开,它将保持不变。
在第二段代码中,它以二进制模式打开,以文本模式写入。二进制打开的时候还是 \r\n ,而写文本模式的时候,因为python会把 \ r \n 改成 \r\n ,实际上相当于写 \ r \ n ,所以多了一个 m 。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。