python--sys与os模块

前言

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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值