Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在实时重命名os.walk的同时更新其列表中的当前目录_Python_Python 2.7 - Fatal编程技术网

Python 如何在实时重命名os.walk的同时更新其列表中的当前目录

Python 如何在实时重命名os.walk的同时更新其列表中的当前目录,python,python-2.7,Python,Python 2.7,这是我最初的问题: 我似乎已经在我编写的这个特定程序中发现了有关此错误的问题,我将在下面对此进行解释: 它在程序中所做的是,它将在某个特定路径的os.walk期间重命名文件和目录。因此,假设我已经成功重命名了目录,但是os.walk包含在它的列表中的目录的名称仍然是较旧的,而不是我刚刚重命名的,因此,访问较旧的目录名(不存在)时出错。,如何解决实时更新os.walk中包含的目录列表的问题。我希望我以一种可以理解的方式表达了这个问题,请参考上面的链接了解更多细节 以下是供参考的程序: import

这是我最初的问题:

我似乎已经在我编写的这个特定程序中发现了有关此错误的问题,我将在下面对此进行解释:

它在程序中所做的是,它将在某个特定路径的
os.walk
期间重命名文件和目录。因此,假设我已经成功重命名了目录,但是
os.walk
包含在它的列表中的目录的
名称
仍然是较旧的,而不是我刚刚重命名的,因此,访问较旧的目录名(不存在)时出错。
,如何解决实时更新os.walk中包含的目录列表的问题。我希望我以一种可以理解的方式表达了这个问题,请参考上面的链接了解更多细节

以下是供参考的程序:

import os
terms = ( "-LOL[ettv]" #Other terms removed
)
#print terms[0]
p = "E:\TV Series"
for (path,dir,files) in os.walk(p):
    for name in terms:
        for i in files:
            if name in i:
                print i
                fn,_,sn = i.rpartition(name)
                os.rename(os.path.join(path, i), os.path.join(path, fn+sn))
        for i in dir:
            if name in i:
                print i
                fn,_,sn = i.rpartition(name)
                os.rename(os.path.join(path, i), os.path.join(path, fn+sn))
以及错误回溯:

Traceback (most recent call last):
File "E:\abcd.py", line 22, in <module>
os.rename(os.path.join(path, i), os.path.join(path, fn+sn))
WindowsError: [Error 2] The system cannot find the file specified

可能,在os.walk(p)中的(路径、目录、文件)的
开始时:
,放置
path=os.path.join([newdir]+path.split(os.pathsep))
?@zondo可以解释它的作用吗?
path.split(os.pathsep)
创建一个包含路径中所有不同文件夹的列表。例如,
“folder/sub”
将变成
[“folder”,“sub”]
。然后,我将新的目录路径添加到该列表中。实际上,我没有告诉您正确的事情,因为它应该是
path.split(os.pathsep)[1:]
,以便删除第一个目录。
1
应该是您想要更改的目录深度。例如,从
“/home/user/f”
移动到
“/home/user/r”
,如果您当前正在处理
“/home/user/f/r”
,您可能只想删除
“/home/user/f”
,它有4个文件夹深。@zondo dude,有这么多的注释,只要回答一下就可以了。@P dooo it.@zondo我实际上不明白,但我解决了这个问题,使用
枚举
,我所做的是将
for循环
(对于目录和文件)更改为:(检查更新的问题)
for j,i in enumerate(files):
        if name in i:
            print i
            fn,_,sn = i.rpartition(name)
            os.rename(os.path.join(path, i), os.path.join(path, fn+sn))
            files[j] = fn+sn
for j,i in enumerate(dir):
        if name in i:
            print i
            fn,_,sn = i.rpartition(name)
            os.rename(os.path.join(path, i), os.path.join(path, fn+sn))
            dir[j] = fn+sn