Python3代码示例:文件目录操作¶
发布于:2018-02-09 | 分类:python/vba/cpp
python的os
模块可以处理常见的文件/目录操作,此外还可能用到glob
或者fnmatch
模块匹配文件名。
常用方法¶
os.path.isdir(name) # 判断是不是一个目录
os.path.isfile(name) # 判断是不是一个文件
os.path.exists(name) # 判断是否存在文件或目录
os.path.abspath(name) # 获得绝对路径
os.path.realpath # 获取绝对路径
os.path.relpath() # 获取相对路径
os.path.normpath(path) # 规范path字符串表示
os.path.split(name) # 分割文件名与目录
os.path.splitext() # 分离文件名与扩展名
os.path.join(path,name) # 连接目录与文件名或目录
os.path.basename(path) # 返回文件名
os.path.dirname(path) # 返回文件路径
os.path.getsize(name) # 获得文件大小,目录返回0
os.listdir(dirname) # 列出dirname下的目录和文件
os.getcwd() # 获得当前工作目录
os.curdir # 返回当前目录('.')
os.chdir(dirname) # 改变工作目录到dirname
os.remove(name) # 删除文件
os.rename(src, dst) # 重命名文件
os.mkdir(dirname) # 创建目录
os.rmdir(dirname) # 删除目录
os.path.isdir(name)
中name
参数应为绝对路径(e:\java
);如果只是传入文件名(java
),则在当前工作目录查找有没有同名文件夹os.listdir(dirname)
只返回文件名,需要结合os.path.join(path,name)
拼接出绝对路径os.path.realpath(name)
获取绝对路径,该方法会将传入的文件名与当前工作目录拼接出绝对路径。如果要使用这个方法,必须先用os.chdir(dirname)
改变当前工作目录。建议优先使用os.path.join(path,name)
os.path.relpath(name)
获取相对路径,如果不传入命名关键字参数start
,则根据当前工作目录计算相对路径,目录不同则报错
工作目录¶
os.getcwd()
获取的是执行当前脚本的目录,并不一定的是脚本本身所在的目录。
# D:\program\TestSpace\test.py
import os
print(os.getcwd())
在不同目录执行以上脚本,可知工作目录的具体所指:
D:\program\TestSpace> python test.py
D:\program\TestSpace
D:\program> python TestSpace\test.py
D:\program
脚本目录¶
__file__
返回当前脚本的路径,考虑到有时返回的是相对路径,故采用如下方式转换一下:
import os
os.path.dirname(os.path.abspath(__file__))
文件/目录列表¶
os.listdir(dirname)
得到原始的目录文件列表,包括所有的文件、子目录、符号链接等,然后可以结合列表推导式和os.path
模块中各函数来完成数据筛选。
import os
# 文件列表
filenames = [name for name in os.listdir('somedir') if os.path.isfile(os.path.join('somedir', name))]
# 目录列表
filenames = [name for name in os.listdir('somedir') if os.path.isdir(os.path.join('somedir', name))]
# 指定类型文件
pyfiles = [name for name in os.listdir('somedir') if name.endswith('.py')]
文件名筛选¶
简单的文件名匹配可以使用字符串判断方法,也可以使用glob
或者fnmatch
模块。
import glob
for name in glob.glob('somedir/*.py'):
print(name)
from fnmatch import fnmatch
pyfiles = [name for name in os.listdir('somedir') if fnmatch(name, '*.py')]