#python open()的详细介绍

文件打开方式

当我们用open()函数去打开文件的时候,有好几种打开的模式。

'r'->只读

这个带'+'号的有点难以理解,上代码感受下。

?

1
2
3
4
with open ( 'foo.txt' , 'w+' ) as f:
   f.write( 'bar\n' )
   f.seek( 0
   data = f.read()

可以看到,上面这段代码,它不但可以写,还可以读出来。注意要先定位到开头,f.seek(0),不然读出来的是空数据。

不要用二进制模式打开文本文件先看下面代码的“诡异”现象。

?

1
2
hello
world

代码一,

?

1
2
3
4
with open ( 'f.txt' , 'r' ) as f:
   print f.readlines()
with open ( 'f.txt' , 'rb' ) as f:
   print f.readlines()

输出

?

1
2
['hello\n', 'world\n']
['hello\r\n', 'world\r\n']

代码二,

?

1
2
3
4
with open ( 'f.txt' , 'rb' ) as f:
   data = f.read()
with open ( 'f.txt' , 'w' ) as f:
   f.write(data)

打开文件,变成了下面这样,

?

1
2
hello^M
world^M

首先,先理解换行符'\n'跟回车符'\r'的概念。

因为在不同系统下的换行标识是不一样的。

?

1
2
3
windows->'\r\n'
unix->'\n'
mac->'\r'

这就是为什么windows下的txt在linux打开的时候行尾会有'^M'。

其实文本文件也是二进制文件,是文本编码的二进制文件,文本文件对一些不可见字符进行了处理,增加可读性。

在python中,可以通过os.linesep获得当前系统的换行标识。比如在windows下,os.linesep是'\r\n'。

有了上面这些理论依据,就可以解析本文开头代码的“诡异”现象了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值