python的os模块常用函数介绍

1. os.path.join() 函数用于拼接路径,可以传入多个参数:

案例1
import os

print(os.path.join('111','222','333'))  #111/222/333
print(os.path.join('/111','222','333')) #/111/222/333
print(os.path.join('/111','/222','333')) #/222/333

print(os.path.join('/111','/222','/333')) #/333
print(os.path.join('111','222','./333')) #111/222/./333

print(os.path.join('111','222','/333')) #/333
print(os.path.join('111','/222','/333')) #/333
print(os.path.join('/111','/222','/333')) #/333

print(os.path.join('111/','222','333')) #111/222/333
print(os.path.join('111/','222/','333')) #111/222/333
print(os.path.join('111/','222/','333/')) #111/222/333/

print(os.path.join('111','222','333/')) #111/222/333/
print(os.path.join('111','222/','333/')) #111/222/333/
print(os.path.join('111/','222/','333/')) #111/222/333/
workdir = r'E:\dq0607\河南郑州1#'
saver = r'E:\dq0607\output'  # 'E:\\dq0607\\output'
saver = os.path.join(saver, os.path.basename(workdir))  # 'E:\\dq0607\\output\\河南郑州1#'
outfile = os.path.join(saver, 'data.csv') # 'E:\\dq0607\\output\\河南郑州1#\\data.csv'
file_pattern = os.path.join(workdir, f"*.rtd")  'E:\\dq0607\\河南郑州1#\\*.rtd'
files = glob(file_pattern)  # 一个list,元素为各个.rtd文件的【路径+文件名】
案例2
from glob import glob
# glob.glob返回与通配符路径所匹配的每个文件名
turbine_subdir = 'F:\\案例\\\123456\\2020\\202005\\123456789'
>>> os.path.join(turbine_subdir, '*txt')
Out[1]: 'F:\\案例\\123456\\2020\\202005\\123456789\\*txt'
glob(os.path.join(turbine_subdir, '*txt'))
会将路径 turbine_subdir 下所有 txt 文件读成 下面的形式(str'F:\\案例\\123456\\2020\\202005\\123456789\\12345678920200503.txt', 
'F:\\案例\\\\123456\\2020\\202005\\123456789\\12345678920200504.txt',
……
 'F:\\案例\\\\123456\\2020\\202005\\123456789\\12345678920200531.txt'

2. os.walk()

os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。
os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。
返回生成器

import os
for root, dirs, files in os.walk(".", topdown=False):
    for name in files: #遍历文件       
        print(os.path.join(root, name))    
    for name in dirs: #遍历所有文件夹       
        print(os.path.join(root, name))

输出如下:

./.bash_logout
./amrood.tar.gz
./.emacs
./httpd.conf
./www.tar.gz
./mysql.tar.gz
./test.py
./.bashrc
./.bash_history
./.bash_profile
./tmp
./tmp/test.py

第一步:#root_dir:原始路径,sub_dir:原始路径下的文件夹列表[package1, package2];files:原始路径下的文件列表,如果遍历files的话,遍历完之后进入第二步;
第二步:类似与第一步,root_dir:‘原始路径/package1’,sub_dir:package1包含的文件夹(列表),files:package1包含的文件(列表)

for root_dir, sub_dir, files in os.walk(r"D:\资料\rexxxxt资料\算法基础数据-给xx\10min数据"):#root_dir:原始路径,sub_dir:原始路径下的文件夹列表;files:原始路径下的文件列表
    for file in files:
        if file.endswith(".xlsx"):
            #构造绝对路径
            file_name = os.path.join(root_dir, file)
            print(file_name)

在这里插入图片描述

import os

image_path = '/home/yqw/Project/yt-image-classify/Picture/training20180501/dirty'
for x in os.walk(image_path):
    print(x)

在这里插入图片描述
可以看到os.walk()以元组为单位区分每一层的,每一层又分成三个部分根目录路径、本目录中文件夹名字、本目录中文件名字。第一层的目录是”/dirty’,第一层中的文件夹有toner,dirty,然后遍历第二层,可以发现第二层的第一个文件夹目录’/dirty/toner’此目录中没有子文件夹,第二个文件夹目录为’~/dirty/dirty’。

import os 
image_path = '/home/yqw/Project/yt-image-classify/Picture/training20180501/dirty'
for root, dirs, files in os.walk(image_path):
    print("root:"+root)
    print(dirs)
    print(files)

在这里插入图片描述

3. os.path.exists(file_name.后缀)

Python 的 os 模块封装了常见的文件和目录操作。
os.path模块主要用于文件的属性获取,exists是“存在”的意思,所以顾名思义,os.path.exists()就是判断括号里的文件是否存在的意思,括号内的可以是文件路径。
举个栗子:user.py为存在于当前目录的一个文件,输入代码:

import os
path = os.path.exists('user.py')
print(path)

输出结果:

True  # 如果不存在,返回的则是FALSE。

4. os.makedirs()

os.makedirs() 方法用于递归创建目录。如果子目录创建失败或者已经存在,会抛出一个 OSError 的异常
用来创建多层目录(单层请用os.mkdir)
如果第一个参数 path 只有一级,则 mkdir() 函数相同。
os.makedirs(name, mode=0o777, exist_ok=False)

参数说明

  • name:你想创建的目录名
  • mode:要为目录设置的权限数字模式,默认的模式为 0o777 (八进制)。
  • exist_ok:是否在目录存在时触发异常。如果exist_ok为False(默认值),则在目标目录已存在的情况下触发FileExistsError异常;
  • 如果exist_ok为True,则在目标目录已存在的情况下不会触发FileExistsError异常。

makedirs()方法语法格式如下:

os.makedirs(path, mode=0o777)

参数

  • path – 需要递归创建的目录,可以是相对或者绝对路径。。
  • mode – 权限模式。
import os, sys# 创建的目录
path = "/tmp/home/monthly/daily"
os.makedirs( path);
print("路径被创建")

在这里插入图片描述

shutil.rmtree()

表示递归删除文件夹下的所有子文件夹和子文件。

import os,sys
path = '/tmp/home/monthly/daily'
os.makedirs(path)
print('路径已被创建')

import shutil
shutil.rmtree(r'C:\tmp\home\monthly') #将monthly文件夹删除

5. os.listdir() 返回指定路径下的文件和文件夹名字,并存放在列表中,它接收的参数为绝对路径,

示例:

import os
 
file_dir = "./"
file_name = os.listdir(file_dir)
# 以列表形式存放
print(file_name)
for name in file_name:
    print(name)

当目录结构如下图所示时:
在这里插入图片描述
输出结果为:
在这里插入图片描述

6. os.path.isdir() 判断对象是否为一个目录

7. os.path.isfile() 判断对象是否为一个文件

8. os.pardir

import sys, os
sys.path.append(os.pardir)#为了导入父目录的文件而进行的设定
from dataset.mnist import load_mnist

(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True,
normalize=False)

mnist_show.py 文件的当前目录是 ch03 ,但包含 load_mnist() 函数的 mnist.py 文件在 dataset 目录下。因此,mnist_show.py 文件不能跨目录直接导入 mnist.py 文件。sys.path.append(os.pardir) 语句实际上是把父目录 deep-learning-from-scratch 加入到 sys.path (Python 的搜索模块的路径集)中,从而可以导入 deep-learning-from-scratch 下的任何目录(包括 dataset 目录)中的任何文件。

用来读入 MNIST 图像的文件在本书提供的源代码的 dataset 目录下。并且,我们假定了这个 MNIST 数据集只能从 ch01 、ch02 、ch03 、…、ch08 目录中使用,因此,使用时需要从父目录(dataset 目录)中导入文件,为此需要添加 sys.path.append(os.pardir) 语句。

9. os.environ.get()的用法

os.environ.get()是python中os模块获取环境变量的一个方法

import os

JS_ADDRESS = os.environ.get("PALM_JS_ADDRESS")
print(os.environ.get("PALM_JS_ADDRESS"))
  • 什么是环境变量,环境变量是程序和操作系统之间的通信方式。
  • 有些字符不宜明文写进代码里,比如数据库密码,个人账户密码,如果写进自己本机的环境变量里,程序用的时候通过os.environ.get()取出来就行了。这样开发人员本机测试的时候用的是自己本机的一套密码,生产环境部署的时候,用的是公司的公共账号和密码,这样就能增加安全性。
  • os.environ是一个字典,是环境变量的字典。"PALM_JS_ADDRESS"是这个字典里的一个键,如果有这个键,返回对应的值,如果没有,则返回none

10. os.path.dirname() 功能:去掉文件名,返回目录

In[22]: Path
Out[22]: 'E:\\inputdata\\'

In[23]: os.path.dirname(Path)
Out[23]: 'E:\\inputdata'

In[24]: os.path.dirname(os.path.dirname(Path))
Out[24]: 'E:\\'
print(os.path.dirname("E:/Read_File/read_yaml.py"))
#结果:
E:/Read_File

print(os.path.dirname("E:/Read_File"))
#结果:
E:/

“os.path.dirname(__ file__)”

先了解一下__file__ ,可以看出__file__表示了当前文件的path

print(__file__)
#结果,为该脚本所在位置,及该脚本的名字
E:/Read_File/read_yaml.py

那么就可以了解到os.path.dirname(file)和os.path.dirname(“E:/Read_File/read_yaml.py”)是一个意思,再根据os.path.dirname(path)的用法,得出os.path.dirname((file)就是得到当前文件的绝对路径

若print os.path.dirname(file)所在脚本是以绝对路径运行的,则会输出该脚本所在的绝对路径,若以相对路径运行,输出空目录

print(os.path.dirname(__file__))

11. os.path.basename()

返回path最后的文件名。如果path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素。
>>> os.path.basename('c:\test.csv')
'test.csv'
>>> os.path.basename('c:\csv')
'csv' (这里csv被当作文件名处理了)
>>> os.path.basename('c:\csv\')
''

12. 不带后缀的文件名endswith

b = int(file.split('.')[0])#不带后缀的文件名
for root_dir, sub_dir, files in os.walk(r"D:\资料\re资料\算法基础数据\10min"):
    for file in files:
        # b = int(file
        if (int(file.split('.')[0]) in turbines_id) and file.endswith(".xlsx"):
            #构造绝对路径
            file_name = os.path.join(root_dir, file)
            print(file_name)

13. os.path.abspath() 获取当前文件绝对路径

例1. 获取运行文件当前的完整路径
print(os.path.abspath(__file__))
print(os.path.abspath('系统路径.py')) #获取当前运行文件绝对路径`

输出:

D:\BaiduNetdiskDownload\work\练习\系统路径.py
log_dir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'output', 'log')
from config import log_dir
log_file = os.path.join(log_dir, 'log.txt')
例2. 获取其他目录下的文件路径
print(os.path.abspath('txtRead.py'))

输出

D:\BaiduNetdiskDownload\work\练习\txtRead.py

以上结果可知,abspath括号内的内容仅拼接在当前文件路径上。
例3.在该文件的上一级目录创建文件夹
os.path.dirname(__file__)
Out[3]: 'E:/09-code/02-wind_profile'
os.path.abspath(os.path.dirname(__file__))
Out[4]: 'E:\\09-code\\02-wind_profile'
os.path.join(os.path.abspath(os.path.dirname(__file__)), 'output', 'log')
Out[5]: 'E:\\09-code\\02-wind_profile\\output\\log'
import os
path1 = os.path.abspath('.')#表示当前所处的文件夹的绝对路径
path2 = os.path.abspath('..')#表示当前所处的文件夹上一级文件夹的绝对路径

14.os.path.splitext(name)

import os
name = '8980#-20180301-20190228-150mB.tim'
os.path.splitext(name)
# ('8980#-20180301-20190228-150mB', '.tim')

15. 关于文件的操作

  • 关于文件的功能
    在这里插入图片描述
  • 关于文件夹的功能
    在这里插入图片描述

参考链接:
[1] 如何表示python中的相对路径 2020.10

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值