前言
sys和os模块是python基础中比较常用的模块,特别是os中很多有关文件和文件路径的方法,以下内容是一些常用的方法,和使用场景
一、sys模块
1、sys.path
用于打印当前执行解释器的环境变量,当我们导入某个模块不可用时,可以查看一下sys.path的内容,当前项目路径是否在sys.path里面,如果不在的话,可以通过sys.path.append方法或者是是sys.path.insert方法将当前项目路径添加到sys.path里面,建议使用insert方法将路径插入到index为0的位置,因为执行文件时,会优先从sys.path列表中的开始位置来查找路径
2、sys.agrv
用于将外部参数传入
例:通过python命令执行python文件时,python a.py --help,sys.argv[0]就是help
3、sys.platform
用于获取当前执行的操作系统平台
windows:win32
mac:darwin
linux:linux
一般当需要根据当前不同的执行环境来执行不同的代码时使用
4、sys.getdefaultencoding
一般在python2中用的比较多,获取当前编码,当不是utf-8的时候,使用setdefaultencoding来进行设置,python3中的默认编码就是utf-8
二、os模块
1、os.path模块,主要是针对文件路径的操作,有以下常用的方法
print('join:', os.path.join('e:', 'yiguilin', 'day1')) # 拼路径的,会自动根据不同的平台加上合适的路径分隔符,如果第一个参数是某盘根目录的话,不会加上\的符号
print('exists file:', os.path.exists('os模块.py')) # 判断目录/文件是否存在,判断文件是否存在的时,是直接先从当前目录下进行查找
print('exists dir:', os.path.exists('.\logs'))
print('dirname:', os.path.dirname(r'G:\yiguilin\day6')) # 获取传入参数路径中的父目录
print('当前目录的abspath:', os.path.abspath(__file__)) # 根据相对路径获取绝对路径,__file__是指当前文件
print('abspath:', os.path.abspath('os模块.py')) # 获取相对路径文件的绝对路径
print('abspath:', os.path.abspath(r'..\day4\a.txt')) # 获取相对路径文件的绝对路径
print('文件夹的abspath:', os.path.abspath(r'..\day4')) # 获取相对路径文件的绝对路径
print('split', os.path.split(r'G:\yiguilin\day6\os模块.py')) # 将路径中的路径和文件名分开
print('getsize', os.path.getsize(r'G:\yiguilin\day6\os模块.py')) # 获取文件大小,可以用来判断文件是否为空,基本单位是Kb
print('isdir', os.path.isdir(r'G:\yiguilin\day6\os模块.py')) # 判断路径是不是文件夹
print('isfile', os.path.isfile(r'G:\yiguilin\day6\os模块.py')) # 判断路径是不是文件
print('getmtime', os.path.getmtime(r'G:\yiguilin\day6\os模块.py')) # 获取文件最后的修改时间
print('getatime', os.path.getatime(r'G:\yiguilin\day6\os模块.py')) # 获取文件最后一次访问时间
print('getctime', os.path.getctime(r'G:\yiguilin\day6\os模块.py')) # 获取文件的创建时间
2、os模块中其他常用方法
os.mkdir('test') # 创建单层文件夹
os.makedirs(r'test1\test') # 创建多层文件夹
os.rmdir('test') # 删除文件夹,且该文件夹为空
os.removedirs(r'test1\test') # 删除多层文件夹,且该文件夹为空
os.remove('c.txt') # 删除文件,不能删除文件夹,注意,删除的内容在回收站是不存在的
os.rename('a.txt', 'b.txt') # 修改文件或文件夹的名称
print('listdir', os.listdir('.')) # 获取某个目录下的文件和文件夹列表
os.chdir('') # 切换目录
os.getcwd() # 获取当前执行目录
os.system('ipconfig') # 执行操作系统命令,不会返回执行结果
print('popen:', os.popen('ipconfig').read()) # 执行操作系统命令,可以拿到执行结果
三、使用场景
1、查看某个目的下是否有MP4文件
思路: 找出该目录下以及所有子目录下的文件,判断是否以.mp4结尾
(1)使用递归
注意: 定义file_path的时候,一定要定义为全局变量,要不然返回的是最后一个目录的内容
def find_target_file(start_paths):
global file_path
file_path =[]
dirs = os.listdir(start_paths) #获取当前目录下的内容
for dir in dirs:
current_path = os.path.join(start_paths, dir) #将当前目录与子目录拼接为完整的路径
if os.path.isdir(current_path): #判断完整路径是否是文件夹
find_target_file(current_path) #是文件夹的话,进行递归循环
elif os.path.isfile(current_path): #判断当前路径是否是文件
if dir.endswith('.py'): #是文件的话,判断文件名是否以关键词结果
file_path.append(current_path) #如果是,将完整路径添加到file_path中
return file_path
start_paths = 'E:\yiguilin'
print('file_path:',find_target_file(start_paths))
(2)使用os.walk()函数 ,os.walk()是比较好用的,可以自动循环遍历查找目录和子目录下的内容,而且可以输出当前目录、当前目录下的子文件夹列表以及当前目下的文件列表
import os
keyword = '.mp4'
file_path = []
for cur_dir,dirs,files in os.walk('c:'): #循环目录,输出文件夹列表和文件列表
for file in files:
if file.endswith(keyword): #循环文件,查看文件名称是否以关键字结尾
file_path.append(os.path.join(cur_dir,file)) #符合条件的文件,使用join函数将当前路径和文件名称拼接为完整的路径存放在list中
print(file_path)