模块二:os模块、sys模块、json模块、pickle模块,包
os模块
1 os模块是与操作系统交互的一个接口
2 import os:
3 1、获取当前工作目录
4 print(os.getcwd())
5
6 2、切换到D:\yuan文件目录
7 os.chdir(‘D:\yuan’)
8
9 3、创建文件夹
10 os.mkdir(“yuan”) 创建yuan文件夹
11 os.makedirs(“alvin/imgs”) 创建alvin/imgs文件夹
12
13 4、以列表形式输出路径下的所有文件和文件夹名字 (*)
14 print(os.listdir(‘D:\python35\day15’))
15
16 5、删除
17 os.remove(‘user’) # 删除文件 (*)
18 os.removedirs(‘dirname1’)
19 os.rmdir(‘dirname’) # 删除文件夹 删除单级空目录,若目录不为空无法删除会报错
20
21 6、文件重命名
22 os.rename(‘原文件名’,’目标名’) (*)
23 os.rename(“a.log”,”abc.log”)
24
25 7、获取某文件的具体信息
26 log=os.stat(“abc.log”)
27 print(log)
28 print(log.st_size)
29 print(log.st_mtime) 最后一次修改时间
30 print(time.ctime(log.st_mtime))
31
32 8、输出路径分隔符 windows \\ linux /
33 print(os.sep)
34
35 9、获取绝对路径 (*)
36 print(os.path.abspath('run.py'))
37 # T:\egon\day22\代码\run.py
38
39 10、获取文件的目录 D:\python35\day15 实际就是os.path.split(path)中的第一个元素 (*)
40 print(os.path.dirname(r“D:\python35\day15\abc.log”))
41
42 11、将路径分割成一个目录和文件名,按元组形式返回 (*)
43 print(os.path.split(r“D:\python35\day15\abc.log”))
44 # ('D:\\python35\\day15', 'abc.log')
45
46 12、获取文件名称 实际就是os.path.split(path)中的第二个元素 (*)
47 print(os.path.basename(r“D:\python35\day15\abc.log”)) # abc.log
48
49 # 如果path是一个存在的文件,返回True,否则返回False (*)
50 print(os.path.isfile(path))
51
52 # 如果path是一个存在的目录,返回True,否则返回False (*)
53 print(os.path.isdir(path))
54
55 # 如果path存在,返回True,否则返回False (*)
56 print(os.path.exists(path))
57
58 # 如果path是绝对路径,返回True,否则返回False (*)
59 print(os.path.isabs(path))
60
61 13,判断文件是否存在 (*)
62 print(os.path.exists(r“D:\python35\day15\abc.log”))
63
64 14,路径拼接/ (*)
65 print(os.path.join("D:\python35","day15\\abc.log"))
66
67 推荐使用:
68 BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # 获取文件的目录
69 print(BASE_DIR) # T:/egon/day22
70
71 BASE_DIR=os.path.normpath(os.path.join(
72 __file__, # T:\egon\day22\代码\03 os模块.py
73 '..',
74 '..'
75 ))
76 print(BASE_DIR) # T:\egon\day22
77
78 15、获取文件信息
79 print(os.path.getsize(“abc.log”)) # 获取文件大小 (*)
80 print(os.path.getmtime(“abc.log”)) # 获取最后一次修改时间 (*)
81 print(os.path.getatime("abc.log")) # 获取path所指向的文件或目录的最后存取时间
82
83 在python3.5之后,推出了一个新的模块pathlib
84 from pathlib import Path
85 print(Path(__file__)) # T:\egon\day22\代码\03 os模块.py
86 res = Path(__file__).parent.parent
87 print(res) # T:\egon\day22
88
89 res=Path('/a/b/c') / 'd/e.txt'
90 print(res) # \a\b\c\d\e.txt
91 print(res.resolve()) # T:\a\b\c\d\e.txt
sys模块
sys模块,与python解释器相关信息的模块
import sys
print(sys.version) # 解释器版本信息
print(sys.platform) # 平台 win32
1.sys.argv
print(sys.argv) # [‘04 sys模块’ ,‘yuan’,’123’]
1 应用案例:
2 import sys
3 name='lili'
4 pswd='1136'
5 # print(sys.argv) ['day4.py', 'lili', '1123']
6 if len(sys.argv)==3:
7 username=sys.argv[1]
8 password=sys.argv[2]
9 else:
10 username=input('请输入您的用户名:')
11 password=input('请输入您的密码:')
12 if username==name and pswd==password:
13 print('登录成功!')
14 else:
15 print('用户名或密码有误!')
16
17 2、sys.exit(n) 退出程序,正常退出时exit(0)
18
19 3、sys.version 获取python解释器程序的版本信息
20
21 4、sys.maxint 最大的int值
22
23 5、sys.platform 返回操作系统平台名称
24
25 6、sys.path 返回模块的搜索路径,初始化时使用python path环境变量的值
26
27 7、sys.modules 以字典的形式返回系统已经加载的模块,常用来作为是否重新加载一个模块的判断依据
json序列化
序列化:通过某种方式把数据结构或对象写入到磁盘文件中或通过网络传到其他节点的过程。将本语言(python)下的数据类型对象转换成json字符串的过程。
反序列化:将json字符串转换为本语言支持的对应数据类型对象。
内存中的数据类型---->序列化---->特定的格式(json格式或者pickle格式)
内存中的数据类型<----反序列化<----特定的格式(json格式或者pickle格式)
2、为何要序列化
# 序列化得到结果=>特定的格式的内容有两种用途
# 1)可用于存储=》用于存档
# 2)传输给其他平台使用=》跨平台数据交互
# python java
# 列表 特定的格式 数组
强调:
# 针对用途1的特定一格式:可是一种专用的格式=》pickle只有python可以识别
# 针对用途2的特定一格式:应该是一种通用、能够被所有语言识别的格式=》json
json:简单常用的轻量级的数据交换格式
1 import json
2 dic={“name”:”yuan”,”age”:18,”is_good”:True}
3 # 序列化.dumps()
4 dic_str = json.dumps(dic))
5 print(dic_str,type(dic_str))
6 print(repr(dic_str)) #打印数据原本的样子
7
8 将序列化的结果写入文件的简单方法:
9 with open('test.json',mode = 'wt',encoding = 'utf-8') as f:
10 json.dump([1,'qqq'],f)
11
12 # 反序列化.loads()
13 #将json字符串转换为python的字典结构
14 data=json.loads(dic_str)
15 print(repr(data))
16
17 从文件读取json格式的字符串进行反序列化操作的简单方法
18 with open('text.json',mode = 'rt',encoding = 'utf-8') as f:
19 l = json.load(f)
20 print(l,type(l)) # [1,'qqq'] <class 'list'>
21
22 练习:
23 data_str=’{“name”:”yuan”,”age”:18,”is_good”:true}’
24 data = json.loads(data_str)
25 print(“data:”,data) # 满足json格式也可以序列化、反序列化
26
27 python爬取的数据---序列化---->转换为json类型--反序列化-->java
28
29 前后端通信:前端JS 后端python
30 后端序列化
31 books = [{“title”:”西游记”,”price”:199,”publish”:”苹果出版社”},
32 {“title”:”水浒传”,”price”:199,”publish”:”苹果出版社”},
33 {“title”:”三国演义”,”price”:199,”publish”:”苹果出版社”},
34 {“title”:”三国演义”,”price”:199,”publish”:”苹果出版社”}
35 ]
36 books_str= json.dumps(books)
37 print(repr(books_str))
38 前端反序列化
39 var books = [{“title”:”西游记”,”price”:199,”publish”:”苹果出版社”},
40 {“title”:”水浒传”,”price”:199,”publish”:”苹果出版社”},
41 {“title”:”三国演义”,”price”:199,”publish”:”苹果出版社”},
42 {“title”:”三国演义”,”price”:199,”publish”:”苹果出版社”}
43 ]
44 res=JSON.parse(books)
45
46 json格式兼容的是所有语言通用的数据类型,不能识别某一语言的所所独有的类型
47 json不认单引号
48 在python2.7和3.6之后都可以json.loads(bytes类型)但唯独3.5不可以
49
50 猴子补丁:核心就是用自己的代码替换所用模块的源代码
51 发现ujson比json性能更高,但用法一样,可能会想到用import ujson as json,但需要每个文件都重新导入一下,维护成本很高,此时我们就可以用到猴子补丁
52 只需在入口处加入以下代码(起始执行文件中)
53 import json
54 import ujson
55 def monkey_patch_json():
56 json.__name__ = 'ujson'
57 json.dumps = ujson.dumps
58 json.loads = ujson.loads
59 monkey_path_json()
60 之所以在入口处加是因为模块在导入一次后,后续的导入便直接引用第一次的成果
61
62 比如我们引用团队库里的一个模块,有想丰富模块的功能,除了继承之外也可以考虑猴子补丁功能,如果发现ujson不符合预期,也可以在启动执行文件中删除
pickle模块
内存中结构化的数据<-------->格式pickle<-------->bytes类型<------->保存到文件中或基于网络传输
将python中所有的数据类型,转换为字节串,序列化的过程
将字节串转换成python中数据类型,反序列化
1 import pickle
2 bys = pickle.dumps([1,2,3])
3 print(type(bys)) # <class 'bytes'>
4
5 bys1 = pickle.dumps(set('abc'))
6 print(type(bys1)) # <class 'bytes'>
7 res = pickle.loads(bys)
8 print(type(res)) # <class 'set'>
9
10 bys2 = pickle.dumps((1,2,3))
11 res = pickle.loads(bys2)
12 print(type(res)) # <class 'tuple'>
13
14 pickle常用场景:和json一样,一次性写入,一次性读取
15 json、pickle的比较:
16 json:
17 不是所有的数据类型都可以序列化,结果是字符串str
18 不能多次对同一个文件序列化
19 json数据可以跨语言
20
21 pickle:
22 所有python类型都能序列化,结果是字节串
23 可以多次对同一个文件序列化
24 不能跨语言,只能用于python,并且可能不同版本的python彼此不兼容
包
1、包就是一个包含有__init__.py文件的文件夹
2、包的本质是模块的一种形式,包是用来被当作模块导入
3、关于__init__文件:是python的package的一个标识,当导入包的时候,该导入包的__init__文件会自动执行
*注:可在__init__.py文件中做一些初始化动作,在python3中,即使包下没有__init__.py文件,import 包 仍然不会报错,而在python2中包下一定要有该文件,否则import会报错
*创建包的目的不是为了运行,而是被导入使用,记住包只是模块的一种形式而已,包的本质就是一种模块
4、导包的语法:
1)import 包名.模块
2)from 包名 import 模块
3)from 包名.模块名 import 成员变量名
5、环境变量是以执行文件为准的,当在执行程序入口文件时,会自动将执行文件的绝对路径放入sys.path列表的0索引位置,所有的被导入的模块或者后续的其他文件引用的sys.path都是参照执行文件的sys.path
6、相对导入:仅限于包内使用,不能跨出包
.代表当前文件夹
..代表上一层文件夹
相对导入不能跨出包,所以相对导入仅限于包内模块彼此之间使用,而绝对导入是没有任何限制的,所以绝对导入是一种通用的导入方式。
模块二:os模块、sys模块、json模块、pickle模块,包的更多相关文章
- 023--python os、sys、json、pickle、xml模块
一.os模块 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 >>> os.getcwd() 'C:\\Python36' os.chdir(&quo ...
- python基础--常用的模块(collections、time、datetime、random、os、sys、json、pickle)
collection模块: namedtuple:它是一个函数,是用来创建一个自定义的tuple对象的,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素.所以我们就可以 ...
- 第九节:os、sys、json、pickle、shelve模块
OS模块: os.getcwd()获取当前路径os.chdir()改变目录os.curdir返回当前目录os.pardir()父目录os.makedirs('a/b/c')创建多层目录os.remov ...
- os、sys、json、subprocess模块
今日内容概要 1.os模块 2.sys模块 3.json模块 4.subprocess模块 今日内容详细 os模块 """该模块主要是跟操作系统打交道"&quo ...
- day16-常用模块I(time、datetime、random、os、sys、json、pickle)
目录 time模块 datetime模块 random模块 os模块 sys模块 json模块与pickle模块 json pickle time模块 time模块一般用于不同时间格式的转换,在使用前 ...
- python-时间模块,random、os、sys、shutil、json和pickle模块
一.time与datetime模块 time模块: 时间戳:表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,返回类型为float类型 格式化时间字符串(Format String) ...
- 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...... ...
- 模块(二)os hashlib
模块(二)os hashlib 1.序列化模块 1.1 json 将满足条件的数据结构转化成特殊的字符串,并且可以反序列化转回去 # 两对方法 # 1 dumps() loads() ## 多用于网络 ...
- [xml模块、hashlib模块、subprocess模块、os与sys模块、configparser模块]
[xml模块.hashlib模块.subprocess模块.os与sys模块.configparser模块] xml模块 XML:全称 可扩展标记语言,为了能够在不同的平台间继续数据的交换,使交换的数 ...
随机推荐
- RabbitMQ的使用介绍
一.RabbitMQ是什么 RabbitMQ是一种常用的消息中间件,是基于AMQP协议,采用erlang语言开发的面向消息服务的中间件,是一个独立的系统应用程序,可以管理服务器计算资源和网络通信.一般 ...
- nginx 可视化配置平台
nginx是一个高性能的HTTP和反向代理服务器.在部署项目中,经常会用到,但是配置是比较麻烦的,很容易出错,今天大叔给大家推荐一个非常好用的可视化平台 -- nginx-gui. 项目功能 配置管理 ...
- 前台主页功能-前台轮播图功能完成-git介绍和安装-git使用流程-git常用命令-git忽略文件
目录 前台主页功能-前台轮播图功能完成-git介绍和安装-git使用流程-git常用命令-git忽略文件 昨日内容回顾 今日内容概要 今日内容详细 0 导出项目依赖 0 学长问题解析 1 前台主页功能 ...
- (0724) 格雷码 verilog
https://blog.csdn.net/gordon_77/article/details/79489548 assign gray_value = (binary_value >> ...
- vue2 安装swiper
npm install swiper@5.4.5 -D
- Gtiee_上传本地项目
Git_本地代码上传到码云 本文仅作学习记录,方便日后翻看 创建本地仓库 找到自己本地代码的文件夹,打开Git GUI Here,输入git init创建本地仓库,当前文件夹下有.git文件表示创建成 ...
- 关于webpack 开启代理proxy后,接口看不到代理地址的问题。
今天在项目中发现, 明明在proxy里代理了 接口地址确不是10.10.11.106/front/xxxxxx.这是为啥呢?changeOrigin的修改也是一样,在网络请求中发现host还是没改.这 ...
- [转]Windows 批处理命令教程
第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可 ...
- Fiddler功能详解
编写完成日期:2021-11-22 一.原理以及注意事项 Fiddler工作原理:Fiddler 本质是一个Web代理服务器,Web 代理(Proxy Server)服务器是网络的中间实体.如上图所示 ...
- elasticsearch组件
elasticsearch组件 Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据. 它被用作全文检索.结构化搜索.分析以及这三个功能的组合 E ...