python文件读写

1、open函数用来打开文件

open(name[.mode[.buffering]])

只有文件名是需要输入的强制参数,然后返回一个文件对象,模式默认是读模式,默认缓冲区是无;

例如:正常打开:

In [2]: f = open('ceshi.txt')                                                                                                                                              

In [3]: 

如果你要打开的文件不存在的话,会报错如下:

In [3]: f = open('ceshi_jier.txt')                                                                                                                                         
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-3-69dfda19266b> in <module>
----> 1 f = open('ceshi_jier.txt')

FileNotFoundError: [Errno 2] No such file or directory: 'ceshi_jier.txt'

In [4]: 

2、文件模式

功能描述
‘r’ 读模式
‘w’ 写模式
‘a’ 追加模式
‘b’ 二进制模式(可以添加到其他模式中使用)

‘+’

读/写模式(可以添加到其他模式中使用)

    ‘b’模式一般处理文本文件用不到,一般是处理二进制和媒体文件的时候用到;

3、文件缓冲区

    open函数中第三个可选参数buffering控制着文件的缓冲,如果参数是0,I/O操作就是无缓冲的,直接将数据写到了硬盘上,如果参数是1,就是有缓冲,先写到内存,只有使用flush和close函数,才会将数据写到硬盘里;如果参数是1,就表示缓冲区是1字节,任何负数都代表使用默认缓冲区大小,即缓冲为0;

4、文件读取

    文件读取主要是分为按字节读取和按行进行读取,经常用到的方法有read()、reablines()、close()。

    read方法,读取文件全部信息出来;

In [8]: f = open('ceshi.txt')                                                                                                                                              

In [9]: f.read()                                                                                                                                                           
Out[9]: 'my name is jier!\nhow are you?\n'

In [10]: f.close()

    每次打开文件,一定要记得关闭,因为文件对象会占用操作系统资源,影响系统的IO操作;

    由于文件操作可能出现IO异常,一旦出现IO异常的话,后面的close方法就不会执行了,为了程序的健壮性,我们使用try...finally来实现。

In [11]: try: 
    ...:     f= open('ceshi.txt') 
    ...:     print(f.read()) 
    ...: finally: 
    ...:     if f: 
    ...:         f.close() 
    ...:                                                                                                                                                                   
my name is jier!
how are you?


In [12]: 

    还有另外一种方法可以简略上面的写法,那就是with语句来代替try...finally代码块和close方法:

In [12]: with open('ceshi.txt', 'r') as jier: 
    ...:     print(jier.read()) 
    ...:                                                                                                                                                                   
my name is jier!
how are you?


In [13]:  

    调用read()可以一次将文件内容读入内存中,但是如果文件过大的话,就是出现内存不足的问题,一般对于大文件,我们一般使用分段读取,即read(size)方法,一次最多读取size个字节。如果文件是文本文件,我们可以调用readline()每次读取一行内容,调用readlines()一次读取所有内容并按行返回列表。

    上面的代码,可以使用readlines实现:

In [13]: with open('ceshi.txt', 'r') as jier: 
    ...:     for line in jier.readlines(): 
    ...:         print(line.strip()) 
    ...:                                                                                                                                                                   
my name is jier!
how are you?

In [14]: 

5、文件写入

    写文件和读文件是一样的,唯一的区别是在调用open方法时,传入标识符'w'或者‘wb’表示写入文本文件或者写入二进制文件,示例如下:

In [14]: f = open('ceshi.txt', 'w')                                                                                                                                        

In [15]: f.write('ceshi111')                                                                                                                                               
Out[15]: 8

In [16]: f.write('ceshi222')                                                                                                                                               
Out[16]: 8

In [17]: f.close()                                                                                                                                                         

In [18]: with open('ceshi.txt', 'r') as jier: 
    ...:     for line in jier.readlines(): 
    ...:         print(line.strip()) 
    ...:                                                                                                                                                                   
ceshi111ceshi222

In [19]: 

    但是有一个问题,就是说如果是这样的话,就会把原来文件中的内容给覆盖了,这个时候我们就可以将open的模式改为‘a’:

In [31]: f = open('ceshi.txt', 'a')                                                                                                                                        

In [32]: f.write('ceshi3333')                                                                                                                                              
Out[32]: 9

In [33]: f.close()

In [35]: with open('ceshi.txt', 'r') as jier: 
    ...:     for line in jier.readlines(): 
    ...:         print(line) 
    ...:                                                                                                                                                                   
ceshi111ceshi222ceshi3333

In [36]: 

    我们可以反复调用write()方法写入文件,最后必须使用close()方法关闭文件。使用write()的方法的时候,操作系统是不会直接写入文件中的,而是先写入内存中缓存起来,等到空闲时候再写入文件中,最后使用close()就可以写入文件中了,如果中途想写入文件,执行其他操作的话,也可以使用flush()来刷新,不断将内存中的缓存写入文件。

    以上代码也可以使用with来执行:

In [36]: with open('ceshi.txt', 'a') as jier: 
    ...:     jier.write('/tnihao') 
    ...:     jier.close() 
    ...:                                                                                                                                                                   

In [37]: with open('ceshi.txt', 'r') as jier: 
    ...:     for line in jier.readlines(): 
    ...:         print(line) 
    ...:                                                                                                                                                                   
ceshi111ceshi222ceshi3333/tnihao

 

 

 

 

 

 

 

 

 

 

上一篇:ceshi


下一篇:纯css实现省略号,兼容火狐,IE9,chrome