Python基础学习之 os 模块详解

文章目录

  • Python基础学习之 os 模块详解
    • 1. 路径操作
      • 1.1 os.chdir(),切换当前工作目录;
      • 1.2 os.getcwd(),返回工作目录路径;
      • 1.3 os.mkdir() & os.makedirs(),创建目录;
      • 1.4 os.rmdir() & os.rmdirs(),删除目录;
      • 1.5 os.listdir(path=...) ,返回指定文件夹下所有的文件和文件夹
      • 1.6 os.walk(path=...) ,遍历目录,返回一个元组 (root,dirs,files);
      • 1.7 os.path.isdir(), 判断是否为目录;
      • 1.8 os.path.isabs(path),判断是否为绝对路径;
      • 1.9 os.rename(src, dst),修改文件夹名称;
    • 2. 文件操作
      • 2.1 os.remove(path) ,删除一个文件
      • 2.2 os.path.abspath(),返回文件的绝对路径
      • 2.3 os.path.join(),路径拼接;非常常用的函数,必须要熟练掌握;
      • 2.4 os.path.dirname(path),去掉文件名,返回目录
      • 2.5 os.path.splitext(),将扩展名与前面的路径分开;返回元组类型;
      • 2.6 os.path.basename(),返回文件名;
      • 2.7 os.path.exists(),检查字符串是不是路径;返回布尔类型;
      • 2.8 os.path.isfile(),检查字符串是不是文件;返回布尔类型;
      • 2.9 os.path.getsize(),返回文件大小;
      • 2.10 os.open() & os.close(),文件读取和关闭;
      • 2.11 os.path.getatime() & os.path.getmtime() , 文件的最后存取时间 & 最后修改时间;
    • 3. 其他操作
      • 3.1 os.system(command) , 相当于执行对应指令(command)
      • 3.2 os.name,可以得到操作系统的类型;
      • 3.3 os.sep,可以得到操作系统特定的路径分隔符;
      • 3.4 os.linesep,可以可到操作系统的行终止符;
    • 4. 实例
      • 4.1 固定时间运行程序
      • 4.2 寻找文件中的特定字符

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),其中:

  1. root 所指的是当前正在遍历的这个文件夹的本身的地址;
  2. dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录);
  3. 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 中已经使用;注意以下三点:

  1. 如果各组件名开头不包含’/’,则函数会自动加上;
  2. 如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃;
  3. 如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾;
    举例如下:
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:21a=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,osdef sleep_time(hour,min,sec):return hour * 3600 + min * 30 +secsleep = 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, oswhile 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 pddef func(folder_dir=r'',file_name=''):''':param folder_dir: 需要被寻找的文件夹路径:param file_name: 被寻找的特殊字段,必须是xlsx文件:return: 打印出特殊字段所在的文件路径'''xmlRegex = re.compile(r'.*?.(xlsx|xls)', re.I)  #oldDocDir=folder_diros.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 中

Python基础学习之 os 模块详解相关推荐

  1. Python 标准库之 sys 模块详解

    Python sys 模块详解 1. 简介 "sys"即"system","系统"之意.该模块提供了一些接口,用于访问 Python 解释器 ...

  2. python常用内置模块-Python常用内置模块之xml模块(详解)

    xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.从结构上,很像HTML超文本标记语言.但他们被设计的目的是不同的,超文本标记语言被设计用来显示 ...

  3. Python基础------几种循环结构详解

    Python基础------几种循环结构详解 在所有的编程语言中,循环结构是必不可少了,Python也一样.在python主要有一下几种循环结构:for-in-.while.range()三种最为常见 ...

  4. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

  5. Python os 模块详解

    你好,我是悦创. 此篇文章,是为了完善 Python 办公自动化的课程,有兴趣的报名一对一办公自动化的小伙伴,可以加 V:Jiabcdefh. 如果我们要操作文件.目录,可以在命令行下面输入操作系统提 ...

  6. Python模块——os模块详解

    本文大纲 os模块是Python中整理文件和目录最为常用的模块,该模块提供了非常丰富的方法用来处理文件和目录.本着只讲最有用的态度,下方我将os模块中一些我经常用的的方法,给大家详细列举出来了,希望减 ...

  7. python os模块详细_python之os模块详解

    importos#os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径#print(os.getcwd()) # G:\python二期\一月\day18 #os.curdi ...

  8. python中os模块详解_Python OS模块(常见文件操作示例)

    1 Python 常见文件操作示例 2. 3. os.path 模块中的路径名访问函数 4. 分隔 5. basename() 去掉目录路径 , 返回文件名 6. dirname() 去掉文件名 , ...

  9. 12.19 Python os模块详解

    除前面章节介绍的各种函数之外,os 模块还提供了大量操作文件和目录的函数,本节将介绍 os 模块下常用的函数. 如果读者需要查阅有关这些函数的说明,则可访问 https://docs.python.o ...

最新文章

  1. go 调用dll char*传输
  2. 纯CSS实现漂亮圆角阴影边框
  3. matlab集群搭建问题
  4. nexus3下载地址
  5. 用python编写daemon监控进程并自动恢复(附Shell版)
  6. 禁止ASP.NET MVC模型绑定时将空字符串绑定为null
  7. 支付宝公布“五一”出境游报告:国人太能花钱了
  8. 作业四:灯泡异常问题
  9. 缓存淘汰策略——最近最久未使用策略(LRU)
  10. mariadb安装_MariaDB CentOS 安装的时候如何确定 Repo 地址
  11. UnityShader11:纹理属性
  12. RegeX版本更新至2.0.0.4 加入英文语言包
  13. java,python,scala发送http请求
  14. c串口一直读到缓存数据_STM32CubeMX之串口不定长数据接收(接收中断+空闲中断)...
  15. 双向晶闸管触发电路工作原理图
  16. IMETool 输入法设置工具 十问十答
  17. Linux之进程管理——查看进程
  18. chrome不跟随系统分辨率
  19. 工程经济作业1答案_2018年电大《工程经济与管理》阶段作业1及答案(网上作业).doc...
  20. 引流的最快方法是什么?我是如何实现长期被动引流的

热门文章

  1. java异常排列方式_java中排序报:Comparison method violates its general contract异常的解决...
  2. 华为美女小姐姐,被外派墨西哥后,发生的事...
  3. Python数据分析师薪资大赏(内附学习资料)
  4. Visual Studio Code + SDCC开发51单片机 1 - 环境安装
  5. 怎么看计算机硬件配置情况,怎么样查看电脑配置?5种方法查看电脑硬件配置好坏图文详解...
  6. Pytorch学习之cuda
  7. 调查显示,“大辞职潮”对经理层打击最为严重,工作倦怠成为离职的关键原因 | 美通社头条...
  8. 金蝶软件系统管理与维护常见问题
  9. 50M/s, Onedrive直链提取-IDM实现满速下载
  10. 综述:当医学影像遇上深度学习