Python - 获取目录中所有文件和子文件夹的相对路径

vob*_*ect 35 python

我正在寻找一种获取特定文件夹中文件和(子)文件夹的相对路径的好方法.

对于我目前使用的方法os.walk().它工作但它对我来说似乎不是"pythonic":

myFolder = "myfolder"
fileSet = set() # yes, I need a set()

for root, dirs, files in os.walk(myFolder):
    for fileName in files:
        fileSet.add(root.replace(myFolder, "") + os.sep + fileName)
Run Code Online (Sandbox Code Playgroud)

还有其他建议吗?

谢谢

New*_*onx 67

使用os.path.relpath().这正是它的预期用途.

import os
root_dir = "myfolder"
file_set = set()

for dir_, _, files in os.walk(root_dir):
    for file_name in files:
        rel_dir = os.path.relpath(dir_, root_dir)
        rel_file = os.path.join(rel_dir, file_name)
        file_set.add(rel_file)
Run Code Online (Sandbox Code Playgroud)

请注意,它os.path.relpath()是在Python 2.6中添加的,并且在Windows和Unix上受支持.

  • 使用 `os.path.relpath()` 而不是字符串操作。 (3认同)
  • 使用list comprehension(更快更pythonic):os.walk(rootDir)中的(dirpath,dirnames,filenames)``files = [os.path.relpath(os.path.join(dirpath,file),rootDir)对于文件名中的文件]` (2认同)

S.L*_*ott 9

myFolder = "myfolder"
fileSet = set() 

for root, dirs, files in os.walk(myFolder):
    for fileName in files:
        fileSet.add( os.path.join( root[len(myFolder):], fileName ))
Run Code Online (Sandbox Code Playgroud)