12.python基础学习-文件读写IO操作、json序列号与反序列化,json写入文件
文件相关IO操作
打开文件模式(open mode)API
模式 |
说明 |
r |
只读,默认 |
a |
文件不存在新建、存在则追加内容 |
w |
写入模式,文件不存在新建,会清空之前的内容 |
x |
只能一次写入由程序自己新建的文件 |
rb |
读取二进制文件,如图片 |
wb |
写入二进制文件,如图片 |
读写(文本)文件
file_name = 'D:\python\project\one\io\\file_text.txt'
file = open(file_name, encoding='utf-8')
print(file.read())
file.close()
file = open(file_name,'w',encoding='utf-8')
file.write('python in java 2021 你好')
file.close()
file = open(file_name,'a',encoding='utf-8')
file.write('\n')
file.write('python in java 2021 你好 again')
file.close()
with open('new_file_02.txt','x',encoding='utf-8') as f:
f.write('hello python 2021 新年快乐')
with open() as f 自动关闭IO流
每次都关闭流挺累的,java都有这种主动关闭的操作,想必python肯定也会有吧!
with open(file_name, encoding='utf-8') as rf, open(file_name2,encoding='utf-8') as wf:
print(rf.read())
print(wf.read())
读写二进制文件(复制图片-测试mode=rb,wb)
image_name = '2021ox.jpg'
image_name_bak = '2021ox_bak.jpg'
with open(image_name, 'rb') as rf, open(image_name_bak, 'wb') as wf:
wf.write(rf.read())
读取文件read的多种方式API
方法 |
描述 |
read() |
一次性读取完整 |
read(size) |
部分读写,指定读取大小 |
readline(limit) |
一行一行读取,limit:读取的最大字符数,不写默认整行读完 |
readlines() |
功能与readline()相似,返回的是一个列表list,list中的每一个元素为每一行的数据 |
read(size)、readlines() 例子
file_name = 'longtext.txt'
buff_size = 10
read_data = []
with open(file_name,encoding='utf-8') as rf:
while True:
data = rf.read(buff_size)
read_data.append(data)
if not data:
break
print(''.join(read_data))
with open(file_name,encoding='utf-8') as rf:
read_lines_data = rf.readlines()
print(read_lines_data)
print(''.join(read_lines_data))
JSON 相关操作
将dict或list序列化成json字符串并保存文件
import json
original_data= {
'key':'p', 'name':'python','desc':'脚本语言'}
json_data = json.dumps(original_data,ensure_ascii=False)
print(type(json_data))
print(json_data)
file_name = 'language.json'
with open(file_name,'w',encoding='utf-8') as wf:
wf.write(json_data)
with open(file_name,'w',encoding='utf-8') as wf:
json.dump(original_data,wf, ensure_ascii=False)
读取文件中的json数据反序列化成dict或list
with open(file_name,'r',encoding='utf-8') as rf:
file_data = rf.read()
data = json.loads(file_data)
print(type(data))
print(data)
with open(file_name,'r',encoding='utf-8') as rf:
data = json.load(rf)
print(type(data))
print(data)
decode_data = json.loads(json_data)
print(type(decode_data))
python中自定义对象与json的相互转换(待完善)
总体思路:
获取对象的__dict__,这时候参考上面的例子dict <–> json