贡献者: addis
os.getcwd()
获取当前路径,也就是运行 python 时命令行的 pwd
。
os.chdir(路径)
改变当前路径
路径
在 Windows 中默认用 \\
也可以用 /
分割路径,但 Linux 中只能用 /
。os.getcwd()
返回的路径 Windows 使用 \\
。可以用 os.sep
表示不同系统的默认分隔符
for items in os.listdir(路径): ...
列出路径下所有文件和文件夹名(仅一层)
os.path.isfile(路径)
和 os.path.isdir(路径)
可以判断某个路径是文件还是文件夹,如果不存在,同样返回 False
。如果 路径
是 symlink,则判断指向的目标。
for root,dirs,files in os.walk(路径): ...
可以在 路径
中遍历整个文件树。默认从顶到底一层层遍历,如果添加参数 topdown=False
则从底到顶。
root,dirs,files
分别是当前处理的路径、该路径下的所有文件夹、所有文件。其中 root
开始的部分和 os.walk(路径)
的 路径
完全相同(斜杠也相同)。如果后者是相对路径前者也会是。root
在 路径
后面的部分仍然会使用 os.sep
分隔。
os.path.normpath(路径)
会处理掉所有的 .
,..
和重复的斜杠如 //
,把所有分隔符替换为 os.sep
,把开头的 ./
和结尾的 /
都删掉。例如 /home//user/../Documents/./myfolder/
变为 /home/Documents/myfolder
。
os.path.normpath(路径).split(os.sep)
可以把路径根据斜杠分成若干部分
root
关于 路径
的相对路径,最好还是用 os.relpath()
。虽然可以直接用 root[len(路径):]
,但如果 路径
不以 /
或 \\
结尾,那么 root[len(路径):]
会以 /
开头,可能会被误以为是绝对路径。
os.walk(路径)
的循环中用 depth = root[len(路径):].count(os.sep)
。
os.walk
一开始就扫描所有路径,不会在循环中动态更新。如果从顶到低,重命名或新建文件夹不会被自动 walk,所以要在循环内部重命名文件夹要从底到顶(例如切割限制文件夹名称长度)。
dir,path = os.path.split(路径)
可以把路径划分成前面部分和最后的文件名或文件夹名,这相当于分别使用 os.path.dirname(路径)
和 os.path.basename(路径)
。
os.path.abspath(路径)
获取绝对路径(可能包含软链)
os.path.realpath(路径)
获取正则化路径,也就是不含任何软链以及 .
和 ..
的绝对路径。
os.path.relpath(路径2, 路径1)
可以显示 路径2
相对 路径1
的相对路径。
os.path.join(路径1, 路径2, ...)
可以把两个路径拼接,后者必须是相对路径。
root, ext = os.path.splitext(字符串)
可以把 字符串
根据最后一个英文句号拆分成 root
和 ext
(含前面的句号)两部分,如果 basename 中没有英文句号,则 ext
为空(前面路径名中的句号不算)。
os.path.exists(路径)
可以判断文件或文件夹是否存在
os.mkdir(目录)
可以创建一个文件夹,如果已经存在则会报错。在前面加上 os.path.exists(目录):
即可避免报错
os.makedirs('目录1/目录2', exist_ok=True)
可以创建多层目录,exist_ok=True
可以使存在在路径也不报错。