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