Python open()函数指定文件打开方式入门实例

前端之家收集整理的这篇文章主要介绍了Python open()函数指定文件打开方式入门实例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! @H_301_0@当我们用open()函数去打开文件的时候,有好几种打开的模式。

@H_301_0@'r'->只读

@H_301_0@'w'->只写,文件已存在则清空,不存在则创建。

@H_301_0@'a'->追加,写到文件末尾

@H_301_0@'b'->二进制模式,比如打开图像、音频、word文件

@H_301_0@'+'->更新(可读可写)

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


# @param 详解Python中open()函数指定文件打开方式的用法
# @author 编程之家 jb51.cc|jb51.cc 

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

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

@H_301_0@一些人可能会有迷惑,既然带'+'号是可读可写,那'w+'跟'r+'有什么不同。

@H_301_0@那就是,

@H_301_0@'w+'会清空,会创建 (文件已存在则清空,不存在则创建。)

@H_301_0@'r+'不清空,不创建

@H_301_0@不要用二进制模式打开文本文件

@H_301_0@先看下面代码的“诡异”现象。

@H_301_0@假设在windows下,我有个f.txt文件,里面的内容是下面这样的。

@H_301_0@hello

@H_301_0@world

@H_301_0@代码一,


# @param 详解Python中open()函数指定文件打开方式的用法
# @author 编程之家 jb51.cc|jb51.cc 

with open('f.txt','r') as f: 
    print f.readlines() 
with open('f.txt','rb') as f: 
    print f.readlines()

# End www.jb51.cc
@H_301_0@输出

@H_301_0@['hello\n','world\n']

@H_301_0@['hello\r\n','world\r\n']

@H_301_0@代码二,


# @param 详解Python中open()函数指定文件打开方式的用法
# @author 编程之家 jb51.cc|jb51.cc 

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

# End www.jb51.cc
@H_301_0@打开文件,变成了下面这样,

@H_301_0@hello^M

@H_301_0@world^M

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

@H_301_0@'\n',换行符(LF,Line-Feed ),指新的一行。

@H_301_0@'\r',回车符(CR,Carriage-Return),指回到行头。

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

@H_301_0@windows->'\r\n'

@H_301_0@unix->'\n'

@H_301_0@mac->'\r'

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

@H_301_0@这就是为什么我在linux下跑脚本导出游戏数据下到本地windows打开变成了一行。

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

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

@H_301_0@在python中操作换行标识的时候,并不用管是在什么平台下,直接用'\n'就行了,python会自动根据不同系统转成不同标识。

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

@H_301_0@代码一中,用文本模式打开的文件,换行标识会被python处理成'\n',而用二进制模式打开则原封不动。

@H_301_0@代码二中,用二进制模式打开,用文本模式写入。二进制打开原封不动还是'\r\n',而文本模式写入的时候因为python会把'\n'转成'\r\n',所以其实就等于是写入了'\r\r\n',于是就多了个'^M'。

猜你在找的Python相关文章