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等 ...
随机推荐
- ZTUnity Profiler概述及Profiler window 说明
转贴链接:https://www.jianshu.com/p/ca2ee8a51754
- Sping MVC不使用任何注解处理(jQuery)Ajax请求(基于XML配置)
1. Spring Spring框架是一个轻量级的解决方案,是一个潜在的一站式商店,用于构建企业就绪的应用程序.Spring框架是一个Java平台,为开发Java应用程序提供全面的基础架构支持.Spr ...
- 第一篇 Flask初识
一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不 ...
- Spring Boot 使用@Scheduled定时器任务
摘要: Spring Boot之使用@Scheduled定时器任务 假设我们已经搭建好了一个基于Spring Boot项目,首先我们要在Application中设置启用定时任务功能@EnableSch ...
- android 9.0 Launcher3 去掉抽屉式,显示所有 app
效果图 修改思路 1.增加全局控制变量 sys.launcher3.is_full_app,用来动态切换 2.增加两套布局,对应有抽屉和无抽屉 3.去除 allAppsButton 4.将 AllAp ...
- 使用Bind提供域名解析服务(正向解析)
小知识: 一般来讲域名比IP地址更加的有含义.也更容易记住,所以通常用户更习惯输入域名来访问网络中的资源,但是计算机主机在互联网中只能通过IP识别对方主机,那么就需要DNS域名解析服务了. DNS域名 ...
- Django学习day5——创建app
app应用与project项目的区别 一个app实现某个功能,比如博客.公共档案数据库或者简单的投票系统 一个project是配置文件和多个app的集合,这些app组合成整个站点 一个project可 ...
- MongoDB的基础命令
MongoDB的介绍 MongoDB: 是一个基于bson(二进制json)的NoSQL数据库 MongoDB的三要素: 数据库: 类似于MYSQL的数据库 集合: 类似于MYSQL的表 文档: 类似 ...
- CSPS_107
和教练谈话.jpg T1 枚举不动位置,枚举字母,可以$O(n^2)$ T2 暴筛 70 但是考虑枚举$m^{\frac{1}{3}}$之内的质数(怎么想到啊) 把它们消去以后,设剩下数x 若x含有平 ...
- PostgreSQL的模式、表、空间、用户间的关系
在平时的工作中,我们经常接触到数据库表和用户以及角色的使用,由于经常使用默认的数据库表空间和模式(Schema),所以我们往往忽略了数据库表空间和模式的概念以及作用. 接下来,先介绍一下模式和表空间的 ...