1.模块及功能

在Python中,实现目录操作的的模块是os和其子模块os.path。主要方法如下表

os模块主要方法

方法

说明

getcwd()

获取当前目录

listdir()

返回指定路径下文件和目录

mkdir()

创建目录

makedirs()

创建多级目录

rmdir()

删除目录

removedirs()

删除多级目录

chdir()

把某个路径设置为当前工作目录

walk()

遍历目录,返回元组(路径,所有目录列表,文件列表)

os.path主要方法

方法

说明

abspath()

获取绝对路径

exists()

判断目录或文件是否存在

join()

拼接路径

splitext()

分离文件名和扩展名

basename()

从一个目录中提取文件名

dirname()

从一个路径中提取文件路径(不包含文件名)

isdir()

判断是否是有效路径

 2.使用

(1)路径的3种写法

# 不转义右斜线
route = r'D:\Python\test.py'
# \\表示\
route2 = 'D:\\Python\\test.py'
# 使用左斜线
route3 = 'D:/Python/test.py'

(2)工作路径、绝对路径和相对路径

①工作路径就是某个运行py文件的所在路径

import os
print('当前工作路径:', os.getcwd())


# 当前工作路径: D:\Python

②绝对路径就是不依赖工作路径,也可以简单理解为完整路径

print('日志文件的绝对路径:', os.path.abspath('log.txt'))


# 输出:日志文件的绝对路径: D:\Python\log.txt

③相对路径就是相对当前工作路径的路径

python 2.7 文件路径 python 文件路径写法_后端

比如我们某个项目的代码都放在py文件夹,日志在log文件夹。那么要打开log文件夹里的log.txt就可以使用相对路径。

with open('../log/log.txt', 'a') as f:
    f.write('xxx')

 (3)拼接路径

①路径其实也是一个字符串,因此可以直接使用字符串的拼接

route = 'D:/python' + '/log/log.txt'

②使用字符串拼接必须注意合并后是一个完整路径,在实际使用中往往不是多一个斜线就是少一个斜线,因此,使用os提供的拼接功能可以避免这个问题。

route = os.path.join('D:/python', 'log/log.txt')

(4)判断目录是否存在,创建目录

①这两个操作往往一起使用,目录存在进行下一步,不存在则创建

log_dir = 'D:/python/log'
# 判断目录是否存在
if not os.path.exists(log_dir):
    # 创建目录
    os.mkdir(log_dir)

②创建多级目录(就是新建目录里再新建目录)

os.makedirs('测试/test')

(5)删除目录(被删除的目录必须为空

path = '测试/test'
if os.path.exists(path):
    os.rmdir(path)

如果想删除不为空的目录,要使用shutil模块

import shutil
import os
path = '测试/test'
if os.path.exists(path):
    # 删除非空目录
    shutil.rmtree(path)

(6)遍历目录

①os.walk

递归的方式返回每一个目录的(根目录,文件夹列表,文件列表),walk方法不适用macos

import os
route = 'D:/python'
for r in os.walk(route):
    print(r)


# 输出:('D:\\python', ['data', 'log', 'py'], [])
#       ('D:\\python\\data', [], ['01.xlsx', '02.xlsx'])
#       ('D:\\python\\log', [], ['log.txt'])
#       ('D:\\python\\py', [], ['test.py'])

实际我们使用时,会对元组进行拆包,比如要获取指定目录下全部文件

route = 'D:/python'
for root, dirs, files in os.walk(route):
    for file in files:
        print(file)


# 输出:01.xlsx
#       02.xlsx
#       log.txt
#       test.py

②os.listdir,返回指定路径下所有文件夹

route = 'D:/python'
print(os.listdir(route))


# 输出:['data', 'log', 'py']