首页 > 编程语言 >Python之的sys、os、subprocess、shutil 模块

Python之的sys、os、subprocess、shutil 模块

时间:2023-12-07 23:12:50浏览次数:34  
标签:Python res subprocess sys print path shutil os

一、sys模块 

sys模块是与python解释器交互的一个接口

1、sys.argv() 

在Python中,sys.argv是一个列表,它包含了命令行参数传递给Python脚本的参数值。

sys.argv列表的第一个元素是脚本的名称,后面的元素是传递给脚本的参数。

import sys
 
# 打印脚本名称
print("脚本名称:", sys.argv[0])
 
# 打印传递给脚本的参数值
print("参数值:", sys.argv[1:])
 
# 检查是否传递了足够的参数
if len(sys.argv) < 2:
    print("请提供至少一个参数")
    sys.exit(1)
 
# 使用传递给脚本的参数进行操作
for arg in sys.argv[1:]:
    print("处理参数:", arg)
    # 在这里执行你的操作

 

2、其他

sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1) sys.version 获取Python解释程序的版本信息 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称

二、os 模块

os模块是与操作系统交互的一个接口

1、目录、文件的创建与删除

创建多层递归目录

os.makedirs('day24/day25')

 

生成单级目录;相当于shell中mkdir dirname

os.mkdir('aa')

 

递归删除空目录

os.removedirs('dirname1')

 

删除单级空目录,若目录不为空则无法删除

os.rmdir('dirname')

 

os.listdir

列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

删除一个文件

os.remove('a.txt')

shutil模块

shutil.rmtree

删除指定目录文件夹下所有内容

import os
import shutil
 
def delete_directory(path):
    shutil.rmtree(path)
 
# 使用示例
directory_path = '/Users/sanpangdan/Desktop/python_fullstack/test'
delete_directory(directory_path)

重命名文件/目录

os.rename("oldname","newname") 

2、获取文件/目录信息

os.stat

res = os.stat('/Users/sanpangdan/Desktop/python_fullstack/day16.py')
print(res)
 
os.stat_result(st_mode=33188, st_ino=17327596, st_dev=16777229, st_nlink=1, st_uid=501, st_gid=20, st_size=140, st_atime=1686377085, st_mtime=1686377084, st_ctime=1686377084)

 

os.stat('path/filename') 获取文件/目录信息 的结构说明

stat 结构:
 
st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

3、 改变当前脚本工作目录;相当于shell下cd

os.chdir("dirname")

4、获取当前工作目录,即当前python脚本工作的目录路径

os.getcwd()

5、运行shell命令,获取执行结果

os.popen(bash command).read())

os.popen() 函数在 Python 3 中被废弃,推荐使用 subprocess 模块来执行外部命令。

6、运行shell命令,直接显示

os.system("bash command")

 

7、路径相关的

os.path 模块提供了一组用于处理文件路径和文件名的函数。它可以让你在不同的操作系统上以一致的方式操作路径,无论是 Windows、Linux 还是 macOS。

返回文件的绝对路径 

os.path.abspath()

res = os.path.abspath('day23.py')
print(res)
# /Users/sanpangdan/Desktop/python_fullstack/day23/day23.py

 

将path分割成目录和文件名二元组返回

os.path.split()

res = os.path.split('/Users/sanpangdan/Desktop/python_fullstack/day23/day23.py')
print(res)
# ('/Users/sanpangdan/Desktop/python_fullstack/day23', 'day23.py')

 

返回path的目录

os.path.dirname()

res = os.path.dirname('/Users/sanpangdan/Desktop/python_fullstack/day23/day23.py') 
print(res)
 
# /Users/sanpangdan/Desktop/python_fullstack/day23

返回path最后的文件名

res = os.path.basename('/Users/sanpangdan/Desktop/python_fullstack/day23/day23.py')
print(res)  # day23.py

 

判断路径存不存在,存在为True

os.path.exists() 

res = os.path.exists('/Users/sanpangdan/Desktop/python_fullstack/day23/day23.py')
print(res) # True

 

如果path是绝对路径,返回True

os.path.isabs()

res = os.path.isabs('/Users/sanpangdan/Desktop/python_fullstack/day23/day23.py')
print(res) # True

 

如果path是一个存在的文件,返回True。否则返回False

os.path.isfile()

os.path.isdir()

res = os.path.isfile('day23.py')
 
# os.path.isdir(path)
 
print(res) #True

 

路径拼接

os.path.join()

是 os.path 模块中的一个函数,用于将多个路径组合成一个完整的路径。它会根据操作系统的不同自动选择合适的路径分隔符。

path = os.path.join('/Users/sanpangdan', 'Desktop/python_fullstack', 'day19.py')
print(path) # /Users/sanpangdan/Desktop/python_fullstack/day19.py

 

获取文件的三个时间 

访问、创建、修改时间

os.path.getmtime()
os.path.getatime()
os.path.getctime()

查看文件的大小

os.path.getsize()

res = os.path.getsize('day23.py')
print(res)

8、os.walk()  遍历一个目录及其子目录中的所有文件和文件夹

os.walk() 是一个函数,用于遍历一个目录及其子目录中的所有文件和文件夹。它返回一个生成器对象,该对象产生三元组 (dirpath, dirnames, filenames),其中:

  • dirpath:当前正在遍历的目录的路径字符串。
  • dirnames:当前目录下的子目录名称列表。
  • filenames:当前目录下的文件名称列表。

os.walk() 可以让你方便地递归遍历目录结构,处理每个目录和文件的操作。下面是一个基本的使用示例:

import os
 
# 遍历目录及其子目录中的文件和文件夹
for dirpath, dirnames, filenames  in os.walk('path/to/directory'):
    # 处理当前目录
    print('当前目录:', dirpath)
     
    # 处理子目录
    print('子目录:', dirnames)
     
    # 处理文件
    print('文件:', filenames)

 

 需要注意的是,os.walk() 是一个递归遍历的函数,会遍历指定目录及其所有子目录中的文件和文件夹。如果目录结构非常大或文件数量非常多,可能会导致遍历时间较长。

三、subprocess

subprocess 模块是 Python 中执行外部命令的首选方式。它提供了更强大和灵活的功能,能够处理输入、输出、错误处理和其他操作。

1、subprocess.check_output() 函数执行指定的命令,并将输出作为字节流返回。

我们可以使用 .decode() 方法将字节流转换为字符串。

import subprocess
 
# 执行命令并获取输出
output = subprocess.check_output("command", shell=True)
 
# 打印输出结果
print(output.decode())

 

2、执行命令并获取输出,逐行处理

import subprocess
 
# 执行命令并逐行获取输出
process = subprocess.Popen("command", stdout=subprocess.PIPE, shell=True)
for line  in  process.stdout:
    print(line.decode().strip())

subprocess.Popen() 函数创建一个子进程来执行指定的命令,并将输出管道连接到主进程。我们可以通过迭代 process.stdout 来逐行获取输出。

3、执行命令并获取返回值

import subprocess
 
# 执行命令并获取返回值
return_code = subprocess.call("command", shell=True)
 
# 打印返回值
print(return_code)

 

subprocess.call() 函数执行指定的命令,并等待命令执行完毕。返回值是命令的退出状态码。

4、处理输入和输出(下面两种方式都可以)

import subprocess
-----------------------------------------------------------------------------
# 处理输入和输出
process = subprocess.Popen(["command"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
output, error = process.communicate(input="input_data".encode())
 
# 打印输出结果和错误信息
print(output.decode())
print(error.decode())
 
-----------------------------------------------------------------------------
res=subprocess.Popen('ipconfig', shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
 
print("stdout:", res.stdout.read().decode('gbk'))
print("stderr:", res.stderr.read().decode('gbk'))
 
Windows内部默认的编码是GBK
-----------------------------------------------------------------------------

 

在这个例子中,subprocess.Popen() 函数创建一个子进程来执行指定的命令,并将输入和输出管道连接到主进程。我们使用 process.communicate() 方法将输入数据传递给命令,并获取输出结果和错误信息。

四、shutil

提供了许多文件和目录操作的高级函数。它可以用于复制、移动、重命名、删除文件和目录等操作。

1、复制文件或目录:shutil.copy()shutil.copy2()shutil.copyfile()shutil.copytree()

import shutil
 
# 复制文件
shutil.copy('source_file.txt', 'target_directory/')
 
# 复制文件,保留元数据(如权限、时间戳等)
shutil.copy2('source_file.txt', 'target_directory/')
 
# 复制文件内容(不包括元数据)
shutil.copyfile('source_file.txt', 'target_file.txt')
 
# 复制目录及其内容
shutil.copytree('source_directory/', 'target_directory/')

 

2、移动文件或目录:shutil.move()

import shutil
 
# 移动文件
shutil.move('source_file.txt', 'target_directory/')
 
# 移动目录
shutil.move('source_directory/', 'target_directory/')

 

3、删除文件或目录:shutil.rmtree()

import shutil
 
# 删除文件
os.remove('file.txt')
 
# 删除空目录
os.rmdir('empty_directory/')
 
# 删除目录及其内容(包括子目录和文件)
shutil.rmtree('directory/')

 

4、重命名文件或目录:shutil.move()

import shutil
 
# 重命名文件
shutil.move('old_name.txt', 'new_name.txt')
 
# 重命名目录
shutil.move('old_directory/', 'new_directory/')

 

注意:在使用这些函数之前,请确保目标路径已经存在,并且对于移动、复制等操作,请确保有足够的权限。

5、归档和压缩文件的操作

shutil.make_archive()
 
shutil.unpack_archive()

 

标签:Python,res,subprocess,sys,print,path,shutil,os
From: https://www.cnblogs.com/Jessica-Jmm/p/17884208.html

相关文章

  • python第五次学习笔记
    1.调试: 调试(debugging)是暂停正在运行的程序,并解决程序中出现的问题的过程。调试Python程序非常简单,Python调试器会设置条件断点,并一次执行一行代码。接下来我们将使用Python标准库中的pdb模块调试Python程序。2.调试技术: 我们可以使用多种方法调试Python程序,以下是调试......
  • Python的json序列化模块
    一、jsonJson模块提供了四个功能:dumps、dump、loads、load1、前景什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。序列化的目的以某种存储形式使自定义对象持久化;将对象从一个地方传递到另一个地方。使程序更具维护性在Python中,能够......
  • python的异步迭代器含义
    python的异步迭代器什么意思?什么是迭代器:迭代器是一种遵循迭代器协议的对象,可以被用在像for循环这样的迭代环境中。迭代器协议包含两个方法:__iter__():返回迭代器自身。__next__():返回迭代器的下一个元素。如果没有更多元素,则抛出StopIteration异常。就是这两个方法要包......
  • python-文件IO操作实例
    一、如何复制文件1、使用shutil模块来复制importshutil#导入shutil模块#定义源文件和目的文件的路径#图片src_path="E:/python/py/基础篇/01_基础/06_文件操作/图片.jpg"dst_path="D:/图片.jpg"#文本src1_path="E:/python/py/基础篇/01_基础/06_文件操作/......
  • 聪明办法学Python 选学02
    聪明办法学Python学习笔记调试Debug1.如何进行Python程序调试,包括调试理论和常用模块与库的使用调试的必要性在于程序可能出现不符合预期结果的情况调试的困难在于bug的触发原因多种多样,只能看到最终结果2.调试代码的基本思路和方法,包括利用print和断言来解决简单......
  • Python-xlrd读取Excel指定列a~b行数据并绘图
    importxlrd#读取Excel文件wb=xlrd.open_workbook(r"E:\PythonStudyAll\TestD20231130\1111.xlsx")data=wb.sheet_by_name('Sheet1')#定义要读取的列和行范围column_index_x=0#第一列的索引为0column_index_y=1#第一列的索引为0start_row=2#起始行索......
  • 聪明办法学python最后一集
    聪明办法学python最后一集关于程序员如何进行debug首先编程哲学机器永远是对的可以使用print进行一部分的实验(这也算是我经常使用的方法)断点调试就是从上向下执行时进行的判断bug位置断点这个地方,主要分为两步:「找断点」和「打断点」。找断点,就是你想调试的代码块的......
  • 【Python】【OpenCV】检测直线和圆
     重新理解一下Canny方法:参数:image:输入的图像。threshold1:第一个阈值,用于检测边缘的强度梯度的下限。threshold2:第二个阈值,用于检测边缘的强度梯度的上限。apertureSize:Sobel算子的大小,可选值为3、5、7,默认值为3。L2gradient:一个布尔值,指示是否使用更精确的L2范数计算梯度......
  • 聪明办法学python第5次笔记打卡
    Debugging关于debug的方法1.使用print语句打印变量的值2.使用assert语句判断程序的错误3.使用pdb模块,(Python的调试器)可以在程序中设置断点,单步调试4.使用IDE的内置调试器5.向人工智能求助常见错误1.缩进错误切忌tab和空格混用2.语法错误3.命令错误使用了未定义的函......
  • 聊聊如何为python程序 debug
    开始调试之前摆正心态一、调理论的简单介绍1、调试理论“软件”的两层含义·人类需求在信息世界的投影    理解错需求→bug·计算过程的精确(数学)描述     实现错误→bug2、调试困难的根本原因因为bug的触发经历了漫长的过程·需求→设计→代码(状态机)→F......