Python中OS模块的使用

os模块

os模块:
功能: 与操作系统交互的作用,允许你执行如文件和目录操作、执行命令、处理路径名称等操作。

参数与说明

- os.getcwd()  # 获取当前工作目录,即当前python脚本工作的目录路径
- os.chdir("dirname")  # 改变当前脚本工作目录,相当于shell下cd命令
- os.curdir  # 返回当前目录: ('.')
- os.pardir  # 获取当前目录的父目录字符串名: ('..')
- os.makedirs('dirname1/dirname2')  # 可生成多层递归目录
- os.removedirs('dirname1')  # 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依次类推
- os.mkdir('dirname')  # 生成单级目录, 相当于shell中mkdir dirname
- os.rmdir('dirname')  # 删除单级目录,若目录不会空则无法删除,报错:相当于shell中rmdir dirname
- os.listdir('dirname')  # 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
- os.walk(path)  #  一个遍历目录数的函数,它以一种深度优先的策略(depth-first)访问指定的目录。
- os.getlogin()  # 获取在进程的控制终端上登录的用户名称(即此时pc登录的用户名)
- os.remove()  # 删除一个文件
- os.rename('oldname', 'newname')  # 重命名文件/目录
- os.stat('path/filename')  # 获取文件/目录信息
- os.sep  # 输出操作系统特定的路径分割符, win下为"\\" , linux下为"/"
- os.linesep # 输出当前平台使用的行终止符, win下为"\t\n", linux下为"\n"
- os.system("bash command") # 运行shell命令,直接显示 
- os.environ  # 获取系统环境变量
- os.path.abspath(path)  # 返回path规范化的绝对路径
- os.path.split(path)  # 将path分割成目录和文件名二元组返回
- os.path.dirname(path)  # 返回path的目录,其实就是os.path.split(path)的第一个元素
- os.path.basename(path)  # 返回path最后的文件名,如果path以/或\结尾,那么就会返回空值,
- os.path.exists(path)  # 如果path存在,返回True,如果path不存在,则返回False
- os.path.isfile(path)  # 检查路径是否为文件
- os.path.isdir(path)  # 检查路径是否为目录
- os.path.islink(path)  # 检查路径是否是一个符号链接
- os.path.join(path1[, path2[,....]])  # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
- os.path.getatime(path)  # 返回path所指向的文件或者目录的最后访问时间
- os.path.getmtime(path)  # 返回path所指向的文件或者目录的最后修改时间
- os.path.getsize(path)  # 返回path的大小 

查询登录用户 os.getlogin

user = os.getlogin()
print(user)
# 打印结果:test

1.路径操作

1.1.os.getcwd()

获取当前工作目录路径

import os
dir = os.getcwd()
print(dir)
# 打印结果: E:\BaiduSyncdisk\NewProject\Chen\Day14
1.2.os.chdir()

切换当前工作目录

import os
os.chdir("D:\\")
1.3.os.mkdir()

创建文件夹,不指定路径,默认当前目录下创建

import os
os.mkdir('osdirname')
1.4.os.makedirs()

递归创建文件夹,不指定路径,默认当前目录下创建

import os
os.makedirs("osdir/dir1")
1.5.os.rmdir()

删除指定文件目录,不指定路径,默认当前目录下删除

import os
os.rmdir("dirname")
1.6.os.removedirs() (谨慎使用)

若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依次类推

import os
os.removedirs("dirname")
1.7.os.listdir()

列出指定目录下的所有文件和子目录,但不会打印二级目录

import os
listdir = os.listdir("E:\BaiduSyncdisk\\NewProject\Chen\Day14")
print(listdir)
# 打印结果:['2.OS模块.py', '1.编码历史.py', '2.os系统模块.py', 'log_func.log', 'osdir', 'osdirname', 'test.txt']
1.8 os.walk()

语法:os.walk(top=path,topdown=True,oneerror=None)
参数 top 表示需要遍历的目录树的路径。
参数topdown默认为 True ,表示首先返回根目录树下的文件,然后,再遍历目录树的子目录。 当topdown 的值为 False 时,则表示先遍历目录树的子目录,返回子目录下的文件,最后返回根目录下的文件。
参数oneerror的默认值为 None ,表示忽略文件遍历时产生的错误;如果不为空,则提供一个自定义函数提示错误信息,后边遍历抛出异常。

os.walk() 函数的返回值是一个生成器(generator),每次遍历的对象都是返回的是一个三元组 (root,dirs,files):该元组有3个元素,这3个元素分别表示每次遍历的路径名,目录列表和文件列表。

import os
from os.path import join

home_path = "/home"

for (root, dirs, files) in os.walk(home_path):
   for dirname in dirs:
       print(join(root, dirname))
   for file in files:
       print(join(root, file))

win下获取目录和目录路径

import os

def walk(path):
   if not os.path.exists(path):
       return -1
   for root, dirs, files in os.walk(path):
       for filename in files:
           print(os.path.join(root, filename))  # 路径和文件名连接构成完整路径

path = 'E:\BaiduSyncdisk\\NewProject\Chen'
walk(path)
1.8.os.rename()

重命名目录名

import os
os.rename("olddirname", "newdirname")

2.文件操作

2.1.os.remove()

删除指定文件,不指定路径,默认当前目录下

import os
os.remove("filename")
2.2.os.rename()

重命名文件名

import os
os.rename("oldfilename", "newfilename")
2.3.os.stat()

获取某个文件的信息,例如:文件大小、上一次访问时间、上一次修改时间等

file_info = os.stat("logs.log")
print(file_info)
# 打印结果:
# os.stat_result(st_mode=33206, st_ino=6473924464355053, st_dev=3458564078,
# st_nlink=1, st_uid=0, st_gid=0, st_size=447, st_atime=1715348276, st_mtime=1715177483, st_ctime=1715342203)

# 获取文件大小
print(file_info.st_size)
# 447

# 获取文件修改时间,可以通过time.ctime转换时间
import time

print(time.ctime(file_info.st_mtime))
# Wed May  8 22:11:23 2024

3.环境变量

3.1.os.environ

获取所有环境变量

import os
env_path = os.environ
print(env_path)
"""
environ({'ADSK_CLM_WPAD_PROXY_CHECK': 'FALSE', 'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\Administrator\\AppData\\Roaming', 'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files', 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'COMPUTERNAME': 'MS-NZVNVIUFWRCD', 'COMSPEC': 'C:\\windows\\system32\\cmd.exe'...})
"""

获取指定环境变量

env_path = os.environ.get("ENVNAME")
print(env_path)

4.执行命令

4.1.os.system()

执行系统命令

# 执行命令并等待命令完成
return_code = os.system('ls -l')
# 检查命令是否成功执行(返回为0通常表示成功)
if return_code == 0:
	print("Command executed scuccessfully!")

5.进程管理

5.1.os.exit()

退出程序

os.exit()

6.文件操作

6.1.os.close()

关闭文件

# 打开文件
fp = os.open("filename")
# 关闭文件
os.close(fb)

7.os.path模块

7.1.os.path.abspath()

返回路径的绝对路径。
注意:如果 os.path.abspath(.) 存在与已被定义的方法中,则返回的绝对路径是调用该方法的模块的绝对路径,而不是方法的绝对路径。

import os
path = os.path.abspath("logs.log")
print(path)
# 打印结果: E:\BaiduSyncdisk\NewProject\Chen\Day14\logs.log
7.2.os.path.dirname

返回路径中的目录名。它去掉路径中的文件名,返回剩余的部分。

import os
path = os.path.dirname("E:\BaiduSyncdisk\\NewProject\Chen\Day14\logs.log")
print(path)
# E:\BaiduSyncdisk\NewProject\Chen\Day14
7.3.os.path.split()

将路径分割成目录和文件名两部分,返回一个元组 (dirname, basename)。

path = os.path.split("E:\BaiduSyncdisk\\NewProject\Chen\Day14\logs.log")
print(file)
# 打印结果:('E:\\BaiduSyncdisk\\NewProject\\Chen\\Day14', 'logs.log')
7.4.os.path.basename()

获取文件名称

import os
path = os.path.basename("E:\BaiduSyncdisk\\NewProject\Chen\Day14\logs.log")
print(path)
# 打印结果: logs.log
7.5.os.path.join()

连接一个或多个路径组件,返回一个组合后的路径。它会根据操作系统使用适当的路径分隔符。

import os
path = os.path.join("E:\BaiduSyncdisk\\NewProject\Chen", "\Day14\logs.log")
print(path)
# 打印结果: E:\Day14\logs.log
7.6.os.path.getsize()

获取文件大小

file_size = os.path.getsize("logs.log")
print(file_size)
# 打印结果: 447
7.7.os.path.getsize()

获取文件修改访问日期

import os
import time
file_atime = os.path.getatime("logs.log")
print(time.ctime(file_atime))
# 打印结果: Fri May 10 21:37:56 2024

8.应有示例

  1. 编写一个脚本,用于将当前目录下的所有.txt文件复制到一个新的目录中
import os

# 定义目标目录
target_directory = '/path/to/target'

# 遍历当前目录下的所有文件
for filename in os.listdir('.'):
	if filename.endswith('.txt'):
	    # 构造完整的源文件和目标文件路径
	    source_path = os.path.join(os.getcwd(), filename)
	    target_path = os.path.join(target_directory, filename)
	    
	    # 复制文件
	    os.system(f"cp {source_path} {target_path}")
	    # 重命名或移动文件
	    # os.rename('/path/to/old_name', '/path/to/new_name')

使用 os.listdir() 获取当前目录下的所有文件和目录列表,然后检查每个文件名是否以 .txt 结尾。对于每个文本文件,我们使用 os.path.join() 构造完整的路径,并使用 os.system() 调用 cp 命令来复制文件。

2.编写一个脚本,用于将当前目录下的所有.py文件复制到一个新目录中

import os
import shutil
# 定义源目录和目标目录
source_dir = os.getcwd()
target_dir = "/path/to/target"

# 遍历当前目录下的所有文件
for filename in os.listdir(source_dir):
    if filename.endswith(".py"):
        # 构建完整的源文件和目标文件路径
        source_file = os.path.join(source_dir, filename)
        target_file = os.path.join(target_dir, filename)

        # 复制文件
        os.path.isfile(target_file) and os.remove(target_file)  # 删除已存在的文件
        # os.copy()函数用不了的情况下,可以使用以下方式
        # 方法一:通过系统命令执行复制操作
        os.system(f"cp {source_file} {target_file}")
        # 方法二:通过shutil模块去操作复制文件
        shutil.copy(source_file, target_file)

3.在自动化测试过程中,常常需要发送邮件,将最新的测试报告文档发送给相关人员查看,所以就需要查找最新文件的功能。
举例:查找文件夹下最新的文件。

import os

def new_file(dir):
    # 列举dir目录下的所有文件(名),结果以列表形式返回。
    lista = os.listdir(dir)
    # sort按key的关键字进行升序排序,lambda的入参fn为lists列表的元素,获取文件的最后修改时间,所以最终以文件时间从小到大排序
    # 最后对lists元素,按文件修改时间大小从小到大排序。
    lista.sort(key=lambda fn:os.path.getmtime(dir+'\\'+fn))
    # 获取最新文件的绝对路径,列表中最后一个值,文件夹+文件名
    file_path = os.path.join(dir, lista[-1])
    return file_path

print(new_file("E:\BaiduSyncdisk\\NewProject\Chen\Day14"))
# E:\BaiduSyncdisk\NewProject\Chen\Day14\2.OS模块.py
  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

现实与梦·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值