python采用open函数打开文件,python open函数默认打开方式

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: