目录
- 一、os模块
- 二、sys模块
- 三、json模块
一、os模块
OS作为计算机系统资源的管理者 主要跟当前程序所在的操作系统打交道
基本格式
import os
os模块主要用来创建文件、目录、修改名字、删除文件、获取路径、判断是否时文件夹以及文件
1 os.mkdir()
和 os.makedirs()
创建目录(文件夹)
os.mkdir()
和 os.makedirs()
都可以创建单机目录
只有 os.makedirs()
可以创建单级目录和多级目录
1.mkdir()
可以创建单机目录
import os
os.mkdir(r'd1') # 相对路径 在执行文件所在的路径下创建目录。可以创建单机目录,每次只可以生成一级目录,不能一次创建多级的目录
os.mkdir(r'd2\d22\d222') # 报错 不可以创建多级目录
2.makedirs()
可以创建单级目录和多级目录
makedirs() # 一次创建多级目录
os.makedirs(r'd2\d22\d222')
os.makedirs(r'd1')
2 os.rmdir()
和 os.makedirs()
删除目录
os.rmdir()
可以删除单机目录
os.makedirs()
可以删除单级目录和多级目录
os.rmdir()
和os.remobedirs()
都只能删除空的单级目录
1.os.rmdir() 可以删除单机目录
os.rmdir(r'd1') # 只可以一次删除一级目录
os.rmdir(r'd2\d22\d222') # 报错 不可以一次删除多级目录
2.os.removedirs() 可以删除多级目录
os.removedirs(r'd2\d22\d222\d2222') # 只能删除空的多级目录,且路径要选到
3 os.listdir()
列举内容名称
os.listdir()
列举指定路径下文件名称
os.listdir() 隐藏文件也可以显示,默认是执行文件当前的路径下
print(os.listdir(r'/Users'))
print(os.listdir()) # 不填路径就是默认是当前文件路径
-------------------------------------
['.localized', 'duoduo', 'Shared']
['sys模块.py', 'os模块.py', 'json 实战.py', 'a.txt', 'md1', 'json模块.py']
4 os.rename()
重命名文件和 os.remove()
删除文件
1.os.rename(A, B) 将 A文件 重命名为 B文件
os.rename(r'a.txt'.r'aaa.txt')
2.os.remove(A) 将 A 文件删除
os.remove(r'aaa.txt')
5 os.getcwd()
获取当前工作目录 和os.chdir()
切换当前工作目录
1.os.getcwd()
获取当前目录
os.getcwd() # 获取当前目录
print(os.getcwd())
-------------------------------
/Users/duoduo/pythonProject/python基础/day 10.20
2.os.chdir()
切换目录
os.chdir() # 切换到目录
os.chdir('..') # 切换到上级目录
# 可以通过创建文件夹知道现在的工作目录是什么
os.mkdir(r'a.txt')
os.mkdir(r'b')
------------------------------
/Users/duoduo/pythonProject/python基础/a.txt
/Users/duoduo/pythonProject/python基础/b
-
os.path
6 动态获取项目根路径***
os.path.abspath(__file__)
获取执行文件的绝对路径
os.path.dirname(__file__)
获取执行文件所在的目录路径
__file__
表示显示文件(执行文件)当前的位置
1.os.path.abspath(__file__)
获取执行文件的绝对路径
os.path.abspath(__file__)
print(os.path.abspath(__file__))
------------------------------------
/Users/duoduo/pythonProject/python基础/day 10.20/os模块.py
2.os.path.dirname(__file__)
获取执行文件所在的目录路径
os.path.dirname(__file__)
print(os.path.dirname(__file__))
------------------------------------
/Users/duoduo/pythonProject/python基础/day 10.20
可以通过在启动文件中添加这两个获取路径来动态获取路径,当启动文件移动位置后也不会报错
![image-20221020102310391](https://pic.jitudisk.com/public/2022/10/20/56ed7228709a9.png)
7 判断路径(文件或者目录)是否存在
1.os.path.exists()
判断文件路径是否存在
os.path.exists() 判断文件路径是否存在
print(os.path.exists(r'bbb.txt')) # 判断文件路径是否存在 True
print(os.path.exists(r'/Users/duoduo/pythonProject/python基础/day 10.20')) # 判断目录是否存在 True
2.os.path.isfile()
如果path是一个存在的文件,返回True,否则返回False
os.path.isfile() 如果path是一个存在的文件,返回True,否则返回False
print(os.path.isfile(r'/Users/duoduo/pythonProject/python基础/day 10.20/json 实战.py')) # 判断路径是否是文件 True
print(os.path.isfile(r'/Users/duoduo/pythonProject/python基础/day 10.19')) # 判断路径是否是文件 False
3.os.path.isdir()
判断路径是否有该目录
os.path.isdir() 如果path是一个存在的目录,则返回True否则返回False
print(os.path.isdir(r'/Users/duoduo/pythonProject/python基础/day 10.20/json 实战.py')) # False
print(os.path.isdir(r'/Users/duoduo/pythonProject/python基础/day 10.19')) # True
8 os.path.join(路径1,路径2)
路径拼接
"""
设计到路径拼接一定不要自己做,因为不同的操作系统路径分隔符不一样
"""
1.os.path.join(路径1,路径2)
s1 = r'/Users/duoduo/pythonProject/python基础/day 10.20'
s2 = r'sys模块.py'
print(f'{s1}\{s2}') # 由于系统不同 分隔符不同,很容易出错
print(os.path.join(s1, s2)) # join方法会自动添加正确的分隔符
-------------------------------------
/Users/duoduo/pythonProject/python基础/day 10.20\sys模块.py # 错
/Users/duoduo/pythonProject/python基础/day 10.20/sys模块.py
9 os.path.getsize()
os.path.getsize() 获取文件大小 以字节为单位
print(os.path.getsize(r'/Users/duoduo/pythonProject/python基础/day 10.20/json模块.py'))
----------------
583
二、sys模块
sys模块是与python解释器交互的一个接口
# 基本格式
import sys
sys模块主要是跟python解释器打交道 可以查看路径、解释器版本信息、平台信息、编码信息
1 sys.path
sys.path 获取执行文件的 sys.path 系统环境变量
import sys
print(sys.path)
2 sys.getrecursionlimit()
递归深度
1.sys.getrecursionlimit() 获取python解释器默认最大的递归深度
print(sys.getrecursionlimit()) # 1000
2.sys.setrecursionlimit() 修改最大递归深度
sys.setrecursionlimit(2000)
print(sys.getrecursionlimit()) # 2000
3 sys.version
获取版本 sys.platform
获取平台
1. sys.version # 获取版本
print(sys.version)
-------------------------------------
3.9.6 (default, Aug 5 2022, 15:21:02)
[Clang 14.0.0 (clang-1400.0.29.102)]
2. sys.platform # 获取平台
print(sys.platform)
-------------------------------------
darwin
4 sys.argv
res = sys.argv 命令行参数List,第一个元素是程序本身路径
# 在终端中操作
res = sys.argv
if len(res) != 3:
print('执行命令缺少了用户名或密码')
else:
username = res[1]
password = res[2]
if username == 'jason' and password == '123':
print('jason您好 文件正常执行')
else:
print('您不是jason无权执行该文件')
三、json模块
json模块也称为序列化模块,序列化可以打破语言限制实现不同编程语言之间数据交互
1 json格式数据为什么可以实现不同语言之间的交互
1.所有语言都认识json格式的数据(json格式数据都是字符串类型)
2.所有语言对应json格式都有对应的数据类型可以对上
![image-20221020112009658](https://pic.jitudisk.com/public/2022/10/20/577c3131fd2d6.png)
2 json格式数据的作用:
1.转换格式
2.作数据交互
3 json格式数据的特征
1 json格式的数据都是字符串
2 且字符串中的引号都是双引号()
# 举例
import json
info_dict = {'name': 'jason', 'pwd': 123}
json_str = json.dumps(info_dict)
print(json_str,type(json_str))
-------------------------------
{"name": "jason", "pwd": 123} <class 'str'>
4 json相关操作
1.针对数据 dumps loads
1.1 json.dumps()
json.dumps() 序列化:将其他数据类型>转换成>json格式字符串
# 举例
import json
info_dict = {'name': 'jason', 'pwd': 123}
json_str = json.dumps(info_dict)
print(json_str,type(json_str))
---------------------------------
{"name": "jason", "pwd": 123} <class 'str'> # json字符串中引号以双引号出现
1.2 json.dumps()
json.loads() 反序列化:json格式字符串>转换成>数据类型
# 举例
import json
info_dict = {'name': 'jason', 'pwd': 123}
json_str = json.dumps(info_dict)
dict_d1 = json.loads(json_str)
print(dict_d1,type(dict_d1))
---------------------------------
{'name': 'jason', 'pwd': 123} <class 'dict'>
- 以文件形式写入字典
import json
user_dict = {'name': 'jason', 'pwd': 123}
'''将字典写入文件并且取出之后还是字典'''
with open(r'a.txt', 'w', encoding='utf8') as f:
json_str = json.dumps(user_dict) # 序列化:数据类型 转换成 >>> json格式字符串
f.write(json_str)
print(json_str, type(json_str))
with open(r'a.txt', 'r', encoding='utf8') as f:
json_str = f.read()
json_dict = json.loads(json_str) # 反序列化:json格式字符串 转换成 >>> 数据类型
print(json_str,type(json_dict))
{"name": "jason", "pwd": 123} <class 'str'>
{"name": "jason", "pwd": 123} <class 'dict'>
2.针对文件 dump load
1. json.dump() dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
2. json.load() load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
- 以文件形式写入字典
import json
user_dict = {'name': 'duo', 'pwd': 999}
'''将字典写入文件并且取出之后还是字典'''
with open(r'a.txt', 'w', encoding='utf8') as f:
# json_str = json.dumps(user_dict) # 序列化:数据类型 转换成 >>> json格式字符串
# f.write(json_str)
# print(json_str, type(json_str))
json.dump(user_dict, f) # 将某个数据序列化并写入文件
with open(r'a.txt', 'r', encoding='utf8') as f:
# json_str = f.read()
# json_dict = json.loads(json_str) # 反序列化:json格式字符串 转换成 >>> 数据类型
# print(json_str,type(json_dict))
res = json.load(f)
print(res)
-----------a.txt中的数据------------
{"name": "duo", "pwd": 999}
5.json实战
用户登录注册功能
import os
import json
# 注册功能
# 1.获取执行文件所在的目录路径
base_dir = os.path.dirname(__file__) # D:/pythonProject03/day19
# 2.拼接出db目录的路径
db_dir = os.path.join(base_dir, 'db') # D:/pythonProject03/day19/db
# 3.创建db目录
if not os.path.isdir(db_dir):
os.mkdir(db_dir)
# 4.获取用户数据
# username = input('username>>>:').strip()
# password = input('password>>>:').strip()
# 4.1.判断用户名是否已存在
# print(os.listdir(db_dir)) # ['jason.json', 'kevin.json', 'tony.json'] 方式1
# user_file_path = os.path.join(db_dir, f'{username}.json') 方式2
# 5.构造用户字典
# user_dict = {
# 'username': username,
# 'password': password,
# 'account': 15000, # 账户余额
# 'shop_car': [] # 购物车
# }
# 6.拼接存储用户数据的文件路径
# user_file_path = os.path.join(db_dir, f'{username}.json') # D:/pythonProject03/day19/db/jason.json
# 7.写入文件数据
# with open(user_file_path,'w',encoding='utf8') as f:
# json.dump(user_dict, f)
username = input('username>>>:').strip()
# 1.拼接上述用户名组成的文件路径
target_user_file_path = os.path.join(db_dir, f'{username}.json')
if not os.path.isfile(target_user_file_path):
print('你赶紧滚蛋 用户名都不对 搞什么飞机')
else:
password = input('password>>>:').strip()
# 2.获取用户真实数据字典
with open(target_user_file_path,'r',encoding='utf8') as f:
real_user_dict = json.load(f)
if password == real_user_dict.get('password'):
print('登录成功')
else:
print('密码错误')
标签:python,sys,json,print,path,os,目录
From: https://www.cnblogs.com/DuoDuosg/p/16811330.html