Python 对于循环,os.listdir()无法正常工作
我正在创建一个脚本,为我的一个朋友创建新的文件夹层次结构。大约有1000个客户机,因此一个脚本可以节省大量时间。我几乎所有的东西都在工作,我没有的是这个Python 对于循环,os.listdir()无法正常工作,python,directory,Python,Directory,我正在创建一个脚本,为我的一个朋友创建新的文件夹层次结构。大约有1000个客户机,因此一个脚本可以节省大量时间。我几乎所有的东西都在工作,我没有的是这个 yearList = os.listdir(driveLetter + clientName) for year in yearList: os.chdir(year) os.mkdir('Folder One') os.mkdir('Folder Two') os.mkdir('Folder Three')
yearList = os.listdir(driveLetter + clientName)
for year in yearList:
os.chdir(year)
os.mkdir('Folder One')
os.mkdir('Folder Two')
os.mkdir('Folder Three')
下面是子文件夹的创建,如下所示:
# Create folders under 'Folder One'
os.chdir(driveLetter + clientName + '\\' + year + '\Folder One')
os.mkdir('Sub Folder One')
os.mkdir('Sub Folder Two')
2005年是《年度清单》的第一个要素。这在2005年运行良好,但我得到以下错误:
WindowsError: [Error 2] The system cannot find the file specified: '2006'
这对我的朋友真的很有帮助,所以我很有动力去做这件事(并且对编程非常[阅读:非常]陌生)
感谢您在“年度列表中年度的<代码>循环”中提供的任何帮助,您可以更改到年度的子目录,但可能再也不会离开它了。因此,在第一次迭代中,您进入“2005”子目录,在第二次迭代中,您仍然在该子目录中。然后您会得到一个错误,即没有“2006”目录(在当前的“2005”目录中) 您可以通过在循环结束时再次离开子目录来解决此问题:
for year in yearList:
os.chdir(year)
...
os.chdir('..')
在年列表中的年的
循环中,您将更改到年的子目录,但可能再也不会离开它。因此,在第一次迭代中,您进入“2005”子目录,在第二次迭代中,您仍然在该子目录中。然后您会得到一个错误,即没有“2006”目录(在当前的“2005”目录中)
您可以通过在循环结束时再次离开子目录来解决此问题:
for year in yearList:
os.chdir(year)
...
os.chdir('..')
执行chdir后,当前目录将更改为子目录,因此以后不能仅使用其名称移动到另一个子目录(第一个子目录的同级目录)。使用绝对路径将解决您的问题
试一试
在移到同级目录之前,移回父目录os.chdir(“…”
)也可以
作为旁注,最好使用os.path.join(driveLetter,clientName,year,“Folder One”)
而不是driveLetter+clientName+'\\'+year+'\Folder One'
。它将使您的代码也能在其他操作系统上工作。我想说的是更具可读性。执行chdir后,当前目录将更改为子目录,因此以后不能仅使用其名称移动到另一个子目录(第一个子目录的同级目录)。使用绝对路径将解决您的问题
试一试
在移到同级目录之前,移回父目录os.chdir(“…”
)也可以
作为旁注,最好使用os.path.join(driveLetter,clientName,year,“Folder One”)
而不是driveLetter+clientName+'\\'+year+'\Folder One'
。它将使您的代码也能在其他操作系统上工作。我想说的是更具可读性。我没有在windows上测试过这一点,但是os.listdir(…)
返回一个列表,其中包含给定目录(在您的例子中是文件夹)中每个项目的名称。请记住,这不是一个绝对路径,因此当您切换到子目录时,您不能只使用下一个要返回的项os.chdir()
。您需要按如下方式进入目录:
os.chdir('..')
或者使用不同的函数跟踪绝对路径
此外,在这方面:
os.chdir(driveLetter + clientName + '\\' + year + '\Folder One')
您是否应该转义'\Folder One'
中的\
?我没有在windows上测试过这一点,但是os.listdir(…)
返回一个列表,其中包含给定目录(在您的情况下是文件夹)中每个项目的名称。请记住,这不是一个绝对路径,因此当您切换到子目录时,您不能只使用下一个要返回的项os.chdir()
。您需要按如下方式进入目录:
os.chdir('..')
或者使用不同的函数跟踪绝对路径
此外,在这方面:
os.chdir(driveLetter + clientName + '\\' + year + '\Folder One')
您是否应该在'\Folder One'
中转义\
?在这个问题中,您可以使用上下文管理器临时存储cwd:
有一个上下文管理器,您可以使用它临时存储该问题中的cwd:
对不起,我想我不是很清楚。目录年鉴的内容是2005年、2006年、2007年、2008年、2009年和2010年的目录对不起,我想我不是很清楚。目录年表的内容是看有目录2005年,2006年,2007年,2008年,2009年和2010年在他们非常感谢你的提示。如果我有足够的权力,我会投票的。非常感谢你给我小费。如果我有足够的权力去做,我会投票感谢你的帮助,+1代表所有人:)谢谢你的帮助,+1代表所有人:)非常感谢。看起来我有一些研究要做,所以我可以理解:)非常感谢。看起来我有一些研究要做,所以我可以理解:)