day 19 os模块的补充 序列化 json pickle
os 模块
os.path.abspath 规范绝对路径
os.path.split() 把路径分成两段,第二段是一个文件或者是文件夹
os.path.dirname 取第一部分
os.path.basename 取第二部分
os.path.exists() 判断文件或者文件夹是否存在 True Flase
os.path.isabs() 判断是否是绝对路径,是的话返回True
os.path.isfile() 判断是否是一个文件,是返回True
os.path.isdir() 判断是一个存在的目录,是返回True
os.path.join(path1,path2) 将多个路径组合返回
os.path.getatime() 返回path所指向的文件或者目录的最后访问时间
os.path.getmtime () 返回path对指向的文件或者目录的最后修改时间
os.path.getsize() 返回path的大小
# by luffycity.com
import os
# 把路径中不符合规范的/改成操作系统默认的格式
# path = os.path.abspath('D:/sylar/s15/day19/4.os模块.py')
# print(path)
# 能够给能找到的相对路径改成绝对路径
# path = os.path.abspath('4.os模块.py')
# print(path) # 就是把一个路径分成两段,第二段是一个文件/文件夹
# path= os.path.split('D:/sylar/s15/day19/4.os模块.py')
# print(path)
# path= os.path.split('D:/sylar/s15/day19')
# print(path) # ret1 = os.path.dirname('D:/sylar/s15/day19/4.os模块.py')
# ret2 = os.path.basename('D:/sylar/s15/day19/4.os模块.py')
# print(ret1)
# print(ret2) # 如果你两个值都需要 os.path.split
# 如果你只要一个值 os.path.dirname/os.path.basename # 判断文件/文件夹是否存在
# res = os.path.exists(r'D:\sylar\s15\day19\4.os模块.py')
# print(res) # res1 = os.path.isabs('4.os模块.py')
# res2 = os.path.isabs(r'D:\sylar\s15\day19\4.os模块.py')
# print(res1)
# print(res2) # print(os.listdir('D:\sylar\s15')) # print(os.path.isdir(r'D:\sylar\s15\aaa'))
# print(os.path.isfile(r'D:\sylar\s15\aaa'))
# print(os.path.isfile('D:\sylar\s15\day01'))
# print(os.path.isdir('D:\sylar\s15\day01')) # path = os.path.join('D:\sylar\s15','bbb')
# print(path) # size= os.path.getsize(r'D:\sylar\s15\day19\4.os模块.py') # 查看文件大小
# print(size) # ret1 = os.path.getsize('D:\sylar\s15\day19')
# ret2 = os.path.getsize('D:\sylar\s15\day18')
# ret3 = os.path.getsize('D:\sylar\s15\day17')
# ret4 = os.path.getsize('D:\sylar\s15')
# print(ret1,ret2,ret3,ret4)
# 所有的文件夹 都至少是4096个字节
#
# 64字节 + 32字节/新文件 # 使用python代码统计一个文件夹中所有文件的总大小
# 你需要统计文件夹大小
# D:\sylar\s15\ 文件夹的大小
# 拿到这个文件夹下所有的文件夹 和 文件
# 是文件就取大小
# 是文件夹 再打开这个文件夹 : 文件/文件夹
# 递归
def func(path): # r'D:\sylar\s15'
size_sum = 0
name_lst = os.listdir(path)
for name in name_lst:
path_abs = os.path.join(path,name)
if os.path.isdir(path_abs):
size = func(path_abs)
size_sum += size
else:
size_sum += os.path.getsize(path_abs)
return size_sum ret = func(r'D:\sylar\s15')
print(ret) # def func(path): # D:\sylar\s15
# size_sum = 0 # 0
# name_lst = os.listdir(path) # ['day01','day02',...]
# for name in name_lst: # 'day01' 'day02'
# path = os.path.join(path,name) # 'D:\sylar\s15\day01'
# if os.path.isdir(path): # True
# size = func(path) # func('D:\sylar\s15\day01')
# size_sum += size
# else:
# size_sum += os.path.getsize(path)
# return size_sum
#
# def func(path): # 'D:\sylar\s15\day02'
# size_sum = 0 # sum = 0
# name_lst = os.listdir(path) # [first.py...]
# for name in name_lst: # first.py 100
# path = os.path.join(path,name)
# if os.path.isdir(path):
# func(path)
# else: # 文件
# size_sum += os.path.getsize(path) # sizesum += 100 = 100+100+100+100 = 500
# return size_sum # return 500 # 循环 # 堆栈思想
# 列表 满足一个顺序 先进来的后出去
lst = [r'D:\sylar\s15',] # 列表的第一个目录就是我要统计的目录
size_sum = 0
while lst: # [r'D:\sylar\s15',] lst = ['D:\sylar\s15\day01','D:\sylar\s15\day01'..]
path = lst.pop() # path = 'D:\sylar\s15' lst = []
path_list = os.listdir(path) # path_list = ['day01',day02',aaa,day15.py]
for name in path_list: # name = day01
abs_path = os.path.join(path,name)
if os.path.isdir(abs_path): # 文件夹的逻辑
lst.append(abs_path) # lst.append('D:\sylar\s15\day01') lst = ['D:\sylar\s15\day01']
else:
size_sum += os.path.getsize(abs_path)
print(size_sum)
序列化模块:
序列化:把其它的数据类型转化为字符串 、 bytes 序列化的过程、
序列化: 字符串、bytes
序列: 列表、元组、字符串、bytes
# by luffycity.com # python
# 序列化 : 字符串 bytes
# 序列 : 列表 元组 字符串 bytes # 把其他的数据类型 转换成 字符串 bytes 序列化的过程 # str
# dic = {'1':'2'}
# print([str(dic),dic])
# print([str([1,2,3]),[1,2,3]]) # 为什么要把其他数据类型转换成字符串???
# 能够在网络上传输的只能是bytes,
# 能够存储在文件里的只有bytes和str
# dic = {'小明':{'phone_num':123123123123,}}
# '''
# 小明|电话|性别
# 小张|...
# '''
# 字典 -> 字符串 -通过网络去传输-> 字符串 -> 字典 # 转字符串的过程 不就是数据类型的强制转换么?为什么要学个序列化模块?
# 字符串 -> 字典
# str_dic = str([1,2,3])
# print(str_dic,type(str_dic)) # 文件中读出来的 网络上接收来的
# res = eval(str_dic)
# print(res,type(res)) # eval 要谨慎的使用,用户的输入/网络上接收的数据/文件中的内容
# eval('import os;os.remove('c:')')
# eval('import urllib;') # 你已知的代码 但是可能需要一些拼接 根据你自己的逻辑去做的拼接 # json
# pickle
json 模块: 是所有语言都可以识别的
四个功能:dumps、dump、doads、load
# by luffycity.com
# dic = {'key' : 'value','key2' : 'value2'}
# import json
# ret = json.dumps(dic) # 序列化
# print(dic,type(dic))
# print(ret,type(ret)) # res = json.loads(ret) # 反序列化
# print(res,type(res)) # 问题1
# dic = {1 : 'value',2 : 'value2'}
# ret = json.dumps(dic) # 序列化
# print(dic,type(dic))
# print(ret,type(ret))
#
# res = json.loads(ret) # 反序列化
# print(res,type(res)) # 问题2
# dic = {1 : [1,2,3],2 : (4,5,'aa')}
# ret = json.dumps(dic) # 序列化
# print(dic,type(dic))
# print(ret,type(ret)) # res = json.loads(ret) # 反序列化
# print(res,type(res)) # 问题3
# s = {1,2,'aaa'}
# json.dumps(s) # 问题4 # TypeError: keys must be a string
# json.dumps({(1,2,3):123}) # json 在所有的语言之间都通用 : json序列化的数据 在python上序列化了 那在java中也可以反序列化
# 能够处理的数据类型是非常有限的 : 字符串 列表 字典 数字
# 字典中的key只能是字符串 # 后端语言 java c c++ c#
# 前端语言 在网页上展示 # 向文件中记录字典
import json
# dic = {'key' : 'value','key2' : 'value2'}
# ret = json.dumps(dic) # 序列化
# with open('json_file','a') as f:
# f.write(ret) # 从文件中读取字典
# with open('json_file','r') as f:
# str_dic = f.read()
# dic = json.loads(str_dic)
# print(dic.keys()) # dump load 是直接操作文件的
# dic = {'key1' : 'value1','key2' : 'value2'}
# with open('json_file','a') as f:
# json.dump(dic,f) # with open('json_file','r') as f:
# dic = json.load(f)
# print(dic.keys()) # 问题5 不支持连续的存 取
# dic = {'key1' : 'value1','key2' : 'value2'}
# with open('json_file','a') as f:
# json.dump(dic,f)
# json.dump(dic,f)
# json.dump(dic,f) # with open('json_file','r') as f:
# dic = json.load(f)
# print(dic.keys()) # 需求 :就是想要把一个一个的字典放到文件中,再一个一个取出来???
# dic = {'key1' : 'value1','key2' : 'value2'}
#
# with open('json_file','a') as f:
# str_dic = json.dumps(dic)
# f.write(str_dic+'\n')
# str_dic = json.dumps(dic)
# f.write(str_dic + '\n')
# str_dic = json.dumps(dic)
# f.write(str_dic + '\n') # with open('json_file','r') as f:
# for line in f:
# dic = json.loads(line.strip())
# print(dic.keys()) # json
# dumps loads
# 在内存中做数据转换 :
# dumps 数据类型 转成 字符串 序列化
# loads 字符串 转成 数据类型 反序列化
# dump load
# 直接将数据类型写入文件,直接从文件中读出数据类型
# dump 数据类型 写入 文件 序列化
# load 文件 读出 数据类型 反序列化
# json是所有语言都通用的一种序列化格式
# 只支持 列表 字典 字符串 数字
# 字典的key必须是字符串 # dic = {'key':'你好'}
# print(json.dumps(dic,ensure_ascii=False)) # import json
# data = {'username':['李华','二愣子'],'sex':'male','age':16}
# json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),ensure_ascii=False)
# print(json_dic2) # 存文件/传网络
import json
f = open('file','w')
json.dump({'国籍':'中国'},f)
ret = json.dumps({'国籍':'中国'})
f.write(ret+'\n')
json.dump({'国籍':'美国'},f,ensure_ascii=False)
ret = json.dumps({'国籍':'美国'},ensure_ascii=False)
f.write(ret+'\n')
f.close() ensure_ascii关键字参数
ensure_ascii
pickle模块:
是python特有的类型,和python的数据类型间进行转换
# by luffycity.com
import pickle
# 支持在python中几乎所有的数据类型
dic = {(1,2,3):{'a','b'},1:'abc'} # ret = pickle.dumps(dic)
# print(ret)
#2. dumps 序列化的结果只能是字节
# print(pickle.loads(ret))
# 3.只能在python中使用
# 4.在和文件操作的时候,需要用rb wb的模式打开文件
# 5.可以多次dump 和 多次load
# dump
# with open('pickle_file','wb') as f:
# pickle.dump(dic,f) # load
# with open('pickle_file','rb') as f:
# ret = pickle.load(f)
# print(ret,type(ret)) # dic = {(1,2,3):{'a','b'},1:'abc'}
# dic1 = {(1,2,3):{'a','b'},2:'abc'}
# dic2 = {(1,2,3):{'a','b'},3:'abc'}
# dic3 = {(1,2,3):{'a','b'},4:'abc'}
# with open('pickle_file','wb') as f:
# pickle.dump(dic, f)
# pickle.dump(dic1, f)
# pickle.dump(dic2, f)
# pickle.dump(dic3, f) # with open('pickle_file','rb') as f:
# ret = pickle.load(f)
# print(ret,type(ret))
# ret = pickle.load(f)
# print(ret,type(ret))
# ret = pickle.load(f)
# print(ret, type(ret))
# ret = pickle.load(f)
# print(ret, type(ret))
# ret = pickle.load(f)
# print(ret, type(ret)) with open('pickle_file','rb') as f:
while True:
try:
ret = pickle.load(f)
print(ret,type(ret))
except EOFError:
break
day 19 os模块的补充 序列化 json pickle的更多相关文章
- Pythoy 数据类型序列化——json&pickle 模块
Pythoy 数据类型序列化--json&pickle 模块 TOC 什么是序列化/反序列化 pickle 模块 json 模块 对比json和pickle json.tool 命令行接口 什 ...
- python---基础知识回顾(四)(模块sys,os,random,hashlib,re,序列化json和pickle,xml,shutil,configparser,logging,datetime和time,其他)
前提:dir,__all__,help,__doc__,__file__ dir:可以用来查看模块中的所有特性(函数,类,变量等) >>> import copy >>& ...
- 常用模块(数据序列化 json、pickle、shelve)
本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...
- 模块 序列化 json pickle shelv xml
序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. json 模块 json.dump(d,f) json.load(f ...
- OS模块的补充使用---执行终端命令
Python基础至os模块 由于近期的项目需要用到对应的终端命令去调用其他程序,因此温习一下os.system()函数: 参考文献:https://zhuanlan.zhihu.com/p/51716 ...
- 第五章 模块之 shtil 、 json / pickle、importlib、collections
5.8 shtil 高级的 文件.文件夹.压缩包 处理模块 shutil.rmtree 删除目录 import shutilshutil.rmtree(path) shutil.move 重命名:移动 ...
- python学习之文件读写,序列化(json,pickle,shelve)
python基础 文件读写 凡是读写文件,所有格式类型都是字符串形式传输 只读模式(默认) r f=open('a.txt','r')#文件不存在会报错 print(f.read())#获取到文件所 ...
- Day 4-5 序列化 json & pickle &shelve
序列化: 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 反序列化: 把字符转成内存里的数据类型. 用于序列化的两个模块.他 ...
- Python基础-序列化(json/pickle)
我们把对象(变量)从内存中变成可存储的过程称之为序列化,比如XML,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等 ...
随机推荐
- (day31) Event+协程+进程/线程池
目录 昨日回顾 GIL全局解释器锁 计算密集型和IO密集型 死锁现象 递归锁 信号量 线程队列 FOFI队列 LIFO队列 优先级队列 今日内容 Event事件 线程池与进程池 异步提交和回调函数 协 ...
- Java基础(三十六)日期和时间
1.Date类 (1)无参数构造方法创建的对象可以获取本机当前时间 (2)有参数构造方法创建的对象表示举例计算机系统自身时间的距离为给定的参数 Date date = new Date(); // 当 ...
- SpringBoot系列之@Value和@ConfigurationProperties
继上一篇博客SpringBoot系列之YAML配置用法之后,再写一篇@Value.@ConfigurationProperties的对比博客 这两个主键都是可以获取配置文件属性的,不过是有比较大的区别 ...
- Mac OS 简易U盘重装系统 亲测
Mac OS 简易U盘重装系统 亲测 亲测可用!简单方便,本文描述尽可能详细,如有疑问欢迎留言or微信咨询:523331232 如有帮助欢迎点赞! (一)制作MacOS系统U盘 [步骤1 准备U盘] ...
- tomcat 7.0 免安装版配置
转载请注明出处,欢迎邮件交流:1057449102@qq.com 注意:tomcat 运行是依赖jdk的,前提是要安装了jdk,配置好. 1.把下载好的 apache-tomcat-7.0.85.zi ...
- js原生图片懒加载 或 js原生图片预加载,html标签自定义属性
使用原声js来实现图片预加载,或图片懒加载,小伙伴们可以根据项目需要来结合vue或者是react来进行修改. 一.什么是图片懒加载或什么是图片预加载 当访问一个页面的时候,先把img元素或是其他元素的 ...
- 解决SAP740 GUI 搜索帮助(F4)回填值乱码的问题
SAP 740客户端引入了搜索帮助增强功能,并且默认是开启该功能的,在带有F4搜索帮助的字段输入框中输入字段的前两个字符,可以自动以下拉框的方式带出包含包含所输入字符的条目,从而实现快速的输入帮助,如 ...
- golang 包依赖管理 godep 使用
介绍: godep是解决包依赖的管理工具,目前最主流的一种,原理是扫描记录版本控制的信息,并在go命令前加壳来做到依赖管理. 1.安装: go get github.com/tools/godep 2 ...
- python私有变量的分类
- vue+element UI以组件递归方式实现多级导航菜单
介绍 这是一个是基于element-UI的导航菜单组件基础上,进行了二次封装的菜单组件,该组件以组件递归的方式,实现了可根据从后端接收到的json菜单数据,动态渲染多级菜单的功能. 使用方法 由于该组 ...