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的更多相关文章

  1. Pythoy 数据类型序列化——json&pickle 模块

    Pythoy 数据类型序列化--json&pickle 模块 TOC 什么是序列化/反序列化 pickle 模块 json 模块 对比json和pickle json.tool 命令行接口 什 ...

  2. python---基础知识回顾(四)(模块sys,os,random,hashlib,re,序列化json和pickle,xml,shutil,configparser,logging,datetime和time,其他)

    前提:dir,__all__,help,__doc__,__file__ dir:可以用来查看模块中的所有特性(函数,类,变量等) >>> import copy >>& ...

  3. 常用模块(数据序列化 json、pickle、shelve)

    本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...

  4. 模块 序列化 json pickle shelv xml

    序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. json 模块 json.dump(d,f) json.load(f ...

  5. OS模块的补充使用---执行终端命令

    Python基础至os模块 由于近期的项目需要用到对应的终端命令去调用其他程序,因此温习一下os.system()函数: 参考文献:https://zhuanlan.zhihu.com/p/51716 ...

  6. 第五章 模块之 shtil 、 json / pickle、importlib、collections

    5.8 shtil 高级的 文件.文件夹.压缩包 处理模块 shutil.rmtree 删除目录 import shutilshutil.rmtree(path) shutil.move 重命名:移动 ...

  7. python学习之文件读写,序列化(json,pickle,shelve)

    python基础 文件读写 凡是读写文件,所有格式类型都是字符串形式传输 只读模式(默认) r  f=open('a.txt','r')#文件不存在会报错 print(f.read())#获取到文件所 ...

  8. Day 4-5 序列化 json & pickle &shelve

    序列化: 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 反序列化: 把字符转成内存里的数据类型. 用于序列化的两个模块.他 ...

  9. Python基础-序列化(json/pickle)

    我们把对象(变量)从内存中变成可存储的过程称之为序列化,比如XML,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等 ...

随机推荐

  1. CSS盒模型以及如何解决边距重叠问题

    盒模型有两种,W3C 和IE 盒子模型 W3C定义的盒模型包括margin.border.padding.content,元素的宽度width=content的宽度 IE盒模型与W3C盒模型的唯一区别 ...

  2. spring-boot-plus V1.4.0发布 集成用户角色权限部门管理

    RBAC用户角色权限 用户角色权限部门管理核心接口介绍 Shiro权限配置

  3. android 9.0 Launcher3 去掉抽屉式,显示所有 app

    效果图 修改思路 1.增加全局控制变量 sys.launcher3.is_full_app,用来动态切换 2.增加两套布局,对应有抽屉和无抽屉 3.去除 allAppsButton 4.将 AllAp ...

  4. 【IT教程-Oracle】尚观Oracle白金级入门教程

    链接: https://pan.baidu.com/s/1GMncQN6mpgaH3hZQjGelaA 提取码: qu6j

  5. Vue.js应用基础

    声明 这篇博文是我的Vue学习记录,其中参杂了不少我个人的理解,由于我并没有继续学习Vue的源码,所以不能保证这些理解都是正确的.如果这篇博文有幸被你读到,请带着批判的心情去审视它. 如果你发现了其中 ...

  6. 雷神领域(并查集真是个好东西)并查集+流氓dp

    考场上,整整看了半个小时以上的题目!!! 化简题意: 给定一个全0矩阵,一些坐标点(x,y)为1,当三个点可以构成一个直角三角形时(直角边长为整数)拓展为一个矩形,之后从(0,0)出发,求最多的占用行 ...

  7. 『题解』Codeforces2A Winner

    Portal Portal1: Codeforces Portal2: Luogu Description The winner of the card game popular in Berland ...

  8. OneNet平台实践

    原文链接:https://blog.csdn.net/w_xiaote/article/details/80109634#comments   W5500通过DHT11采集环境温湿度并上传到onNET ...

  9. 路径操作OS模块和Path类(全)一篇够用!

    路径操作 路径操作模块 os模块 os属性 os.name # windows是nt, linux是posix os.uname() # *nix支持 sys.platform #sys模块的属性, ...

  10. HttpClient 上传文件

    /// <summary> /// 发送post请求 /// </summary> /// <param name="filePath">文件路 ...