【问题标题】:Python: os.chdir() not working within a for loop?Python:os.chdir() 不在 for 循环中工作?
【发布时间】:2011-12-12 00:19:48
【问题描述】:

我正在尝试使用自制的路径导航功能 - 基本上我需要浏览一个文件夹,并探索其中的每个文件夹,在每个文件夹中运行一个功能。

当我尝试在 for 循环中更改目录时遇到问题。我有这个“findDirectories”功能:

def findDirectories(list):
    for files in os.listdir("."):
        print (files)
        list.append(files)
        os.chdir("y")

最后一行导致了问题。如果我删除它,该函数只会编译一个包含该文件夹中所有文件夹的列表。不幸的是,这意味着我每次进入文件夹时都必须运行它,我不能只运行一次。我已经指定了文件夹“y”,因为那是一个真正的文件夹,但即使这样,程序也会在打开时崩溃。在 for 循环之外执行 os.chdir("y") 完全没有问题。

我是 Python 新手,但不是一般的编程新手。我怎样才能让它工作,或者有更好的方法吗?我需要的最终结果是在此文件夹中存在的每个“*Response.xml”文件上运行一个函数,无论它嵌套多深。

【问题讨论】:

  • 你为什么不用os.walkos.path.walk
  • “程序崩溃”是什么意思?可能您收到了一些错误消息?
  • 你到底想做什么?正如在一个答案中所指出的那样,正如您所承认的那样,每次只更改为 'y' 是行不通的。

标签: python chdir


【解决方案1】:

好吧,您没有发布实际错误的回溯,但显然它不起作用,因为您已将 y 指定为相对路径。

因此它可能能够在循环的第一次迭代中更改为y,但在第二次迭代中它将尝试更改为y子目录,也称为y

你可能没有。

你想做类似的事情

import os

for dirName, subDirs, fileNames in os.walk(rootPath):
    # its not clear which files you want, I assume anything that ends with Response.xml?
    for f in fileNames:
        if f.endswith("Response.xml"):
            # this is the path you will want to use
            filePath = os.path.join(dirName, f)

            # now do something with it!
            doSomethingWithFilePath(filePath)

这是未经测试的,但你有这个想法......

【讨论】:

    【解决方案2】:

    正如丹所说,os.walk 会更好。请参阅那里的示例。

    【讨论】:

    • 我只是以“y”为例,因为那肯定会起作用。我不是假设每个文件夹都被称为“y”,而是我会使用像 os.chdir(files) 这样的东西。我去看看 os.walk,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多