Python-os
os.sep
获取操作系统的路径分隔符: linux/unix 为 /
,windows 为 \\
os.getcwd
获得当前工作路径,相当于 shell 的 pwd
os.listdir
获取指定路径的文件/文件夹列表,相当于 shell 的 ls
,比较常与 os.getcwd()
混用获取当前路径的文件或文件夹 os.listdir(os.getcwd())
os.walk
遍历指定的文件夹, os.walk
的运行逻辑是 os.listdir
指定文件夹,然后返回该文件夹 *
文件夹路径,文件夹下的所有文件夹,文件夹下的所有文件 *
,如果下存在非空子文件夹,则会继续遍历子文件夹,直到返回的子文件夹为空就停止。
for root, dirs, files in os.walk(PATH):
# 可以在这里进行一些必要的操作
# 如过滤文件夹 dirs[:] = [d for d in dirs if d not in exclude]
# 文件夹排序 dirs.sort()
print(root, dirs, files)
print("---> start next walk.")
注意 os.walk
返回的不是有序的文件/文件夹
- 如果想要返回简单的有序的文件夹/文件,需要对
walk
结果进行处理for root, dirs, files in os.walk(PATH): dirs.sort() files.sort() print(root, dirs, files)
- 如果想要比较复杂的排序方式,如本 wiki 中的
_Sidebar.md
文件自动生成,可以使用 os.listdir 进行自定义# 例子是这个 wiki 项目的_Sidebar.md 自动生成脚本 要求文件夹/文件排序,先输出文件夹,再输出文件,对文件夹进行深度优先搜索. sorted_dir = [] sorted_file = [] dir_content = os.listdir(PATH) for df in sorted(dir_content): full_path = os.path.join(PATH, df) # now are sorted but mix with dirs and files if os.path.isdir(full_path): sorted_dir.append(full_path) # if you want to go deep in dir you could do in this else: sorted_file.append(sorted_file)
os.path
os.path.dirname
获取路径的文件夹路径 os.path.dirname(os.path.realpath(__file__))
当前文件的文件夹路径
os.path.basename
获取路径的文件夹名称 os.path.basename(os.getcwd())
获得当前文件路径的文件夹名称.如果是文件路径,则会返回文件名,所以最好使用的时候加判断当前路径是文件夹还是文件
os.path.join
将参数通过 os.sep 链接起来,合成路径
os.chdir
切换当前工作路径,如果有时候你只需要临时切换路径然后回来的,可以使用上下文管理器切换去目标路径然后回来
from contextlib import contextmanager
import os
@contextmanager
def cd(newdir):
prevdir = os.getcwd()
os.chdir(os.path.expanduser(newdir))
try:
yield
finally:
os.chdir(prevdir)
# 然后就可以这样进行调用了
os.chdir('/home')
with cd('/tmp'):
# something you do in '/tmp' dir
# Directory is now back to '/home'.
os.unlink
删除文件,如果文件是一个目录则返回一个错误,如果是文件夹应该使用 shutil
FAQ
获取父目录名
# python2
# 目录结构的父目录
import os
print os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 运行环境的父目录
print(os.path.dirname(os.getcwd()))
# python3
# 上面的方法适用 外加
print(pathlib.Path().absolute().parent)
print(pathlib.Path(__file__).parent.parent)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

下一篇: Covenant 利用分析
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论