Python—文件系统操作

1. 路径操作

  • 查看路径是否存在:
    import osif os.path.exists(r'E:\jupyter'): print('exist')

  • 拼接路径:
    path = os.path.join('C:\\', 'a', 'b', 'c')# C:\a\b\c

  • 查看文件类型:
    path = r'C:\Users\Public\Desktop\Microsoft Edge.lnk'if os.path.isdir(path): print('dir') elif os.path.isfile(path): print('file') else: print('other')

2. 目录操作
  • 【Python—文件系统操作】创建目录:
    os.makedirs(r'E:\a\b\c')# 会创建缺失的父目录 os.mkdir(r'E:\a\b\c\d')# 不会创建缺失的父目录

  • 删除目录:
    import os import shutilos.rmdir(r'E:\a\b\c\d')# 删除空目录 shutil.rmtree(r'E:\a')# 递归删除目录(非空目录)

  • 读取目录:
    entries = os.listdir(r'E:\jupyter') for filename in entries: print(filename)

    .ipynb_checkpoints matplotlib.ipynb networkx PyTorch

  • 当前工作目录:
    os.chdir(r'E:\\')# 切换当前工作目录cur_dir = os.getcwd()# 获取当前工作目录 print(cur_dir)

  • 拷贝目录:
    # 递归拷贝 E:\jupyter 至 E:\a\jupyter # 会创建缺失的父目录 shutil.copytree(r'E:\jupyter', r'E:\a\jupyter')

  • 遍历目录:
    # cur_path: 当前路径 # sub_dirs: 当前路径包含的所有子目录 # files: 当前路径包含的所有文件 for cur_path, sub_dirs, files in os.walk(r'E:\jupyter'): print(cur_path, sub_dirs, files)

    E:\jupyter ['.ipynb_checkpoints', 'networkx', 'PyTorch'] ['matplotlib.ipynb'] E:\jupyter\.ipynb_checkpoints [] ['matplotlib-checkpoint.ipynb', 'networkx-checkpoint.ipynb'] E:\jupyter\networkx ['.ipynb_checkpoints'] ['edgelist.txt', 'networkx.ipynb'] ...

3. 文件操作 注:目录也属于文件。
  • 重命名:
    # 将 E:\tmp\a.mp4 重命名为 E:\tmp\A.mp4 os.rename(r'E:\tmp\a.mp4', r'E:\tmp\A.mp4')

  • 删除文件:
    os.remove(r'E:\tmp\A.mp4')

  • 查看文件信息:
    stat = os.stat(r'E:\jupyter') print(stat)

    os.stat_result(st_mode=16895, st_ino=562949954788505, st_dev=780501735, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1630978768, st_mtime=1630832561, st_ctime=1630718956)

  • 拷贝文件
    shutil.copyfile(r'E:\tmp\b.mp4', r'E:\tmp\c.mp4')

  • 移动文件(或递归地移动目录)
    # 移动 E:\tmp\test 至 E:\b\test shutil.move(r'E:\tmp\test', r'E:\b\test')

    通过重命名操作也可以实现文件或目录的移动:
    os.rename(r'E:\b\test', r'E:\tmp\test')

    推荐阅读