os模块,sys模块,json模块,subprocess模块
os模块
一·什么是os模块
os模块提供了多数操作系统的功能接口函数。当os模块被导入后,它会自适应于不同的操作系统平台,根据不同
的平台进行相应的操作,在python编程时,经常和文件、目录打交道,这时就离不了os模块。
二·常用的os模块命令
第一个:系统操作
os.sep :主要用于系统路径的分隔符(返回当前系统的分隔符):
import os
print(os.sep) # 返回当前系统的分隔符
os.name :指示你正在使用的工作平台。
比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。
print(os.name) # nt
os.getenv(环境变量名称):读取环境变量
print(os.getenv('PATH'))
D:\Anaconda3;D:\Anaconda3\Library\mingw-w64\bin;D:\Anaconda3\Library\usr\bin;D:\Anac
onda3\Library\bin;D:\Anaconda3\Scripts;C:\Program Files (x86)\Common
Files\Oracle\Java\javapath;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\wi
ndows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;C:\Program
Files\Java\jdk-11\bin;C:\Program Files\Java\jre1.8.0_291\bin;C:\Program
Files\MySQL\MySQL Server 8.0\bin;C:\Program Files (x86)\Windows Kits\8.1\Windows
Performance Toolkit\;C:\Program Files\MySQL\MySQL Shell
8.0\bin\;C:\Users\Administrator\AppData\Local\Programs\Python\Python310-
32\Scripts\;C:\Users\Administrator\AppData\Local\Programs\Python\Python310-
32\;%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;C:\Program
Files\Bandizip\;%PyCharm Community Edition%;C:\Users\Administrator\AppData\Loca
l\Programs\Python\Python37-32\Scripts\;C:\Users\Administrator\AppData\L
ocal\Programs\Python\Python37-32\;%IntelliJ IDEA Community
Edition%;D:\qqyx\QQGameTempest\Hall.57768\
os.getcwd():获取当前执行文件的路径。
print(os.getcwd())
D:\pythonproject\test
第二个:目录操作-增删改查
os.listdir():返回指定目录下的所有文件和目录名(默认当前执行文件)
print(os.listdir())
['.idea', '1.py', '1.txt', 'a.py', 'b.py', 'day 19 homework(1).py', 'hongniu.py', 'main.py', 'test.py', 'userinfo.txt', '__pycache__']
print(os.listdir(r'C:\\')) # 返回C盘下的所以文件和目录
['$RECYCLE.BIN', '$WinREAgent', 'Boot', 'bootmgr', 'Documents and Settings', 'DumpStack.log.tmp', 'ESAP-Wushi', 'Fraps', 'LeakHotfix', 'pagefile.sys', 'Position', 'Program Files', 'Program Files (x86)', 'ProgramData', 'Recovery', 'swapfile.sys', 'System Volume Information', 'Users', 'Windows', 'wlog.txt']
os.mkdir() :创建一个目录,只创建一个目录文件,不能创建文件如:a.py, a.txt等。
os.mkdir('aaa') #
os.rmdir() :删除—个单级(一层)的空目录。若目录中有文件(甚至是空文件或空文件夹(目录))则无法删除。
os.rmdir('a')
os.makedirs(dirname):可以生成多层递归目录。如果目录全部存在,则创建目录失败。如有部分存在,则创建不存在的文件夹。
os.makedirs(r'ccc') # makedirs可以创建单级目录
os.makedirs(r'bbb/ccc/eee') # makedirs支持创建多级目录
os.removedirs(dirname):可以删除多层递归的空目录,若目录中有文件则无法删除.
os.removedirs(r'ccc') # 可以删除单级目录
os.removedirs(r'bbb/ccc/eee') # 删除目录之后如果外层的目录也是空的则继续删除
os.remove():删除文件
os.remove('bbb/ccc/a.py') # 只能删除文件,不能删除目录
os.chdir():改变当前目录,到指定目录中。(切换路径)
os.chdir('C:\\') # 切换至C盘目录下
print(os.getcwd()) # 查看当前路径C:\
os.rename():重命令名目录名或者文件名。重命名后的文件名在同一路径下已存在时,则重命名失败。
os.rename('1.py', 'a.py')
判断
os.path.exists(path):判断文件或者目录是否存在。存在则返回True,否则返回False
print(os.path.exists(r'C:\\')) # True
os.path.isfile(path):判断是否为文件。是文件则返回True,否则返回False
print(os.path.isfile(r'C:\\')) # False
print(os.path.isfile(r'a.py')) # True
os.path.isdir(path):判断是否为目录。是目录则返回True,否则返回False
print(os.path.isdir('bbb')) # True
print(os.path.isdir('a.py')) # False
path模块
os.path.basename(path):返回文件名;
print(os.path.basename(r'a.py')) # a.py
print(os.path.basename(r'bbb')) # bbb
os.path.dirname(path):返回文件路径;
print(os.path.dirname('ccc'))
os.path.getsize(name)∶获得文件大小(字节 bytes),如果name是目录返回0;
print(os.path.getsize('a.py')) # 11379
print(os.path.getsize('bbb/ccc/aaa')) # 0
os.path.abspath(name):获得绝对路径;
print(os.path.abspath('a.py')) # D:\pythonproject\test\a.py
print(os.path.abspath('bbb')) # D:\pythonproject\test\bbb
os.path.join(path,name):连接目录与文件名或目录(能够自动识别当前操作系统的分隔符)
a = os.path.abspath('bbb')
b = 'ccc'
d = os.path.join(a,b)
print(d) # D:\pythonproject\test\bbb\ccc
软件开发目录规范 启动脚本兼容性操作
os.path.dirname(__file__) # 动态获取当前执行文件所在的绝对路径 D:\pythonproject\test\hongniu.py
os.path.dirname(os.path.dirname(__file__)) # 每嵌套一层就是往上切换一层 D:\pythonproject\test
print(os.path.abspath(__file__)) # 动态获取当前执行文件自身的路径 D:\pythonproject\test\hongniu.py
sys模块
简介
Python的sys模块提供访问由解释器使用或维护的变量的接口,并提供了一些函数用来和解释器进行交互,
操控Python的运行时环境。
sys.argv 传递给程序的命令行参数列表;其中,sys.argv[0]表示脚本名称,各个参数均为字符串类
型。
"""
cmd终端可以使用windows+r并输入cmd唤起
也可以在pycharm直接使用快捷方式Terminal
模拟cmd并自动切换到当前执行文件所在的路径下
"""
if len(sys.argv) == 3: # 这里的判断也可以变成异常捕获的形式
username = sys.argv[1]
password = sys.argv[2]
if username == 'jason' and password == '123':
print('可以正常执行该文件')
else:
print('用户名或密码错误 没有该文件的执行权限')
else:
print('请输入用户名和密码 不能漏写或多写')
sys.path 模块的搜索路径;sys.path[0] 表示当前执行文件所在目录
print(sys.path)
['D:\\pythonproject\\test', 'D:\\pythonproject\\test', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python310-32\\python310.zip', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python310-32\\DLLs', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python310-32\\lib', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python310-32', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python310-32\\lib\\site-packages']
print(sys.path[0]) # D:\pythonproject\test
sys.version 获取解释器版本信息
print(sys.version)
3.10.0a1 (tags/v3.10.0a1:8e9afaf, Oct 5 2020, 20:22:20) [MSC v.1927 32 bit (Intel)]
sys.platform 获取平台信息
print(sys.platform) # win32
json模块
简介
JSON是一种独立于语言的文本格式,用于数据交换,可以在不同语言间交换数据。
在高级版本的Python里自带json模块包,使用import json直接导入模块。
JSON文本以“键/值”对形式定义,Python里的json模块主要用于“Python数据与JSON格式的数据间相互转换”。
JSON的数据类型:数字(整数或浮点数),字符串(“ ”),逻辑值(True/False),数组([ ]),对象({ }),null。
json模块里常用的四个方法是dump,dumps,load,loads。详细的方法使用细节参考Python自带帮助文件help(json.dump)。
json格式数据的具体特征
结论1中有一个小细节>>>:数据基于网络传输肯定是二进制格式
在python中bytes类型的数据可以直接看成是二级制数据
python中哪些数据可以转成bytes类型(编码encode())
只有字符串可以!!!
由上述推论可知 json格式数据 本质应该属于字符串类型
方法
(1)Encode编码为json对象
dump的功能就是把Python对象encode为json对象,一个编码过程。 注意json模块提供了json.dumps和
json.dump方法,区别是dump直接到文件,而dumps到一个字符串,这里的s可以理解为string。
json.dumps()
import json
data = {'a': 'A', 'b': (2, 4), 'c': 3.0}
print('DATA:', data, type(data))
DATA: {'a': 'A', 'b': (2, 4), 'c': 3.0} <class 'dict'>
data_string = json.dumps(data)
print('JSON:', data_string, type(data_string))
JSON: {"a": "A", "b": [2, 4], "c": 3.0} <class 'str'>
json.dump()
不仅可以把Python对象编码为string,还可以写入文件。
但是不能把Python对象直接写入文件,这样会报错TypeError: expected a string or other character buffer object,
需要将其序列化之后才可以写入文件。
import json
data = [{'a': 'A', 'b': (2, 4), 'c': 3.0}]
with open('output.json', 'w') as fp:
json.dump(data, fp)
(2)Decode解码为Python对象:
json.loads()
data_string = r'{"a": "A", "b": [2, 4], "c": 3.0}'
print(type(data_string)) # {"a": "A", "b": [2, 4], "c": 3.0} # json格式数据
decoded_json = json.loads(data_string)
print(type(decoded_json), decoded_json) # <class 'dict'> {'a': 'A', 'b': [2, 4], 'c': 3.0}
json.load()
with open('output.json') as fp:
print(type(fp)) # <class '_io.TextIOWrapper'>
loaded_json = json.load(fp)
print(type(loaded_json), loaded_json) # <class 'dict'> {'a': 'A', 'b': [2, 4], 'c': 3.0}
补充
"""
json.dumps() 序列化
将python数据类型转换成json格式字符串
json.loads() 反序列化
将json格式字符串转换成对应的数据类型
"""
"""
如果json模块需要配合文件一起使用的话 有固定的方法
json.dump()
将其他数据类型直接写入文件(自动转json格式字符串)
json.load()
将文件数据直接转成对应的数据类型(自动反序列化)
"""
# 强调:不是所有的数据类型都支持序列化
"""
+-------------------+---------------+
| Python | JSON |
+===================+===============+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+
"""
subprocess模块
import subprocess
# ls在终端的意思就是查看当前路径下所有的文件名称
res = subprocess.Popen('ls',
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
print('stdout',res.stdout.read().decode('utf8')) # 获取正确命令执行之后的结果
print('stderr',res.stderr.read().decode('utf8')) # 获取错误命令执行之后的结果
"""
该模块可以实现远程操作其他计算机的功能
动态获取命令执行并返回结果
eg:类似于Xshell软件的功能
"""
今日作业(直接复制代码就能运行)
编程题
项目功能
1.用户注册
2.用户登录
3.添加购物车
4.结算购物车
项目说明
用户数据采用json格式存储到文件目录db下 一个用户一个单独的文件
数据格式 {"name":"jason","pwd":123}
ps:文件名可以直接用用户名便于校验
用户注册时给每个用户添加两个默认的键值对(账户余额 购物车)
{"balance":15000,"shop_car":{}}
添加购物车功能 商品列表可以自定义或者采用下列格式
good_list = [
['挂壁面',3]
['印度飞饼', 22]
['极品木瓜', 666],
['土耳其土豆', 999],
['伊拉克拌面', 1000],
['董卓戏张飞公仔', 2000],
['仿真玩偶', 10000]
]
用户可以反复添加商品,在购物车中记录数量
{'极品木瓜':[个数,单价]}
结算购物车
获取用户购物车中所有的商品计算总价并结算即可
思考:针对添加购物车和结算只有登录的用户才可以执行如何实现
import os
import json
good_list = [
['挂壁面', 3],
['印度飞饼', 22],
['极品木瓜', 666],
['土耳其土豆', 999],
['伊拉克拌面', 1000],
['董卓戏张飞公仔', 2000],
['仿真玩偶', 10000]]
is_login = [0, 'username'] # 标记是否已登入 第一个参数:0:未登入 1:已登入|第二个参数:记住登入后的用户名
# 装饰器:再进行购物车添加和结算是需要先登入
def f1(func):
def f2():
if is_login[0] == 1:
func()
else:
print('------请先登入后再进行操作------')
login()
return f2
# 当db文件不存在时,生成一个db文件夹
def isdb():
if not os.path.isdir('db'):
os.makedirs(r'db')
# 获取用户名和密码并返回
def getInfo():
username = input('请输入你的用户名: ').strip()
password = input('请输入你的密码: ').strip()
return username, password
# 登入
def login():
name, pwd = getInfo()
name_file = name + '.json' # 用于定义文件名 name.json格式
db_path = os.path.abspath('db') # 找到db文件的绝对地址
db_path_file = os.listdir(db_path) # 查找db文件夹下所有的文件,并以列表的形式返回文件名
if name_file in db_path_file: # 判断是否存在 该文件
os.chdir(db_path) # 切换到db目录下
with open(name_file) as f1: # 打开账号对应的json文件,转为原数据类型这里是字典
pwd_json = json.load(f1)
if pwd_json['pwd'] == int(pwd):
print('------登入成功------')
is_login[0] = 1
is_login[1] = name
else:
print('------账号或密码错误------')
os.chdir(os.path.dirname(__file__)) # 切换回执行文件路径
else:
print('------账号不存在------')
# 注册
def register():
name, pwd = getInfo()
name_file = name + '.json' # 用于文件名 name.json格式
db_path = os.path.abspath('db') # 找到db文件的绝对地址
db_path_file = os.listdir(db_path) # 查找db文件夹下所有的文件,并以列表的形式返回文件名
if name_file in db_path_file: # 判断是否存在 该文件
print('------账号已存在------')
else:
user_dict = {
'name': name,
'pwd': int(pwd),
'balance': 15000,
'shop_car': {}
}
os.chdir(db_path) # 切换到db目录下
with open(f'{name_file}', 'w') as f1: # 将数据写入文件
json.dump(user_dict, f1)
print('------注册成功------')
os.chdir(os.path.dirname(__file__)) # 切换回执行文件路径
@f1 # 将商品添加到购物车
def add_to():
name = is_login[1]
name_file = name + '.json' # 用于文件名 name.json格式
db_path = os.path.abspath('db') # 找到db文件的绝对地址
os.chdir(db_path) # 切换到db目录下
with open(name_file) as f1: # 转为原数据类型这里是字典
name_file_dict = json.load(f1)
while True:
print('''
编号 商品名 单价
(1) 挂壁面 3
(2) 印度飞饼 22
(3) 极品木瓜 666
(4) 土耳其土豆 999
(5) 伊拉克拌面 1000
(6) 董卓戏张飞公仔 2000
(7) 仿真玩偶 10000
(8) 退出
''')
list_id = int(input('请输入商品编号: ').strip())
if list_id in [1, 2, 3, 4, 5, 6, 7]:
numb = int(input('请输入需要的个数: ').strip())
name_file_dict['shop_car'][good_list[list_id - 1][0]] = [numb, good_list[list_id - 1][1]] # 将商品添加到购物车
print('-----------------------------')
elif list_id == 8:
break
with open(name_file, 'w') as f2:
json.dump(name_file_dict, f2)
os.chdir(os.path.dirname(__file__)) # 切换回执行文件路径
@f1 # 结算
def settlement():
name = is_login[1]
name_file = name + '.json' # 用于文件名 name.json格式
db_path = os.path.abspath('db') # 找到db文件的绝对地址
os.chdir(db_path) # 切换到db目录下
with open(name_file) as f1: # 转为原数据类型这里是字典
name_file_dict = json.load(f1)
have_money = name_file_dict['balance'] # 获取余额
need_money = 0
for i in name_file_dict['shop_car'].values():
need_money += (i[0] * i[1]) # 计算需要多少钱
if have_money >= need_money:
money = have_money - need_money
name_file_dict['balance'] = money
print(f'------余额:{money}------')
name_file_dict['shop_car'] = {} # 清空购物车
with open(name_file, 'w') as f2:
json.dump(name_file_dict, f2)
os.chdir(os.path.dirname(__file__)) # 切换回执行文件路径
else:
print('------余额不足------')
@f1 # 查看信息
def select_info():
name = is_login[1]
name_file = name + '.json' # 用于文件名 name.json格式
db_path = os.path.abspath('db') # 找到db文件的绝对地址
os.chdir(db_path) # 切换到db目录下
with open(name_file) as f1: # 转为原数据类型这里是字典
name_file_dict = json.load(f1)
print(
f'''
用户名:{name_file_dict['name']}
密码:{name_file_dict['pwd']}
余额:{name_file_dict['balance']}
购物车:{name_file_dict['shop_car']}
'''
)
os.chdir(os.path.dirname(__file__)) # 切换回执行文件路径
def login_out():
if is_login[0] == 1:
is_login[0] = 0
is_login[1] = ''
print('------退出成功------')
else:
print('------请先登入------')
funcs_dict = {
'1': register,
'2': login,
'3': add_to,
'4': settlement,
'5': login_out,
'6': select_info
}
isdb()
while True:
print('''
1.用户注册
2.用户登录
3.添加购物车
4.结算购物车
5.退出登入
6.查看用户信息
7.退出
''')
chioce = input('请输入要进行的指令: ').strip()
if chioce in funcs_dict.keys():
funcs_dict[chioce]()
elif chioce == '7':
break
else:
print('------输入的指令有误------')
os模块,sys模块,json模块,subprocess模块的更多相关文章
- os、sys、json、subprocess模块
今日内容概要 1.os模块 2.sys模块 3.json模块 4.subprocess模块 今日内容详细 os模块 """该模块主要是跟操作系统打交道"&quo ...
- python之模块(os、sys、json、subprocess)
目录 os模块 sys模块 json模块 subprocess模块 os模块 os模块主要是与操作系统打交道. 导入os模块 import os 创建单层文件夹,路径必须要存在 os.mkdir(路径 ...
- 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的某个元素.所以我们就可以 ...
- 函数和常用模块【day06】:subprocess模块(十)
本节内容 1.概述 2.前言 3.subprocess模块 4.subprocess.Popen() 一.概述 我们在实际的工作中,需要跟操作系统的命令做交互,但我们如何用python去跟操作系统之间 ...
- 第九节:os、sys、json、pickle、shelve模块
OS模块: os.getcwd()获取当前路径os.chdir()改变目录os.curdir返回当前目录os.pardir()父目录os.makedirs('a/b/c')创建多层目录os.remov ...
- day16-常用模块I(time、datetime、random、os、sys、json、pickle)
目录 time模块 datetime模块 random模块 os模块 sys模块 json模块与pickle模块 json pickle time模块 time模块一般用于不同时间格式的转换,在使用前 ...
- Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解
把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...
- os模块/sys模块/json/pickle模块/logging模块(day16整理)
目录 今日内容 os模块 对文件操作 对文件夹此操作 辅助性的 了解 sys模块 json和pickle模块 json模块 pickle模块 logging模块 日志级别 添加设置 自定义配置 今日内 ...
- Python基础之模块:3、os模块 sys模块 json模块 json实战
目录 一.os模块 1.创建目录 2.删除目录 3.查看指定路径下目录内容 4.删除/重命名文件 5.获取/切换当前目录 6.动态获取项目根路径 7.拼接/切割路径 8.判断文件.目录是否存在 9.判 ...
随机推荐
- Spring 支持的事务管理类型?
Spring 支持两种类型的事务管理:编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵 活性,但是难维护.声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用 注解和 XM ...
- 8.5_线性控制器设计_轨迹跟踪(Follow a Desired Path)
平衡点时所有的导数都为0 simulink中建立状态方程模型
- css布局中左侧固定右侧自适应
float 单一层浮动法左侧固定成100px; 则核心代码 左侧:width:100px;float:left; 右侧 width:auto;margin-left:100px;绝大浏览器是没有任何问 ...
- python-统计字符个数
输入一个字符串,统计其中数字字符及小写字符的个数 输入格式: 输入一行字符串 输出格式: 共有?个数字,?个小写字符 输入样例: helo134ss12 输出样例: 共有5个数字,6个小写字符 代码: ...
- PAT B1031查验身份证
一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8, ...
- golang开发:go并发的建议
这个是前段时间看到Go语言的贡献者与布道师 Dave Cheney对Go并发的建议或者叫使用的陷阱(不是我自己的建议),结合自己最近几年对gorotine的使用,再回头看这几条建议,真的会茅塞顿开,觉 ...
- Kubernetes构建云原生架构-图解
- RFC 标准文档
RFC 标准文档 什么是 RFC ? RFC(Request For Comments)意即"请求评论",包含了关于Internet的几乎所有重要的文字资料.如果你想成为网络方面的 ...
- SpringMVC快速使用——基于XML配置和Servlet3.0
SpringMVC快速使用--基于XML配置和Servlet3.0 1.官方文档 https://docs.spring.io/spring-framework/docs/5.2.8.RELEASE/ ...
- PostgreSQL安装 报there has been an error.Error running
直接用postgresql-11.2-1:https://get.enterprisedb.com/postgresql/postgresql-11.2-1-windows-x64.exe这个版本的安 ...