文章目录

  • 简介
  • 函数
  • 输出文件夹中的文件名:os.walk()
  • 路径拼接函数:os.path.join()
  • 绝对路径查找函数:os.path.dirname()、os.getcwd()
  • 获取当前文件夹的上一级路径:os.path.pardir


简介

想写一个关于OS包用法的总结。

很多程序里都会调用OS,用了这么久了,每次需要自己写的时候,还得重新花时间寻找各个函数的用法、哪个函数符合我们的需求,费时费力。

以此总结OS常见的用法,如有需要会继续更新。

函数

输出文件夹中的文件名:os.walk()

参考网址:Python os.walk() 方法

os.walk()方法用于通过在目录树中游走,输出在目录中的文件名,向上或者向下。

常用的python表达为:

for root, dirs, files in os.walk(save_path):
    print('root_dir:', root)
    print('sub_dirs:', dirs)
    print('files:', files)

其中,root 表示当前正在访问的文件夹路径;
dirs 表示该文件夹下的子目录名list;
files 表示该文件夹下的文件list;

比如:
假设save_path = “./output/”,且该文件夹下有两个子文件夹:color&depth,除此之外没有其他的子文件;
"./output/color/""./output/depth/" 文件夹下有1个子文件(图像),除此之外没有任何的文件夹;

那么,经过上述程序,结果输出应该为:

python的os处理文件后需要关闭吗 python中os_文件名

注意理解其区别!若子文件夹下包含子文件夹,则继续下一次循环遍历!

路径拼接函数:os.path.join()

参考网址:python路径拼接os.path.join()函数的用法

这个函数比较好理解,括号内是各个路径名,它可以连接两个或者更多的路径名。

  1. 如果各组件名首字母不包含“/”,则函数会自动加上;
  2. 如果有一个组件是一个绝对路径,则在他之前的所有组件均会被舍弃;
  3. 如果最后一个组件为空,则生成的路径以一个“/”分隔符结尾。

python程序示例:

import os

Path1 = 'home'
Path2 = 'develop'
Path3 = '/code'
path4 = 'code'

Path1 = Path1 + Path2 + Path3
Path2 = os.path.join(Path1,Path2,Path3)
Path3 = os.path.join(Path1,Path2,path4 )

print ('Path1 = ',Path1)
print ('Path2 = ',Path2 )
print ('Path3 = ',Path3 )

输出结果为:

Path1 = homedevelop/code
Path2 = /code
path3 = home\develop\code

绝对路径查找函数:os.path.dirname()、os.getcwd()

该函数由两种常见用法。

第一种用法:去掉文件名,返回文件所在的目录。

python程序:

print(os.path.dirname('W:\Python_File\juan之购物车.py'))
# 结果
# W:\Python_File

第二种用法:获取当前路径
python用法为:os.path.dirname(__file__)

有的时候,使用./的方法获取当前文件的相对路径会出错,导致读取文件失败。

为了避免该现象,在读取相对路径下的文件名时,可以先获取当前程序所在的绝对路径,再加上文件相对于当前路径的相对路径!

python程序为:

name = os.path.join(os.path.dirname(__file__) ,'data/0.png')

另外一种获取绝对路径的方法是:

os.getcwd()

该函数输出为当前路径的上一级路径。

获取当前文件夹的上一级路径:os.path.pardir

os.path.pardir 直观上看就是表示当前路径的“父”目录(par-dir)。

在文件名中会出现“../” 的后缀,.. 表示的就是上一级目录。

用法:

os.path.abspath(os.path.join(os.path.dirname(__file__),os.path.pardir))

结果:

假设:os.path.dirname(__file__) 输出当前文件夹名为:E:/a/c/

那么利用os.path.pardir后的输出应该为:E:/a/c/../