Python基础(11)——文件读写(附实例)

读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

文件读写的3种模式

 1、w —— 写模式,它是不能读的,如果用w模式打开一个已经存在的文件,会直接覆盖(相当于删掉后新写入一个文件)。
 2、r —— 读模式,只能读,不能写,而且文件必须存在
 3、a —— 追加模式,在文件的末尾添加内容
 4、rb、wb、ab —— 以二进制模式读取、写入、追加,常用于图片、音频、视频等文件

1、写文件

#以写文件的模式打开一个文件对象,使用Python内置的open()函数,如果文件已存在,会直接覆盖(相当于删掉后新写入一个文件)。
f = open('test.txt', 'w')  #文件名可写相对路径,也可写绝对路径;test.txt(相对路径):在当前文件下创建了test.txt
f.write('Hello, world!')   
f.close() 

你可以反复调用 write() 来写入文件,但是必须要调用 f.close() 来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用 close() 方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用 close() 的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句保险: 

#向1.txt文件中写入文本
with open("1.txt","w",encoding="utf-8") as f:   #指定编码utf-8编写,空间大  
    f.write("123\n")   
    f.write("I LOVE YOU\n")
    f.write("中国人")

2、读文件

#以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符如果文件不存在,会报错
f = open('/Users/michael/test.txt', 'r')  
#文件打开成功,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示
f.read('Hello, world!')   
#调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的
f.close() 

每次都这么写实在太繁琐,所以,Python引入了 with 语句来自动帮我们调用 close() 方法。这样代码更佳简洁,并且不必调用f.close()方法。

with open('1.txt','r') as f:
    f.read()

python文件对象提供了三个 "读" 方法: read()、readline() 和 readlines()。每种方法可以接受一个变量以限制每次读取的数据量。

  • read() 一次性读取文件的全部内容,它通常用于将文件内容放到一个字符串变量中。如果文件太大,内存就爆了,所以,为了保险起见,可以反复调用 read(size) 方法,每次最多读取 size 个字节的内容。
  • readline() 每次读取一行内容,通常比readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 readline()。
  • readlines() 一次读取整个文件,像 read() 一样,之后,readlines() 自动将文件内容按行返回一个列表(list)。

如果文件很小,read() 一次性读取最方便;如果不能确定文件大小,反复调用 read(size) 比较保险;如果是配置文件(用户登录电脑时,或是用户在使用软件时,软件系统为用户所要加载所需环境的设置和文件的集合。),调用 readlines() 最方便。

#read()方式读取文件--一次性读取文件的全部内容
with open("1.txt",encoding="utf-8") as f: 
    txt=f.read()
    print(txt)
    print(type(txt))

运行结果:
123
I LOVE YOU
中国人
<class 'str'>

#read(size)方式读取文件--每次最多读取size个字节的内容
with open("1.txt",encoding="utf-8") as f:  
    txt=f.read(12)  
    print(txt)   
    t2=f.read()  #读完上一次未读的字节
    print(t2)   

运行结果:
123
I LOVE Y
OU
中国人

#readline()方式读取文件--每次读取一行;默认换行
with open("1.txt",encoding="utf-8") as f:  
    while 1:
        txt=f.readline()   
        if txt:
            print(txt,end="")  #end="",因为readline()默认换行,冲突
        else:
            break 
    print(type(txt))  

运行结果:
中国人
123
I LOVE YOU
中国人<class 'str'>

#readlines()方式读取文件--一次读取所有内容,并按行返回一个列表    
with open("1.txt",encoding="utf-8") as f: 
    txt=f.readlines()   
    print(txt) 
    print(type(txt))

运行结果:
['123\n', 'I LOVE YOU\n', '中国人']
<class 'list'>

3、读写二进制文件

图片、音频、视频等需要以二进制的格式进行读写。

3.1 读二进制文件

with open("1.jpg","rb") as f: 
    all=f.read()    #读取1.jpg的全部字节,为 写二进制文件 做准备;由于信息量太大,故没有print
    t=f.read(3)     #只读取前三个字节
    print(t)
    print(type(t))

运行结果:
b'\xff\xd8\xff'
<class 'bytes'>

3.2 写二进制文件

with open("2.jpg","wb") as f:   
    f.write(all)    #复制一张1.jpg,命名为2.jpg

3.3 先读再写 -- 复制

#将当前目录下的1.jpg复制一份,并命名为2.jpg
with open("1.jpg","rb") as f:  
    all=f.read()    #读取1.jpg的全部字节
    
with open("2.jpg","wb") as f:   
    f.write(all)    

3.4 边读边写 -- 复制

#将当前目录下的Java01-1.mp4复制一份,并命名为Java.mp4
with open("Java01-1.mp4","rb") as f: 
    while 1:
        txt=f.read(2000)  #由于视频太大,所以进行多次读取,每次读取2000个字节
        if txt:
            with open("Java.mp4","ab") as f1:   #将读取的字节以'追加'的方式保存到 Java.mp4 文件中
                f1.write(txt)
        else:
            break 

4、字符编码

要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:

with open("test.txt","r",encoding='gbk') as f:  
    t=f.read()

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值