文件操作
在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识别。