day03.30

os模块

os模块主要是跟操作系统打交道。

  • 创建目录(文件夹)
import os
os.mkdir(r'aaa')  # 使用相对路径,在当前执行文件所在的路径下创建一个aaa文件夹
os.mkdir(r'bbb\ccc')  # mkdir只能创建单级目录   报错
os.makedirs(r'ccc')  # makedirs可以创建单级目录
os.makedirs(r'bbb\ccc\ddd')  # makedirs支持创建多级目录

 

  • 删除目录(文件夹)
import os
os.rmdir(r'aaa')  # 可以删除单级目录
os.rmdir(r'bbb')  # 只能删空的单级目录
os.removedirs(r'ccc')  # 可以删除单级目录
os.removedirs(r'/Users/jiboyuan/PycharmProjects/day21/bbb/ccc/ddd')  # 删除目录之后如果外层的目录也是空的则继续删除

 

  • 查看某个路径下所有的文件名称(文件、文件夹)
import os
print(os.listdir())
print(os.listdir(r'Users'))

 

  • 删除文件、重命名文件
import os
os.remove(r'a.txt')    # 删除文件
os.rename(r'a.txt', r'aaa.txt')    # 前面的文件被后面的文件重命名覆盖

 

  • 获取当前路径、切换路径
import os
print(os.getcwd())
os.chdir(r'/Users/jiboyuan')
print(os.getcwd())

 

  • 软件开发目录规范 启动脚本兼容性操作
import os
os.path.dirname(__file__)  # 动态获取当前执行文件所在的绝对路径       
os.path.dirname(os.path.dirname(__file__))  # 每嵌套一层就是往上切换一层  
print(os.path.abspath(__file__))  # 动态获取当前执行文件自身的路径

 

  • 判断文件是否存在
import os
print(os.path.exists(r'ATM'))  # True  判断所给的路径是否存在
print(os.path.exists(r'01 作业讲解.py'))  # True  判断所给的路径是否存在
print(os.path.isdir(r'ATM'))  # True  判断路径是否是一个文件夹
print(os.path.isdir(r'01 作业讲解.py'))  # False  判断路径是否是一个文件夹
print(os.path.isfile(r'ATM'))  # False  判断路径是否是一个文件
print(os.path.isfile(r'01 作业讲解.py'))  # True  判断路径是否是一个文件

 

  • 拼接路径
import os
base_dir = 'ATM'
exe_dir = '01 作业讲解.py'
'''拼接成py文件的路径'''
print(base_dir + '/' + exe_dir)  # 路径分隔符在不同的系统下是不一样的  使用加号的话兼容性极差
res = os.path.join(base_dir, exe_dir)  # 能够自动识别当前操作系统的分隔符
print(res)

 

  • 获取文件大小(字节  bytes)
import os
print(os.path.getsize(r'ATM'))  # 存储多少字节
print(os.path.getsize(r'a.txt'))  # 存储多少字节

小练习:

复制代码
# 选择指定文件并打开浏览(目前只考虑文本文件即可)

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

# 1.先获取目标文件路径(动态获取 也可以省事先写死)
target_path = os.path.dirname(__file__)
full_path = os.path.join(target_path, '好看的合集')
# 2.列举该路径下所有的文件名称
file_name_list = os.listdir(full_path)  # ['','','','']
while True:
    # 3.循环展示每个文件名称
    for i, j in enumerate(file_name_list, start=1):
        print(i, j)
    # 4.获取用户选择的编号
    target_num = input('请输入您想要查看的文件编号>>>:').strip()
    # 5.判断是否是纯数字
    if target_num.isdigit():
        # 6.如果是纯数字 转换成整型
        target_num = int(target_num)
        # 7.判断数字在不在数量范围内
        if target_num in range(1, len(file_name_list) + 1):
            # 8.获取文件名称
            file_name = file_name_list[target_num - 1]
            # 9.拼接完整路径
            full_file_path = os.path.join(full_path, file_name)
            # 10.文件操作打开文件
            with open(full_file_path, 'r', encoding='utf8') as f:
                print(f.read())
        else:
            print('没有该编号的文件')
    else:
        print('编号只能是数字')
复制代码

 

 

sys模块

sys模块主要是跟python解释器打交道。

  • 列举当前执行文件所在的sys.path(掌握)
# sys.path
import sys
print(sys.path)    # 产生一个存放很多内存地址的列表集合,相当于环境变量

 

  • 获取解释器版本信息(了解)
import sys
print
(sys.version) # 获取解释器的版本信息

 

  • 获取平台信息(了解)
import sys
print
(sys.platform) # 获取平台信息

 

  • 自定义命令行操作

cmd终端可以使用windows+r并输入cmd唤起;也可以在pycharm直接使用快捷方式Terminal;模拟cmd并自动切换到当前执行文件所在的路径下。

import sys
print(sys.argv)    # 模拟cmd窗口

eg:

复制代码
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('请输入用户名和密码 不能漏写或多写')
复制代码
复制代码
import sys
try:
    username = sys.argv[1]
    password = sys.argv[2]
except Exception:
    print('请输入用户名和密码')
else:
    if username == 'jason' and password == '123':
        print('可以正常执行该文件')
    else:
        print('用户名或密码错误 没有该文件的执行权限')
复制代码

 

josn模块

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

json格式数据是不同变成语言之间数据交互的媒介。由于数据基于网络传输,所以json数据肯定是二进制格式 。

在python中bytes类型的数据可以直接看成是二进制数据;python中只有字符串才可以转成bytes类型(编码encode())。所以json格式数据的本质应该属于字符串类型。

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

复制代码
'''json.dumps()        序列化
    将python数据类型转换成json格式字符串
json.loads()        反序列化
    将json格式字符串转换成对应的数据类型
'''
import json

d = {'username': 'jason', 'pwd': 123}
res = json.dumps(d)
print(res, type(res))  # json格式字符串
encode_str = res.encode('utf8')
'''假设将该字符串基于网络发给了另外一个python程序'''
# 先将bytes类型转换成字符串
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模块需要配合文件一起使用的话:

json.dump()    将其他数据类型直接写入文件(自动转json格式字符串)

json.load()      将文件数据直接转成对应的数据类型(自动反序列化)

eg:

复制代码
import 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.dumps(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))
复制代码

 

note:不是所有的数据类型都支持序列化!!!

subprocess模块

import subprocess

该模块可以实现远程操作其他计算机的功能,动态获取命令执行并返回结果。

复制代码
import subprocess

# ls在终端的意思就是查看当前路径下所有的文件名称
res = subprocess.Popen('ls',
                       shell=True,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE
                       )
print('stdout',res.stdout.read().decode('utf8'))  # 获取正确命令执行之后的结果  utf8解码
print('stderr',res.stderr.read().decode('utf8'))  # 获取错误命令执行之后的结果  utf8解码
复制代码

 

posted @   *sunflower*  阅读(65)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示