Python模块:os + sys + argparse + shutil 简记

 os + sys

# -*- coding:utf8 -*-
"""
# editor: hjjdreamer
# create-time: 2022/12/4-9:12
# Python-Script: chapter9-2-module-os+sys.py
# describe: https://docs.python.org/zh-cn/3.8/library/os.html
"""
import os

"""
os package function
与操作系统有关
系统 ==> 变量 + 操作
文件 + 目录 ==> 操作
命令执行 ==> 可以跨操作系统操作,支持 Linux + window 不同平台
进程管理
"""

# 系统相关内容查询
print(f"os = {os.name}")
print(f"env = {os.environ}")
print(f"file and dir sep = {os.sep}")
print(f"环境变量分隔符 = {os.pathsep}")
print(f"文件的换行分隔符 = {os.linesep} ('\\r\\n')")

# 文件+目录操作
# 创建文件夹
# 要创建的目录,可以是相对或者绝对路径,默认是当前文件夹
# os.mkdir("std_demo")

# 删除目录
# os.rmdir("std_demo")

# 创建多级目录
# os.makedirs("./std_demo/1/1.1/1.1.1")
# 删除多级目录
# os.removedirs("./std_demo/1/1.1/1.1.1")

# 查看目录状态
# os.stat("./std_demo")

"""
获取当前文件路径
os.path
"""
print(f"当前目录绝对路径 == {os.getcwd()}")    # 当前目录绝对路径 == E:\*****\python\ithelma
file1 = os.path.basename(__file__)
print(f"{file1}")                           # chapter9-2-module-os+sys.py
file2 = os.getcwd() + file1
print(f"{file2}")                           # E:\****\python\ithelmachapter9-2-module-os+sys+argpass.py
print(os.path.split(file2))                 # ('E:\\****\\python', 'ithelmachapter9-2-module-os+sys+argpass.py')

# 判断绝对路径
print(os.path.isabs(file1))                 # False
print(os.path.isabs(file2))                 # True

"""
判断文件是否存在
os.path.exists(file_name)
"""
print(f"chapter9-2-module-os+sys.py is exist ? == {os.path.exists(file1)}.")


# 执行命令
# 本脚本调用相应路径下的其他脚本
os.system("my_module1.py")


import os
# pwd
print(os.getcwd())
# ls -a
# 返回文件列表
# os.listdir("目标路径")
print(os.listdir())


# 创建目录
"""
os.mkdir("") 没办法连续创建 mkdir
os.mkdirs     连续创建目录 mkdir -p
"""

# 切换目录
"""
os.chdir("/tmp/abc")
"""

"""
os.remove("file") 只能删除文件不能删除目录
建议使用shutil.rmtree()
"""

"""
创建软链接
os.symlink("原来链接", "软连接")
取消软链接
os.unlink()
"""

"""
os.path.basename() 
获取文件名
"""


"""
os.path.dirname() 
获取路径名
"""

"""
os.path.join("/etc/selinux", "config")
路径拼接
"""

"""
os.path.exists("路径") 判断是否存在
"""




"""
sys
针对python解析器相关的变量和方法
与程序执行有关
https://docs.python.org/zh-cn/3.8/library/sys.html
"""
import sys

# 获取版本
print(f"python version = {sys.version}")

# 获取PYTHON文件的路径,返回列表
print(sys.path)

# 获取运行平台
print(sys.platform)

# 获取版本信息
print(sys.copyright)

# 默认的编码方式
print(sys.getdefaultencoding())

# 文件系统的默认编码方式
print(sys.getfilesystemencoding())

# 获取循环限制次数
print(sys.getrecursionlimit())      # default == 1000
# 假如程序运行 1000 次都没有结束(死循环),则会报错
sys.setrecursionlimit(1500)
print(sys.getrecursionlimit())
sys.setrecursionlimit(1000)
print(sys.getrecursionlimit())

# 退出返回状态码,默认是0
# sys.exit(1)     # Process finished with exit code 1


"""
sys.argv
"""
# 参数将会以列表的形式传入程序
# PS E:\******\python\ithelma> python ./chapter9-2-module-os+sys.py 78
# 9 adad qeqw
# sys.argv == ['./chapter9-2-module-os+sys.py', '789', 'adad', 'qeqw']
# 所有命令行参数以空格为分隔符,都保存在了sys.argv列表中。其中第1个为脚本的文件名。

"""
选项的写法要求
  对于短格式:
        "-"号后面要紧跟一个选项字母。
        如果还有此选项的附加参数,可以用空格分开,也可以不分开。
        长度任意,可以用引号。
        example:
            -o
            -oa
            -obbbb
            -o bbbb
            -o "a b"
    对于长格式:
        "--"号后面要跟一个单词。
        如果还有些选项的附加参数,后面要紧跟"=",再加上参数。
        "="号前后不能有空格。
        example:
            --help=file1
"""


# 参数获取
# print(f"sys.argv == {sys.argv}")
# sys.argv == ['E:/******/python/ithelma/chapter9-2-module-os+sys.py']
# argv[0] == 脚本本身文件

def show_argv_func():
    print(f"sys.argv == {sys.argv}")
    print(f"parameters list == {sys.argv[1:]}")
    print(f"str == {sys.argv[1]}")
    print(f"int == {sys.argv[2]}")
    print(f"float == {sys.argv[3]}")
    print("----------------------------------")


def show_argv_func2(str2, int2, float2):
    print(f"str == {str2}")
    print(f"int == {int2}")
    print(f"float == {float2}")


if __name__ == "__main__":
    show_argv_func()
    # Process finished with exit code 1 ==> 没有传参直接ctrl+shift+F10会报错
    # Traceback(most recent call last):
    # File "E:/*****/python/ithelma/chapter9-2-module-os+sys.py", line159, in < module >
    #     show_argv_func()
    # File "E:/*****/python/ithelma/chapter9-2-module-os+sys.py", line144, in show_argv_func
    #     print(f"str == {sys.argv[1]}")
    # IndexError: list index out of range


    show_argv_func2("dasasdf", 123456, 543.213)


# PS E:\******\python\ithelma> python ./chapter9-2-module-os+sys.py sd 123 123.645
# sys.argv == ['./chapter9-2-module-os+sys.py', 'sd', '123', '123.645']
# parameters list == ['sd', '123', '123.645']
# str == sd
# int == 123
# float == 123.645

# PS E:\*****\python\ithelma> python ./chapter9-2-module-os+sys.py sd 123 123.645
# ...
# sys.argv == ['./chapter9-2-module-os+sys.py', 'sd', '123', '123.645']
# parameters list == ['sd', '123', '123.645']
# str == sd
# int == 123
# float == 123.645
# ----------------------------------
# sys.argv == ['./chapter9-2-module-os+sys.py', 'sd', '123', '123.645']
# parameters list == ['sd', '123', '123.645']
# str == dasasdf
# int == 123456
# float == 543.213

argparse

# -*- coding:utf8 -*-
"""
# editor: hjjdreamer
# create-time: 2022/12/4-13:05
# Python-Script: chapter9-3-modular-argparse.py
# describe:
作用:
argparse 是 Python 内置的一个用于命令项选项与参数解析的模块
通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息

argparse优点
方便读取命令行参数
参数与代码分离,方便测试
自动生成帮助文档
https://docs.python.org/zh-cn/3.8/howto/argparse.html
https://www.bilibili.com/video/BV1U4411j7xb/?from=search&seid=13385348553890569010&vd_source=19d68c51d074de183fd2e6b1b1cb0a9b
https://www.jianshu.com/p/ea52fdfaa4ad
https://blog.csdn.net/qq_36653505/article/details/83788460
https://blog.csdn.net/qq_41731861/article/details/120827681?spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-13-120827681-blog-125710450.pc_relevant_landingrelevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-13-120827681-blog-125710450.pc_relevant_landingrelevant&utm_relevant_index=21
"""

"""
#(1)首先导入模块                          == import argparse
#(2)创建一个解析对象                       == parser = argparse.ArgumentParser() 
#(3)向该对象中添加你要关注的命令行参数和选项   == parser.add_argument() 
#(4)进行解析                              == parser.parse_args() 
"""

import math
import argparse


def parse_args():
    """
    # 获取一系列变量
    :return: args
    """
    # 初始化解析对象
    parse1 = argparse.ArgumentParser(description="Calculate cylinder volume")
    # description: 函数描述干什么事情

    # 添加参数
    """
    -
    --
    default=""
    """
    parse1.add_argument('-r', '--radius', default=2, type=int, help='Radius of Cylinder')  # 半径
    # 在参数名前加 --,设置为可选参数。如果未输入,则使用default默认值(若未设置default,则会默认赋值None)
    # 通过将可选参数设置引用名,可以缩短参数名-r,简化命令行参数输入。

    """
    type
    help
    """
    parse1.add_argument('height', metavar="", type=int, help='height of Cylinder')  # 高
    # 通过设置required=True后,无论参数是否是可选参数,都必须输入。

    # args进行解析,获取对象
    args1 = parse1.parse_args()     # 这里定义了接口
    return args1


def cal_vol(radius, height):
    """
    # 计算出圆柱体的体积
    :param radius: parse1.add_argument == radius
    :param height: parse1.add_argument == height
    :return: vol
    """
    vol = math.pi * pow(radius, 2) * height
    # vol = math.pi * (radius ** 2) * height
    return vol


if __name__ == "__main__":
    args1 = parse_args()
    print(cal_vol(args1.radius, args1.height))      # 接口名叫args1
    # 5、使用解析对象.参数获取使用命令行参数
    # 默认命令-h可以获取添加参数时设置的帮助信息

sys + format 的使用方法

# -*- coding:utf8 -*-
import sys

def main(args):
    param_list = args[1].split("~")

    country = param_list[0]
    custom_db = param_list[1]
    cdm_db = param_list[2]

    country_1 = param_list[3]
    custom_db_1 = param_list[4]
    cdm_db_1 = param_list[5]

    # 第一种系统变量传参方式
    print(f"country = {country} custom_db = {custom_db} cdm_db = {cdm_db}")
    # country = cn custom_db = abc_db cdm_db = def_db


    # 第二种系统变量传参方式
    param_list1 = {"country_1": country_1, "custom_db_1": custom_db_1, "cdm_db_1": cdm_db_1}

    print(f"{country_1}\n{custom_db_1}\n{cdm_db_1}".format(**param_list1))
    # hk
    # hk_db_1
    # hk_db-2

if __name__ == "__main__":
    main(sys.argv)

 Pycharm 系统变量配置

shutil

# -*- coding:utf8 -*-
"""
# editor: hjjdreamer
# create-time: 2023/4/20-9:42
# Python-Script: 32_module_shutil.py
# describe:
通过python 执行 shell
sh + util
主要针对 copy + delete + mv + 压缩等
对os的补充
"""
"""
obj 文件管家
复制操作
shutil.copyfileobj(源文件, 目标文件)
"""
import shutil

fr = open(r"./write_file.txt",mode="r")
fw = open(r"./write_file_shutil.txt",mode="w")
shutil.copyfileobj(fr, fw)
fr.close()
fw.close()

"""
复制非文本数据
shutil.copyfile("源文件路径", "目标文件路径")
内容可以复制但是权限无法复制
"""
shutil.copyfile(r"./write_file.txt", r"./write_file_1.txt")

"""
shutil.copy("源文件路径", "目标文件路径")
文件内容和权限都可以复制
建议主要使用
"""
shutil.copy(r"./write_file.txt", r"./write_file_2.txt")

"""
重命名文件
shutil.move("源文件路径", "目标文件路径")
类似于
mv /opt/myls  /opt/myls3
"""
shutil.move(r"./write_file_shutil.txt", r"./write_file_shutil_3.txt")


"""
复制目录
不能创建目录
shutil.copytree("源文件路径", "目标文件路径")
"""

# 目标文件路径必须不存在
# shutil.copytree(r"/etc/security", "/opt/security")

"""
空目录和非空目录都可删除
shutil.rmtree(r"/opt/security")
"""


# 权限操作
"""
只复制文件权限
shutil.copymode("源文件路径", "目标文件路径")
chmod
"""

# 属主 和 属组 操作
"""
shutil.chown("文件路径", user=xxx, group=xxx)
"""

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值