前段时间用print在一个启动的服务上面打log,结果每次都是等半天,然后一股脑的读写,直觉告诉我是buffer的问题~
1.普通文件读写
1.1.基本操作
f = open('py3.txt','wt',encoding='utf-8')
f.write('你好')
f.close()
f = open('py3.txt','rt',encoding='utf-8')
s = f.read()
print(s)
1.2.设置文件缓冲
缓冲分三种:
全缓冲 : open函数的buffering设置大于1的整数n,n为缓冲区大小,linux默认为page的大小4096 满了n 个字节才会写入磁盘 。
f=open(“demo.txt”,’w’,buffering=1)
行缓冲 : open 函数的buffering设置为1, 碰到换行就会将缓冲区的写入磁盘。
f=open(“demo.txt”,’w’,buffering=1)
无缓冲 : open 函数的buffering设置为0 有输入就写入磁盘。
f=open(“demo.txt”,’w,’,buffering=0)
缓冲的目的:是为了减少系统的io调用。只有当符合一定条件(比如缓冲数量)时才调用io。
1.3.访问文件的状态
比如文件类型 ,访问权限,最后修改时间点,文件大小
使用系统的调用就可以达到,也可以使用os.path来进行。
#!/usr/bin/python3
# os.path方法
import os
# 判断文件是否为目录
print(os.path.isdir('python.PNG'))
# 判断文件是否是普通文件
print(os.path.isfile('python.PNG'))
# 获取文件 访问、修改、节点状态 时间
import time
print(time.localtime(os.path.getatime('python.PNG')) )
print(time.localtime(os.path.getmtime('python.PNG')) )
print(time.localtime(os.path.getctime('python.PNG')) )
# 获取文件大小
print(os.path.getsize('python.PNG'))
2.json文件读写
2.1.基本操作
-
json.dumps是将一个Python数据类型列表进行json格式的编码解析
import json #导入python 中的json模块 l = ['iplaypython',[1,2,3], {'name':'xiaoming'}]#创建一个l列表-----可以是字典或列表对象 encoded_json = json.dumps(l) # 将l列表,进行json格式化编码 print(repr(l)) print(encoded_json)#输出结果
-
json.dump主要用来json文件读写,和json.load函数配合使用。
json.dump(x,f),x是对象,f是一个文件对象,这个方法可以将json字符串写入到文本文件中。import json data = [{"a":"aaa","b":"bbb","c":[1,2,3,(4,5,6)]},33,'tantengvip',True] data2 = json.dumps(data) print(data2) f = open('./tt.txt','a') json.dump(data2,f)
-
json.loads str转成dict
import json #导入python 中的json模块 l = ['iplaypython',[1,2,3], {'name':'xiaoming'}]#创建一个l列表-----可以是字典或列表对象 encoded_json = json.dumps(l) # 将l列表,进行json格式化编码 print(repr(l)) print(encoded_json)#输出结果 print(json.loads(encoded_json))
-
json.load加载json格式文件。
f = open('./tt.txt','r') hehe = json.load(f) print(hehe)
2.2json格式化输出
# -*- coding: utf-8 -*-
import json
data= {
"msg": {
"crc": 0,
"msg_body": "How are you ?",
"msg_len": 88,
"recv_id": 319371,
"send_id": 319371,
"send_time": 0,
"type": 96
},
"msgLen":90
}
print json.dumps(data, sort_keys=True, indent=2) # 排序并且缩进两个字符输出
运行结果:
{
"msg": {
"crc": 0,
"msg_body": "How are you ?",
"msg_len": 88,
"recv_id": 319371,
"send_id": 319371,
"send_time": 0,
"type": 96
},
"msgLen": 90
}