python 常用模块(一): os模块,序列化模块(json模块 pickle模块 )
1.os模块
2.序列化模块:(1)json模块 和 pickle模块
一.os模块
os.path.abspath:
(1)把路径中不符合规范的/改成操作系统默认的格式
- import os
- path = os.path.abspath('C:/Administrator/PycharmProjectsled3/模块/day 19/ 课堂回顾,作业.py')
- print(path)
- #结果:
- C:\Administrator\PycharmProjectsled3\模块\day 19\ 课堂回顾,作业.py
(2)能够给找到的相对路径改成绝对路径
- import os
- path = os.path.abspath('4.os模块.py')
- print(path)
- #结果:
- E:\python_01\day19\code\day19\4.os模块.py
os.path.split:把一个路径分为两段,第二段是一个文件/文件夹
- import os
- path= os.path.split('D:/sylar/s15/day19/4.os模块.py')
- print(path)
- path= os.path.split('D:/sylar/s15/day19')
- print(path)
- #结果:
- ('D:/sylar/s15/day19', '4.os模块.py')
- ('D:/sylar/s15', 'day19')
os.path.basename(path):返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
注:
如果你两个值都需要 os.path.split
如果你只要一个值 os.path.dirname/os.path.basename
- import os
ret1 = os.path.dirname('C:\Administrator\PycharmProjectsled3\模块\day 19\01 课堂回顾,作业.py')- print(ret1)
- ret2 = os.path.basename('C:\Administrator\PycharmProjectsled3\模块\day 19\01 课堂回顾,作业.py')
- print(ret2)
- #结果:
- C:\Administrator\PycharmProjectsled3\模块
- day 19 课堂回顾,作业.py
os.path.exists:判断文件/文件夹是否存在
- import os
- ret = os.path.exists('C:\Administrator\PycharmProjectsled3\模块\day 19\01 课堂回顾,作业.py')
- print(ret)
- #结果:
- False
os.path.isabs:判断是否为绝对路径.
- import os
- res1 = os.path.isabs('4.os模块.py')
- res2 = os.path.isabs(r'D:\sylar\s15\day19\4.os模块.py')
- print(res1)
- print(res2)
- #结果:
- False
- True
os.path.isdir:判断是否为一个文件夹
os.path.isfile:判断是否为一个文件
os.path.join:将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path):返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path):返回path所指向的文件或者目录的最后修改时间
os.path.getsize: 查看文件大小
- 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字节/新文件
二.序列化模块
序列化: 字符串 bytes
序列: 字符串, 列表, 元组, bytes
序列化: 把其他数据类型转化成 字符串 bytes 的过程.
- dic = {'':''}
- print([str(dic),dic])
- #结果:
- ["{'1': '2'}", {'': ''}]
- 为什么把其他数据类型转换成字符串类型?
因为能够在网上能传播的只能是bytes,
能够储存在文件里的只有bytes 和 str.- 转字符串的过程 不就是数据类型的强制转换么?为什么要学个序列化模块?
- # 字符串 -> 字典
- str_dic = str([1,2,3])
- print(str_dic,type(str_dic))
- #结果:
- [1, 2, 3] <class 'str'>
- # 文件中读出来的 网络上接收来的
- res = eval(str_dic)
- print(res,type(res))
- #结果:
- [1, 2, 3] <class 'list'>
- eval 要谨慎的使用,用户的输入/网络上接收的数据/文件中的内容
事前不知情接受的的或者其他方式传输的进行读取时,用eval要谨慎,
只有在你已知的代码 但是可能需要一些拼接 根据你自己的逻辑去做的拼接.
序列化的目的:
(1)josn模块; Json模块提供了四个功能:dumps、dump、loads、load
josn.dumps:
- import json
- dic = {'key' : 'value','key2' : 'value2'}
- ret = json.dumps(dic) # 序列化
- print(dic,type(dic))
- print(ret,type(ret))
- #结果:
- {'key': 'value', 'key2': 'value2'} <class 'dict'>
- {"key": "value", "key2": "value2"} <class 'str'>
josn.laods:
- import json
- res = json.loads(ret) # 反序列化
- print(res,type(res))
- #结果:
- {'key': 'value', 'key2': 'value2'} <class 'dict'>
问题1:
- import json
- dic = {1 : 'value',2 : 'value2'}
- ret = json.dumps(dic) # 序列化
- print(dic,type(dic))
- print(ret,type(ret))
- #结果:
- {1: 'value', 2: 'value2'} <class 'dict'> key不是str
- {"": "value", "": "value2"} <class 'str'> key为str
- res = json.loads(ret) # 反序列化
- print(res,type(res))
- #结果:
- {'': 'value', '': 'value2'} <class 'dict'> key为str
问题2:
- import json
- dic = {1 : [1,2,3],2 : (4,5,'aa')}
- ret = json.dumps(dic) # 序列化
- print(dic,type(dic))
- print(ret,type(ret))
- #结果:
- {1: [1, 2, 3], 2: (4, 5, 'aa')} <class 'dict'>
- {"": [1, 2, 3], "": [4, 5, "aa"]} <class 'str'>
- res = json.loads(ret) # 反序列化
- print(res,type(res))
- #结果:
- {'': [1, 2, 3], '': [4, 5, 'aa']} <class 'dict'>
- 同问题一,字典中列表所对应的key 反序列后也变成了str
问题3:
- import json
- s = {1,2,'aaa'}
- json.dumps(s)
- #结果:
- TypeError: Object of type 'set' is not JSON serializable
- # json 序列化的对象里没有集合数据类型
问题4:
import json json.dumps({(1,2,3):123})
#结果: TypeError: keys must be a string
# key 必须是字符串类型
补充:
json 在所有的语言之间都通用 : json序列化的数据 在python上序列化了 那在java中也可以反序列化
能够处理的数据类型是非常有限的 : 字符串 列表 字典 数字
字典中的key只能是字符串
向文件中记录字典
- 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())
josn.dump , josn.laod:是直接操作文件的 , 例子如上:
问题5:不支持连续的存 取
- import json
- 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())
- #结果: 会报错
需求 :就是想要把一个一个的字典放到文件中,再一个一个取出来???
- import json
- 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')
- 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必须是字符串
拓展: ensure_ascii (显示中文)
(2)pickle模块:
<1>支持在python中几乎所有的数据类型
dic = {(1,2,3):{'a','b'},1:'abc'}
<2>dumps 序列化的结果只能是字节
- import pickle
dic = {(1,2,3):{'a','b'},1:'abc'}- ret = pickle.dumps(dic)
- print(ret)
- #结果:
- b'\x80\x03}q\x00(K\x01K\x02K\x03\x87q\x01cbuiltins\nset\nq\x02]q\x03(X\x01\x00\x00\x00bq\x04X\x01\x00\x00\x00aq\x05e\x85q\x06Rq\x07K\x01X\x03\x00\x00\x00abcq\x08u.'
<3>只能在python中使用 #因为你如果写的代码类型在其他操作系统没有的代码类型就不可以被 序列化(像: 元组之类的)
- dic = {(1,2,3):{'a','b'},1:'abc'}
- ret = pickle.dumps(dic)
- print(ret)
- print(pickle.loads(ret))
- #结果:
- b'\x80\x03}q\x00(K\x01K\x02K\x03\x87q\x01cbuiltins\nset\nq\x02]q\x03(X\x01\x00\x00\x00bq\x04X\x01\x00\x00\x00aq\x05e\x85q\x06Rq\x07K\x01X\x03\x00\x00\x00abcq\x08u.'
- {(1, 2, 3): {'b', 'a'}, 1: 'abc'}
<4>在和文件操作的时候,需要用rb wb的模式打开文件
import pickle
dump
with open('pickle_file','wb') as f: pickle.dump(dic,f)
laod
with open('pickle_file','rb') as f:
ret = pickle.load(f)
print(ret,type(ret))
<5>可以多次dump 和 多次load
- 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'}
- import pickle
- with open('pickle_file','wb') as f: #多次dump
- pickle.dump(dic, f)
- pickle.dump(dic1, f)
- pickle.dump(dic2, f)
- pickle.dump(dic3, f)
- with open('pickle_file','rb') as f: #多次laod
- while True:
- try:
- ret = pickle.load(f)
- print(ret,type(ret))
- except EOFError:
- break
python 常用模块(一): os模块,序列化模块(json模块 pickle模块 )的更多相关文章
- python常用模块之json、pickle模块
python常用模块之json.pickle模块 什么是序列化? 序列化就是把内存里的数据类型转换成字符,以便其能存储到硬盘或者通过网络进行传输,因为硬盘或网络传输时只接受bytes. 为什么要序列化 ...
- os模块,sys模块,json和pickle模块,logging模块
目录 OS模块 sys模块 json和pickle模块 序列化和反序列化 json模块 pickle logging模块 OS模块 能与操作系统交互,控制文件 / 文件夹 # 创建文件夹 import ...
- 模块讲解---os模块,sys模块,json和pickle模块,logging模块
目录 模块的用法 os模块 常用的功能 sys模块 常用的功能 json和pickle模块 4. logging模块 模块的用法 通过 import 或者from......import...... ...
- python-时间模块,random、os、sys、shutil、json和pickle模块
一.time与datetime模块 time模块: 时间戳:表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,返回类型为float类型 格式化时间字符串(Format String) ...
- Python json和pickle模块
用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps. ...
- Python之时间模块、random模块、json与pickle模块
一.时间模块 1.常用时间模块 import time # 时间分为三种格式 #1.时间戳---------------------以秒计算 # start= time.time() # time.s ...
- python模块(json和pickle模块)
json和pickle模块,两个都是用于序列化的模块 • json模块,用于字符串与python数据类型之间的转换 • pickle模块,用于python特有类型与python数据类型之间的转换 两个 ...
- json 与pickle模块(序列化与反序列化))
一.什么是序列化(pickling): 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化. 序列化可以持久保存状态, 不会根据计算机断电或者重启程序,而使得之前的数据状态丢失.可以在下次程 ...
- python之json、pickle模块
一.json模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候, ...
- 包--json 与 pickle 模块
一. 包 一个含有__init__.py 文件的文件夹(将py 文件中的内容划分成不同的部分放在不同的py 文件中,在将这些py 文件放在一个文件夹中) 是模块,不做执行文件,仅做调用 m1.py 和 ...
随机推荐
- Codeforces1062D. Fun with Integers(埃氏筛)
题目链接:传送门 题目: D. Fun with Integers time limit per test seconds memory limit per test megabytes input ...
- CodeForces - 455D
Serega loves fun. However, everyone has fun in the unique manner. Serega has fun by solving query pr ...
- QMD ST表 倍增
#include<iostream> #include<cmath> using namespace std; ; int a[maxn]; ]; ]; int quick(i ...
- 1.2.4 Excel快速建立n个文件夹
1.准备员工信息表,选中名字 2.[设置单元格格式]>[数字]>[自定义]>右侧的[类型]>输入”md ”@>单击[确定] 3.确定后在姓名前会出现md,新建文本文档,将 ...
- Bootstrap格式转换代码
网址:http://www.w3cschool.cc/bootstrap/bootstrap-responsive-utilities.html <div class="contain ...
- Linux查看线程
我的程序在其内部创建并执行了多个线程,我怎样才能在该程序创建线程后监控其中单个线程?我想要看到带有它们名称的单个线程详细情况(如,CPU/内存使用率). 线程是现代操作系统上进行并行执行的一个流行的编 ...
- Spring Boot之执行器端点(Actuator Endpoint)实现剖析
整体实现思路是将端点(Endpoint)适配委托给MVC层策略端点(MvcEndpoint),再通过端点MVC适配器(EndpointMvcAdapter)将端点暴露为HTTP请求方式的MVC端点,最 ...
- autocomplete input
<html> <head> <title>jQuery UI Autocomplete - Combobox</title> <link rel= ...
- xlrd 和xlwt 对Excel的操作
xlrd与xlwt库的异同点对比 相同点 都支持对Excel文件格式为xls的文件进行操作 不同点 xlrd只支持对Excel文件格式为xls文件的读取 xlwt只支持对Excel文件格式为xls文件 ...
- spring cloud 学习目录
1.spring cloud简单示例 2.spring cloud快速入门 3.spring cloud 常用 4.spring cloud 原理 5.spring cloud 源码分析 6.spri ...