os模块、sys模块、ison模块、subprocess模块

概要

  • os模块

  • sys模块

  • ison模块

  • subprocess模块

内容

os模块

使用场景:该模块主要是跟操作系统打交道

1.创建文件夹目录

mkdir():使用的是相对路径 在当前文件所在路径下最多创建一个新的文件夹目录 里面是空的文件

makedirs():既可以产生一个新的文件夹目录 也可以产生多个文件夹目录

import os
os.mkdir(r'aaa')  
os.mkdir(r'bbb\ccc') 

os.makedirs(r'ccc')
os.makedirs(r'bbb\ccc\ddd')

2.删除文件夹目录

rmdir():只能删除空的单级目录

removedirs():可以删除单级目录 删除多层目录是从内部往外层的删除 要求是外部的目录文件夹也是空的

import os
os.rmdir(r'aaa')
os.rmdir(r'bbb')

os.removedirs(r'ccc')
os.removedirs(r'F:\python20\01.py\bbb\ccc)

3.listdir():查看某个路径下所有的文件名称(文件、文件夹)

import os
print(os.listdir())
print(os.listdir(r'F:\python20\01.py'))

4.remove()删除文件、rename()重命名文件

import os
os.remove(r'a.txt')
os.rename(r'a.txt',r'aaa.txt')

5.getcwd()获取当前路径、chdir()切换路径

import os
print(os.getcwd())
os.chdir(r'F:\python20')
print(os.getcwd())

6.软件开发目录规范 启动脚本兼容性操作

os.path.dirname(双下__file__):动态获取当前执行文件所在的绝对路径 可以嵌套,每嵌套一层就是往上切换一层

os.path.abspath(双下file):动态获取当前执行文件自身的路径

import os
os.path.dirname(__file__)
os.path.dirname(os.path.dirname(__file__))
print(os.path.abspath(__file__))

7.判断文件的路径是否存在 是否是文件夹 是否是文件 通过布尔值来判断

exists(r'a'):判断路径是否存在

isdir(r'a'):判断路径是否是一个文件夹

isfile(r'b'):判断路径是否是一个文件

import os
print(os.path.exists(r'a'))
print(os.path.exists(r'01 os模块.py'))

print(os.path.isdir(r'b'))
print(os.path.isdir(r'01 os模块.py'))

print(os.path.isfile(r'b'))
print(os.path.isfile(r'01 os模块.py'))

8.拼接文件(极容易忽略)

join():拼接成py文件的路径 路径分隔符在不同的系统下是不一样的 使用加号的话兼容性极差 而使用join()能够自动识别当前操作系统的分隔符

import os
base_dir='a'
exe_dir ='o1 os模块.py'
print(base_dir+'\'+exe_dir)
res =os.path.join(base_dir,exe_dir)
print(res)

9.获取文件大小(是以字节 bytes为单位)

import os
print(os.path.getsize(r'a'))
print(os.path.getsize(r'o1 os模块.py'))

os模块练习应用

要求:选择指定文件并打开浏览(目前只考虑文本文件即可)

展示某个文件下所有的文件名称 用户选择哪个就可以打开哪个

思路:

1.先获取目标文件路径(动态获取 )

2.列举该路径下所有的文件名称

3.循环展示每个文件名称

4.获取用户选择的编号

5.判断是否是纯数字

6.如果是纯数字 需要转换成整型

7.判断数字在不在数量范围内

8.获取文件名称

9.拼接完成路径

10.文件操作打开文件

import os
target_path =os.path.dirname(__file__)
full_path =os.path.join(target_path,'a')
file_name_list =os.listdir(full_path)
while True:
    for i,j in enumerate(file_name_list,start=1):
        print(i,j)
    target_num =input('请输入你想要查看的文件编号>>>>:').strip()
    if target_num.isdigit():
        target_num =int(target_num)
        if target_num in range(1,len(file_name_list)+1):
            file_name = file_name_list[target_num-1]
            full_file_path =os.path.join(full_path,file_name)
            with open(full_file_path,'r',encoding='utf8') as f:
                print(f.read())
       else:
            print(f.read())
   else:
        print('编号只能是数字')

sys模块

该模块主要跟python解释器打交道

1.print(sys.path)列举文件路径

print(sys.path)

2.获取解释器版本信息(了解)

print(sys.version)

3.获取平台信息(了解)

print(sys.platform)

4.自定义命令行操作

print(sys.argv)

cmd终端可以使用windows +r 并输入cmd唤起

也可以在pycharm直接使用快捷键方式Terminal模拟cmd并自动切换到当前执行文件所在的路径下

import sys
if len(sys.argv) ==3:
    username =sys.argv[1]
    password =sys.argv[2]
    if username =='jason'and password =='123':
    	print('可以正常执行该文件')
    else:
        print('用户名或密码错误 没有该文件的执行权限')
else:
    print('请输入用户名与密码 不能漏写或多写')

try:
    username =sys.argy[1]
    password =sys.argy[2]
except Exception:
    print('请输入用户名与密码')
else:
    if username =='jason'and password =='123':
        print('可以正常执行改文件')
    else:
        print('用户名或密码错误 没有该文件的执行权限')

json模块

json模块一个序列化模块 主要用于跨语言传输数据

1.参考群内截图得知json格式数据是不同编程语言之间数据交互的媒介

2.json格式数据的具体特征

​ 结论1中可以得出的结论:数据基于网络传输肯定是二进制格式

​ 我们都知道在python中bytes类型的数据可以直接看成是二进制数据 只有字符串类型可在python中转成bytes类型(编码edcode),由此推论可知 json格式数据 本质上应该属于字符串类型

双引号是json格式数据独有的标志符号!!!

import json
d ={'username':'jason','pwd':123}
print(d,type(d))  # {'username': 'jason', 'pwd': 123} <class 'dict'>
res =json.dumps(d)
print(res,type(res)) #  # {"username": "jason", "pwd": 123} <class 'str'>
print(str(d),type(str(d)))  #{'username': 'jason', 'pwd': 123} <class 'str'>

json格式数据两个条件:字符串和双引号

d ={"username":"jason","pwd":123}
print(d)  # {'username': 'jason', 'pwd': 123}  不是
res1 ='{"username":"jason","pwd":123}'
print(res1) # {"username":"jason","pwd":123}  算json格式

具体操作

假设将该字符串基于网络发给了另外一个python程序

import json
d ={'username':'jason','pwd':123}
res =json.dump(d)
print(res,type(res))  
encode_str =res.encode('utf8')
json_str =encode_str.decode('utf8')
print(json_str,type(json_str))
res1 =json.loads(json_str)
print(res1,type(res1))  # {'username': 'jason', 'pwd': 123} <class 'dict'>

json.dump() 序列化

将python数据类型转换成json格式字符串

json.loads() 反序列化

将json格式字符串转换成对应的数据类型

如果不能理解跨语言传输的作用 那么权且理解下面的操作即可

将上述字典写入文件、将文件内容获取出来

d ={'username':'jason','pwd':123}
with open(r'a.txt','w',encoding ='utf8') as f:
    f.write(d)
    f.write(str(d))
    f.write(json.dump(d))
    json.dump(d,f)
with open(r'a.txt','r',encoding='utf8') as f:
    data =f.read()
    res =json.loads(data)
    print(res,type(res))
    data =json.load(f)
    print(data,type(data))
    

如果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模块

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软件的功能

posted @   一颗平凡的小石头  阅读(187)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示