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

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值