【问题标题】:os.walk() returning '/' instead of actual folder nameos.walk() 返回 '/' 而不是实际的文件夹名称
【发布时间】:2016-01-23 06:52:29
【问题描述】:

我知道有很多与此相关的问题,但我似乎找不到可以帮助我解决问题的答案。

我正在使用 os.walk() 遍历我的主文件夹中的子文件夹,其中包含文件夹和文件。

Main Folder
    Pass Folder
        files.txt
    Fail Folder
        files.txt
    file.txt
    file2.txt

所以我使用此代码根据子文件夹名称创建一个新的文本文件。但是,这会返回文件夹/.txt,这意味着 dirs 正在返回 '/',而文件正在返回 ['file.txt', 'file2.txt']。

for root, dirs, files in os.walk(path):
    for dirs in root:
      new_txt = 'folder%s.txt' % (dirs)

如何修复它,以便 dirs 返回 ['Main Folder/Pass Folder', 'Main Folder/Fail Folder'] 并且 files 返回每个文件夹中的文件?

【问题讨论】:

  • root 是一个字符串,所以for dirs in root 将一次遍历一个字符。这就是你想要的吗?
  • 哦,我认为我的语法是错误的,因为我认为使用 dirs 会引用 os.walk() 中的 dirs。我试图让它遍历根目录中的子文件夹。
  • 那么你将使用for d in dirs,而不是遍历根字符串本身。如果你只关心文件而不关心目录,你只需要遍历文件:for f in files,并获取每个文件的完整路径使用os.path.join(root, f)

标签: python os.walk


【解决方案1】:

我最近在我的代码中使用了类似的东西(如果我没记错的话,我也在 SO 上找到了)。我的是这样的:

    for (dirpath, subdirs, filelist) in os.walk(folder):
        # join directories in here

来自文档:

dirpath 是一个字符串,目录的路径。 dirnames 是 dirpath 中子目录名称的列表(不包括 '.' 和 '..')。 filenames 是 dirpath 中非目录文件的名称列表。请注意,列表中的名称不包含路径组件。要获取 dirpath 中文件或目录的完整路径(以 top 开头),请执行 os.path.join(dirpath, name)。

我不确定 os.walk() 是否完全符合您的期望。我建议使用os.path.join() 将目录连接在一起以获得您想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多