7.1 Python中文件的读取和写入

文件操作

在Python中实现文件的读写操作可以通过Python的内置函数open实现,使用内置函数open时,我们可以指定文件名、操作模式(打开文件类型,字符型还是二进制型,以及所做操作,读、写、还是追加)、编码信息等进行操作。

在这里插入图片描述

读写文本文件

文件写入

#中文写入
file = open(r"C:\Users\choud\Desktop\python\day10\new.txt","w",encoding='utf-8') 
'''
"w"代表写入
encoding='utf-8'代表编码格式为utf-8
'''
mystr = '''我心如明月就像特么的象拔蚌'''
file.write(mystr)
file.close()

追加写入

如果需要对文件内容追加写入,应该将模式设置为’a’

二进制文件写入

def main():
    try:
        with open('guido.jpg', 'rb') as fs1:
        	'''rb的r代表读,b代表二进制'''
            data = fs1.read()
            print(type(data))  # 输出<class 'bytes'>,表示类型为比特
        with open('吉多.jpg', 'wb') as fs2:
        '''wb的r代表写入,b代表二进制'''
            fs2.write(data)
    except FileNotFoundError as e:
        print('指定的文件无法打开.')
    except IOError as e:
        print('读写文件时出现错误.')
    print('程序执行结束.')

上面代码如果open函数指定的文件并不存在或者无法打开,那么将引发异常状况导致程序崩溃。为了让代码有一定的容错性,我们使用了Python的异常机制对可能在运行时发生状况的代码进行了适当的处理。

在Python中,我们可以将那些在运行时可能会出现状况的代码放在try代码块中,在代码块的后面跟上一个或者多个except来捕获可能出现的异常状况。

最后我们使用finally代码块来关闭打开的文件,释放掉程序中获取的外部资源,由于finally块的代码不论程序正常还是异常都会执行到。

文件读取

file = open(r"C:\Users\choud\Desktop\python\day10\new.txt","r",encoding='utf-8')
'''
将文件模式设置为r,如果不指定,默认值也是r
encoding参数指定编码,如果不指定,默认值为None,读取文件时使用的时操作系统默认的编码
'''
mystr = file.read()
print(mystr)
file.close()    #关闭文件

如果保存文件时使用的编码方式与encoding参数指定的编码方式不一致,那么就可能因为无法解码字符而导致读取失败,但是我们可以这样做:

file = open(r"C:\Users\choud\Desktop\python\day10\new.txt","rb")
mystr = file.read()
print(mystr.decode("gbk","ignore"))#ignore代表忽略错误,继续读取
file.close()    

读写JSON文件

如果要把一个列表或者字典中的数据保存到文件中可以将数据以JSON格式保存。我们使用Python中的json模块就可以将字典或者列表以JSON的格式保存到文件中去。

JSON是“JavaScript Object Notation”的缩写,它本来是JavaScript语言中创建对象的一种字面量语法,现在已经被广泛的应用于跨平台跨语言的数据交换,原因很简单,因为JSON也是纯文本,任何系统任何编程语言处理纯文本都是没有问题的。目前JSON基本上已经取代了XML作为异构系统间交换数据的事实标准。

import json
mylist = [[1,2,3],[['ab','cd','xy']]]
file = open(r"C:\Users\choud\Desktop\python\day10\data.json","w")#注意文件名后缀
json.dump(mylist,file)    #保存list到文件
file.close()

在Python中要实现序列化和反序列化除了使用json模块之外,还可以使用pickle和shelve模块,但是这两个模块是使用特有的序列化协议来序列化数据,因此序列化后的数据只能被Python识别。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值