Python-操作系统交互:os模块,shutil模块

0 前言

python提供了2个内置库os模块,shutil模块用于与操作系统交互

import os
import shutil

Python os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的

os模块不仅提供了新建文件、删除文件、查看文件属性的操作功能,还提供了对文件路径的操作功能。但是,对于移动、复制、打包、压缩、解压文件及文件夹等操作,os模块没有提供相关的函数,此时需要用到shutil模块

>>返回Python系列文章目录<<

1 os模块(内置库)

1.1 在py文件运行cmd/shell命令

os模块说明
os.system(shell)运行shell命令,阻塞运行,会出现cmd黑窗口
os.popen(shell)运行shell命令,非阻塞运行

os.system(shell):

  • 该函数返回命令执行结果的返回值,并不是返回命令的执行输出
  • system()函数在执行过程中进行了以下三步操作: 1.fork一个子进程; 2.在子进程中调用exec函数去执行命令; 3.在父进程中调用wait(阻塞)去等待子进程结束
import os

ret = os.system(r'dir D:\6_SoftwareTest\Pandas')
print('ret = %s' %(ret))

结果:ret=0表示正确执行,print()在cmd执行完后才会执行

驱动器 D 中的卷是 Data
 卷的序列号是 4CD3-8813

 D:\6_SoftwareTest\Pandas 的目录

2020/12/03  16:57    <DIR>          .
2020/12/03  16:57    <DIR>          ..
2020/12/18  09:53    <DIR>          .idea
2020/09/27  10:58             9,047 ConfigurationData.xlsx
2020/12/03  16:37               161 pandasTest.py
               2 个文件          9,208 字节
               3 个目录 298,292,543,488 可用字节
ret = 0

os.popen(shell):

  • 该函数返回新的管道,可以通过read()方法获得管道的执行结果
  • popen() 创建一个管道,通过fork一个子进程,然后该子进程执行命令。该管道用于父子进程间通信。父进程要么从管道读信息,要么向管道写信息,至于是读还是写取决于父进程调用popen时传递的参数(w或r,默认r)
import os

ret = os.popen(r'dir D:\6_SoftwareTest\Pandas').read()
print('ret = %s' %(ret))

结果:ret是cmd执行结果

ret =  驱动器 D 中的卷是 Data
 卷的序列号是 4CD3-8813

 D:\6_SoftwareTest\Pandas 的目录

2020/12/03  16:57    <DIR>          .
2020/12/03  16:57    <DIR>          ..
2020/12/18  09:53    <DIR>          .idea
2020/09/27  10:58             9,047 ConfigurationData.xlsx
2020/12/03  16:37               161 pandasTest.py
               2 个文件          9,208 字节
               3 个目录 298,292,543,488 可用字节

1.2 遍历文件和文件夹

os模块说明
os.popen('dir path')使用批处理命令
os.listdir(path) -> list of path of dir,file返回指定目录下的所有文件和目录名,返回列表
os.walk(path) -> Iter of tuple返回指定目录和子目录下的所有文件名,返回迭代器

批处理dir命令
推荐使用os.popen()直接调用批处理指令dir,批处理的功能已经非常完善
注意批处理返回的是纯文本

import os

ret = os.popen(r'dir /b /d /s D:\6_SoftwareTest\Pandas\*.xml').read()
print(ret)

结果:

D:\6_SoftwareTest\Pandas\.idea\misc.xml
D:\6_SoftwareTest\Pandas\.idea\modules.xml
D:\6_SoftwareTest\Pandas\.idea\workspace.xml
D:\6_SoftwareTest\Pandas\.idea\inspectionProfiles\profiles_settings.xml

os.walk(path)
os.walk()的返回值是一个生成器(generator),每次遍历的对象都是返回的是一个三元元组(root, dirs, files)

  • root所指的是当前正在遍历的这个文件夹的本身的地址
  • dirs 是一个list,内容是该文件夹中所有的目录的名字(不包括子目录)
  • files同样是 list , 内容是该文件夹中所有的文件(不包括子目录)

函数会自动改变root的值使得遍历所有的子文件夹。所以返回的三元元组的个数为所有子文件夹(包括子子文件夹,子子子文件夹等等)加上1(根文件夹)

import os

file_list = []
for root, dirs, files in os.walk(os.getcwd()):
    for file in files:
        file_list.append(os.path.join(root, file))
print(file_list)

结果为:

['F:\\SoftwareTest\\os\\osTest.py', 
'F:\\SoftwareTest\\os\\.idea\\misc.xml', 
'F:\\SoftwareTest\\os\\.idea\\modules.xml', 
'F:\\SoftwareTest\\os\\.idea\\os.iml', 
'F:\\SoftwareTest\\os\\.idea\\workspace.xml', 
'F:\\SoftwareTest\\os\\.idea\\inspectionProfiles\\profiles_settings.xml']

1.3 文件操作

os模块说明
os.startfile(path)打开文件或目录,相当于Window双击
os.remove(path)删除一个文件或文件夹
os.system('path')执行一个文件
os.popen('path')执行一个文件

注意:

os.startfile(notepad.exe)是Windows双击指令,让Windows创建一个子进程去打开文件,新文件和当前python脚本无关,互不干扰

os.system('notepad.exe')是阻塞运行cmd命令,主进程打开新的窗口,原窗口进入休眠状态,待新的窗口关闭,主进程再重新唤醒原窗口。当打开一个持续执行的文件时,原程序会被锁住,且有CMD黑窗口

os.popen('notepad.exe')是非阻塞运行cmd命令,主进程打开新的窗口,原窗口进入继续执行。注意,不能用在需要返回值的场合,因为原程序不会等返回值就会往下走

2 shutil模块(内置库)

2.1 文件操作

shutil模块说明
shutil.copy(src_file, dst_file)
shutil.copy(src_file, dst_dir)
如果目标是一个文件夹,那么它将在其中创建一个与源文件具有相同名称(基本名称)的新文件
shutil.move(src_file, dst_file)
shutil.move(src_file, dst_dir)
如果目标是一个文件夹,那么它将在其中创建一个与源文件具有相同名称(基本名称)的新文件

>>返回Python系列文章目录<<

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值