day 19 os模块的补充 序列化 json pickle

时间:2021-09-01 01:41:09

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. 第五章 模块之 shtil 、 json / pickle、importlib、collections

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

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

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

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

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

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

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

  9. day25 模块,sys, logging, json, pickle

      Python之路,Day13 = Python基础13 sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sy ...

随机推荐

  1. linux 账号管理与ACL权限设定

    此文涉及命令:useradd.usermod.userdel.passwd.chage.setfacl.getfacl.su.sudo.fingr.chfn.chsh.id.groupadd.grou ...

  2. SharePoint 2013 单一页面赋设计权限

    本文介绍SharePoint的使用中,断开单一页面权限,给用户编辑权限以及操作中遇到的问题,希望给相关需要的人一个参考. 1.首先进入页面库,找到我们的页面,进入共享,如下图: 2.在弹出的窗口中选择 ...

  3. [GRYZ2014]迷宫问题

    设有一个N*N方格的迷宫,入口和出口分别在左上角和右上角,迷宫格子中分别放有0和1,0表示可走,1表示不能走,迷宫走的规则如图.当迷宫给出之后,找出一条从入口到出口的通路. 输入:N N*N的迷宫 输 ...

  4. js改变盒子大小(上下左右)分析

    js改变盒子大小 知识点 三个mouse事件:mousedown mousemove mouseup css的定位和cursor 思路 先解决单边问题识别范围,得到所选区域 event. 根据距离,判 ...

  5. Java 读取 json文件

    public ResponseBean getAreas() { String path = getClass().getClassLoader().getResource("area.js ...

  6. IPv6 Can't assign requested address

    今天试了下 bind IPv6 的地址,报错  Can't assign requested address http://*.com/questions/24780404/p ...

  7. 解压cpio.gz、zip类型文件

    aix上的oracle介质文件是10gr2_aix5l64_database.cpio.gz 解压方法: gunzip 10gr2_aix5l64_database.cpio.gz cpio -idm ...

  8. c++ thread 使用不当导致的崩溃问题

    看个例子 class CTimer{ public: // 析构函数 virtual ~CTimer(){ } // 开始 void start() { b_exit = false; i = ; t ...

  9. [C++设计模式]template 模板方法模式

    模板法模式:定义一个操作中的算法骨架.而将一些步骤延迟到子类中. 依照<headfirst 设计模式>的样例.煮茶和煮咖啡的算法框架(流程)是一样的.仅仅是有些算法的实现是不一样的,有些是 ...

  10. 豌豆荚不能连接三星S4手机,提示打开手机的&OpenCurlyDoubleQuote;USB调试模式”,但却找不到在哪儿可以设置

    1. 问题 豌豆荚不能连接三星S4手机,下载了三星S4手机的驱动后,提示打开手机的“USB调试模式”,但却找不到在哪儿可以设置. 2. 原因 S4 默认隐藏开发者选项,所以默认不可以设置“USB调试模 ...