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. Spring 应用程序有哪些不同组件?

    Spring 应用一般有以下组件:接口 - 定义功能.Bean 类 - 它包含属性,setter 和 getter 方法,函数等.Spring 面向切面编程(AOP) - 提供面向切面编程的功能.Be ...

  2. ACL 权限控制机制?

    UGO(User/Group/Others) 目前在 Linux/Unix 文件系统中使用,也是使用最广泛的权限控制方式.是一种粗 粒度的文件系统权限控制模式. ACL(Access Control ...

  3. kali Linux 渗透测试 | ARP 欺骗

    目录 ARP 欺骗及其原理 ARP 欺骗实施步骤 必备工具安装 nmap 工具 dsniff 工具 driftnet 工具 ettercap 工具 ARP 欺骗测试 ARP 断网攻击 ARP 欺骗(不 ...

  4. 原来 flexbox 是这么工作的

    Flexbox 是一种 CSS 布局机制,可以说是目前浏览器原生支持的最好.使用最广泛的布局机制了.本文通过一些例子来说明 Flexbox 布局的工作原理,可以让我们更好的使用 Flexbox. 与 ...

  5. 【转自百度fex】fex-team/interview-questions

    fex-team/interview-questions 注意 目前发现有其他人以 FEX 团队名义进行招聘,发出的邮箱皆为私人邮箱. 为防止在投递简历出现误会,在此提醒各位注意: FEX 团队没有以 ...

  6. indexOf返回值问题

    String s = "aoood";System.out.println(s.indexOf(""));//返回0 System.out.println(s. ...

  7. apache开启图片缓存压缩

    ①-浏览器缓存图片信息 开启Apache的expires模块,重启Apache 2.在虚拟主机的配置文件里面,增加对图片信息缓存的配置,重启Apache 3.在网站目录里面填写测试代码 4.测试效果 ...

  8. npm使用淘宝镜像源

    npm使用淘宝镜像源 单次使用 npm install koa --registry=https://registry.npm.taobao.org 永久使用 配置淘宝镜像源 npm config s ...

  9. spring原始注解(value)-03

    本博客依据是是spring原始注解-02的代码 注入普通数据类型:@Value注解的使用 1.添加driver属性,使用value注解 @Service("userService" ...

  10. LAN交换机自学习算法

    LAN交换机自学习算法 提示 第二层交完全忽略帧的数据部分协议,仅根据第二层以太网的MAC地址做出转发决策. MAC地址表有时又被称作内容可编址内存(CAM)表 检查源MAC地址 如果源MAC地址不存 ...