python读写文件剖析


前段时间用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
}

参考文献:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值