Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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.listdir()无法正常工作_Python_Directory - Fatal编程技术网

Python 对于循环,os.listdir()无法正常工作

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')

我正在创建一个脚本,为我的一个朋友创建新的文件夹层次结构。大约有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')
下面是子文件夹的创建,如下所示:

# 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代表所有人:)非常感谢。看起来我有一些研究要做,所以我可以理解:)非常感谢。看起来我有一些研究要做,所以我可以理解:)