贡献者: 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 可以使存在在路径也不报错。