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模块的更多相关文章

  1. os、sys、json、subprocess模块

    今日内容概要 1.os模块 2.sys模块 3.json模块 4.subprocess模块 今日内容详细 os模块 """该模块主要是跟操作系统打交道"&quo ...

  2. python之模块(os、sys、json、subprocess)

    目录 os模块 sys模块 json模块 subprocess模块 os模块 os模块主要是与操作系统打交道. 导入os模块 import os 创建单层文件夹,路径必须要存在 os.mkdir(路径 ...

  3. 023--python os、sys、json、pickle、xml模块

    一.os模块 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 >>> os.getcwd() 'C:\\Python36' os.chdir(&quo ...

  4. python基础--常用的模块(collections、time、datetime、random、os、sys、json、pickle)

    collection模块: namedtuple:它是一个函数,是用来创建一个自定义的tuple对象的,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素.所以我们就可以 ...

  5. 函数和常用模块【day06】:subprocess模块(十)

    本节内容 1.概述 2.前言 3.subprocess模块 4.subprocess.Popen() 一.概述 我们在实际的工作中,需要跟操作系统的命令做交互,但我们如何用python去跟操作系统之间 ...

  6. 第九节:os、sys、json、pickle、shelve模块

    OS模块: os.getcwd()获取当前路径os.chdir()改变目录os.curdir返回当前目录os.pardir()父目录os.makedirs('a/b/c')创建多层目录os.remov ...

  7. day16-常用模块I(time、datetime、random、os、sys、json、pickle)

    目录 time模块 datetime模块 random模块 os模块 sys模块 json模块与pickle模块 json pickle time模块 time模块一般用于不同时间格式的转换,在使用前 ...

  8. Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解

    把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...

  9. os模块/sys模块/json/pickle模块/logging模块(day16整理)

    目录 今日内容 os模块 对文件操作 对文件夹此操作 辅助性的 了解 sys模块 json和pickle模块 json模块 pickle模块 logging模块 日志级别 添加设置 自定义配置 今日内 ...

  10. Python基础之模块:3、os模块 sys模块 json模块 json实战

    目录 一.os模块 1.创建目录 2.删除目录 3.查看指定路径下目录内容 4.删除/重命名文件 5.获取/切换当前目录 6.动态获取项目根路径 7.拼接/切割路径 8.判断文件.目录是否存在 9.判 ...

随机推荐

  1. 爬虫-数据解析-xpath

    xpath 解析 模块安装 : pip install lxml xpath的解析原理 实例化一个etree类型的对象,且将页面源码数据加载到该对象中 需要调用该对象的xpath方法结合着不同形式的x ...

  2. Netty学习摘记 —— 预置SSL / HTTP / WebSocket编解码器

    本文参考 本篇文章是对<Netty In Action>一书第十一章"预置的ChannelHandler和编解码器"的学习摘记,主要内容为通过 SSL/TLS 保护 N ...

  3. WzwJDBC 自定义工具类(获取连接,释放资源)

    package wzwUtil;import java.io.IOException;import java.io.InputStream;import java.sql.*;import java. ...

  4. (stm32f103学习总结)—stm32定时器中断

    一.定时器介绍 STM32F1的定时器非常多,由2个基本定时器(TIM6.TIM7).4个通 用定时器(TIM2-TIM5)和2个高级定时器(TIM1.TIM8)组成.基本定 时器的功能最为简单,类似 ...

  5. 从零开始:微信小程序新手入门宝典《一》

    为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习: 一:微信小程序的特点 张小龙:张小龙全面阐述小程序,推荐通读此文: 小程序是一种不需要下载.安装即可使 ...

  6. 记一个ios滚动穿透问题

    直接上代码 <body style="overflow: hidden;-webkit-overflow-scrolling: touch;"> <div id= ...

  7. [翻译]Service workers:PWA背后的英雄

    原文地址:https://medium.freecodecamp.org/service-workers-the-little-heroes-behind-progressive-web-apps-4 ...

  8. 集合框架基础三——Map

    Map接口  * 将键映射到值的对象  * 一个映射不能包含重复的键  * 每个键最多只能映射到一个值 Map接口和Collection接口的不同 * Map是双列的,Collection是单列的 * ...

  9. Python入门-面向对象三大特性-多态

    Pyhon不支持多态并且也用不到多态,多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚"鸭子类型".

  10. Java多线程与线程池技术

    一.序言 Java多线程编程线程池被广泛使用,甚至成为了标配. 线程池本质是池化技术的应用,和连接池类似,创建连接与关闭连接属于耗时操作,创建线程与销毁线程也属于重操作,为了提高效率,先提前创建好一批 ...