当前位置 : 主页 > 编程语言 > python >

【Python基础学习】第八节 os 模块详解

来源:互联网 收集:自由互联 发布时间:2022-10-26
Python基础学习之 os 模块详解 os模块的作用可以分为三类:路径操作,文件操作,其他操作; 1. 路径操作 1.1 os.chdir(),切换当前工作目录; os.chdir(r'D:\测试文件夹') # 将工作目录切换为:

Python基础学习之 os 模块详解

os模块的作用可以分为三类:路径操作,文件操作,其他操作;

1. 路径操作

1.1 os.chdir(),切换当前工作目录;

os.chdir(r'D:\测试文件夹') # 将工作目录切换为:D:\测试文件夹

1.2 os.getcwd(),返回工作目录路径;

print(os.getcwd()) # 输出:D:\PY_useful\3_python 基础,就是当前.py文件所在的位置; os.chdir(r'D:\测试文件夹') # 切换工作目录 print(os.getcwd()) # 返回当前程序所在的路径 输出:D:\测试文件夹;

1.3 os.mkdir() & os.makedirs(),创建目录;

os.mkdir() :创建目录,只可以一级一级的创建目录; os.makedirs() :创建多级目录,即前一级的文件夹不存在,也可以创建;

os.mkdir(r'D:\PY_useful\python建目录') # 创建目录,只可以一级一级的创建目录,前提是 D:\PY_useful\ 已经存在,不然会报错;作用是:可以防止创建双层或者多层错误路径; # 如果PY_useful 文件夹不存在,则会报错; os.makedirs(r'D:\PY_useful\python建目录\一级\二级') # 创建多级目录,即前一级的文件夹不存在,也不会报错;哪怕中间目录不存在也能正常的创建;

1.4 os.rmdir() & os.rmdirs(),删除目录;

os.rmdir()(r'D:\PY_useful\python建目录')# 删除目录 os.rmdirs(r'D:\PY_useful\python建目录\一级\二级') # 删除多级目录

1.5 os.listdir(path=...) ,返回指定文件夹下所有的文件和文件夹

使用 os.listdir(path=...) ,可以查看一层的内容;举例如下:

os.listdir(path=r'D:\测试文件夹') # ['一层文件.txt', '一层文件2.txt', '一层文件夹']

1.6 os.walk(path=...) ,遍历目录,返回一个元组 (root,dirs,files);

每次遍历的对象都是返回的是一个三元组(root,dirs,files),其中:

  • root 所指的是当前正在遍历的这个文件夹的本身的地址;
  • dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录);
  • files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录);
  • os.walk(path=...) 一般的用法如下:

    for root, dirs, files in os.walk(r'D:\测试文件夹'): print('当前文件夹:' + root) # 返回当前的文件夹地址; print('本层包含的文件夹:') for name in dirs: # 遍历文件夹中的文件夹; print(os.path.join(root, name)) # 利用os.path.join(root, name),返回一个完整的文件夹路径; print('本层包含的文件:') for name in files: # 遍历文件夹中的文件; print(os.path.join(root, name)) # 利用os.path.join(root, name),返回一个完整的文件路径; print('') # 循环一次则输出一个空行;方便区分;

    在这里插入图片描述

    本章内容中的文件夹结构;参考上图

    输出:

    当前文件夹:D:\测试文件夹 本层包含的文件夹: D:\测试文件夹\一层文件夹 本层包含的文件: D:\测试文件夹\一层文件.txt D:\测试文件夹\一层文件2.txt 当前文件夹:D:\测试文件夹\一层文件夹 本层包含的文件夹: D:\测试文件夹\一层文件夹\二层文件夹 D:\测试文件夹\一层文件夹\二层文件夹--2 本层包含的文件: D:\测试文件夹\一层文件夹\二层文件.txt D:\测试文件夹\一层文件夹\二层文件2.txt 当前文件夹:D:\测试文件夹\一层文件夹\二层文件夹 本层包含的文件夹: D:\测试文件夹\一层文件夹\二层文件夹\三层文件夹 本层包含的文件: D:\测试文件夹\一层文件夹\二层文件夹\三层文件.txt 当前文件夹:D:\测试文件夹\一层文件夹\二层文件夹\三层文件夹 本层包含的文件夹: 本层包含的文件: 当前文件夹:D:\测试文件夹\一层文件夹\二层文件夹--2 本层包含的文件夹: 本层包含的文件: D:\测试文件夹\一层文件夹\二层文件夹--2\三层文件----2.txt

    1.7 os.path.isdir(), 判断是否为目录;

    print(os.path.isdir('D:\测试文件夹\一层文件夹\二层文件夹')) # 是文件夹,则输出:True print(os.path.isdir('D:\测试文件夹\一层文件.txt')) # 不是文件夹,则输出:False

    1.8 os.path.isabs(path),判断是否为绝对路径;

    os.path.isabs('D:\测试文件夹\一层文件夹\二层文件夹') # 是绝对路径,则输出:True

    1.9 os.rename(src, dst),修改文件夹名称;

    其中:src – 要修改的目录名;dst – 修改后的目录名;举例如下:

    os.rename('D:\测试文件夹\一层文件夹','D:\测试文件夹\一层文件夹_改') # 执行语句后,文件夹名称变为:一层文件夹_改;

    在这里插入图片描述

    2. 文件操作

    2.1 os.remove(path) ,删除一个文件

    os.remove('D:\测试文件夹\一层文件.txt') # 删除文件;

    2.2 os.path.abspath(),返回文件的绝对路径

    2.3 os.path.join(),路径拼接;非常常用的函数,必须要熟练掌握;

    连接两个或更多的路径名组件,在前面的 1.6 中已经使用;注意以下三点:

  • 如果各组件名开头不包含’/’,则函数会自动加上;
  • 如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃;
  • 如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾; 举例如下:
  • a = os.path.join('D:\\','测试文件夹','一层文件2.txt') print(a) # D:\测试文件夹\一层文件2.txt a = os.path.join('D:\\','测试文件夹','') print(a) # D:\测试文件夹\ ,这里因为最后有一个空字符串,所以路径以’/’分隔符结尾

    2.4 os.path.dirname(path),去掉文件名,返回目录

    a = os.path.dirname('D:\测试文件夹\一层文件夹\二层文件夹--2\三层文件----2.txt') print(a) # 输出: D:\测试文件夹\一层文件夹\二层文件夹--2

    2.5 os.path.splitext(),将扩展名与前面的路径分开;返回元组类型;

    # os.path.splitext() a = os.path.splitext('D:\测试文件夹\一层文件夹\二层文件夹\三层文件.txt') print(a) # 输出元组:('D:\\测试文件夹\\一层文件夹\\二层文件夹\\三层文件', '.txt') print(a[0]) # 输出:D:\测试文件夹\一层文件夹\二层文件夹\三层文件 print(a[1]) # 输出:.txt

    2.6 os.path.basename(),返回文件名;

    a = os.path.basename('D:\测试文件夹\一层文件夹\二层文件夹\三层文件.txt') print(a) # 三层文件.txt

    2.7 os.path.exists(),检查字符串是不是路径;返回布尔类型;

    是路径,则返回True, 否则返回False;

    a = os.path.exists('D:\测试文件夹\一层文件夹\二层文件夹\三层文件.txt') print(a) # True

    2.8 os.path.isfile(),检查字符串是不是文件;返回布尔类型;

    # os.path.isfile() a = os.path.isfile('D:\测试文件夹\一层文件夹\二层文件夹\三层文件.txt') print(a)

    2.9 os.path.getsize(),返回文件大小;

    # os.path.getsize() a= os.path.getsize('D:\测试文件夹\一层文件夹\二层文件夹\三层文件.txt') print(a)

    2.10 os.open() & os.close(),文件读取和关闭;

    这里的两个方法,不常用;打开文件一般使用 open() 方法;

    os.open() # 用于文件读取; os.close() # 用于文件关闭;

    2.11 os.path.getatime() & os.path.getmtime() , 文件的最后存取时间 & 最后修改时间;

    import time a = os.path.getatime('D:\测试文件夹\一层文件夹\二层文件夹\三层文件.txt') # 返回path所指向的文件或者目录的最后存取时间,得到的是时间戳 print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(a))) # 将时间戳变为格式化字符串;输出:2020-09-25 11:06:21 a=os.path.getmtime('D:\测试文件夹\一层文件夹\二层文件夹\三层文件.txt') # 返回path所指向的文件或者目录的最后修改时间,得到的是时间戳 print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(a))) # 将时间戳变为格式化字符串;输出:2020-09-25 11:06:21

    上面时间戳变为可视化字符串的方法,可以参考:Python基础学习之时间模块 time模块 datetime模块

    3. 其他操作

    3.1 os.system(command) , 相当于执行对应指令(command)

    os.system(r'D:\print_fun.py') # 执行对应地址的.py 文件,在定期运行程序时,会经常用到这个方法;

    3.2 os.name,可以得到操作系统的类型;

    只有三个返回值,分别为:posix , nt , java, 对应linux / windows / java虚拟机

    os.name # 输出:nt;

    3.3 os.sep,可以得到操作系统特定的路径分隔符;

    Windows 系统分隔符为:\ ; Linux 系统分隔符为:/ ;当程序需要在不同系统运行时,通常会用到该属性;

    os.sep # 输出:\; 操作系统特定的路径分隔符,Linux 系统返回 /, Windows 返回 \;

    3.4 os.linesep,可以可到操作系统的行终止符;

    不同系统的终止符:Windows使用 '\r\n',Linux使用 '\n' , Mac使用 '\r' 。

    os.linesep # 字符串给出当前平台使用的行终止符。

    4. 实例

    4.1 固定时间运行程序

    每隔10分钟,运行一次程序;

    import time,os def sleep_time(hour,min,sec): return hour * 3600 + min * 30 +sec sleep = sleep_time(0,10,0) while True: time.sleep(sleep) print('开始执行;') print('现在时间为:' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(a))) os.system(r'D:\print_fun.py') print('执行完成;')

    每天早上 7:00 运行程序;

    import time, os while True: time_now = time.strftime("%H:%M", time.localtime()) if time_now == '07:00': print('开始执行;') print('现在时间为:' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) os.system(r'D:\print_fun.py') print('执行完成;') time.sleep(60) # 因为我们是以分钟作为匹配值的,所以程序运行后,延时60s,确保程序不重复执行;

    4.2 寻找文件中的特定字符

    寻找制定文件夹下(这里是:测试文件夹)下,Excel 文件内容包含字符串 '小可爱' 的文件,并打印出文件名 & sheet 名;

    在这里插入图片描述 备注:测试文件夹的目录见上图,其中两个excel 文件的sheet1 & sheet2 均写了字符串如下字符串,参考下图: 在这里插入图片描述 在这里插入图片描述

    import re import pandas as pd def func(folder_dir=r'',file_name=''): ''' :param folder_dir: 需要被寻找的文件夹路径 :param file_name: 被寻找的特殊字段,必须是xlsx文件 :return: 打印出特殊字段所在的文件路径 ''' xmlRegex = re.compile(r'.*?.(xlsx|xls)', re.I) # oldDocDir=folder_dir os.chdir(oldDocDir) for foldername, subfolders, filenames in os.walk(oldDocDir): for filename in filenames: # absdir = os.path.abspath('.') if xmlRegex.findall(str(filename)): try: oldName = os.path.join(foldername, filename) info = pd.read_excel(oldName, sheet_name=None) # sheet_name = None 则会读所有的sheet; for key,value in info.items(): if file_name in value.to_string(): print(file_name,'在文件:',oldName,end=' ') print('的',key,'中') except : print(oldName,'--> 这个文件我读不了呀~~请注意!') func(r'D:\测试文件夹',r'小可爱') # 调用函数,传入两个参数:需要寻找的目录 & 需要寻找的字符;

    输出: 我们可以看到,两个文件中的四个 '小可爱' 都被找到了;在日常工作中,这可以大大节省时间,提高工作效率;

    小可爱 在文件: D:\测试文件夹\一层文件夹\二层文件.xlsx 的: Sheet1 中 小可爱 在文件: D:\测试文件夹\一层文件夹\二层文件.xlsx 的: Sheet2 中 小可爱 在文件: D:\测试文件夹\一层文件夹\二层文件夹\三层文件夹\四层文件.xlsx 的: Sheet1 中 小可爱 在文件: D:\测试文件夹\一层文件夹\二层文件夹\三层文件夹\四层文件.xlsx 的: Sheet2 中
    上一篇:[报错] bash: setenv: command not found
    下一篇:没有了
    网友评论