我正在创建一个脚本来为我的朋友创建新的文件夹层次结构。大约有一千个客户端,因此脚本可以节省大量时间。我有一切几乎都在工作,我没有的部分就是这个。
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是yearList列表中的第一个元素。这在2005年运行良好,但我收到此错误:
WindowsError: [Error 2] The system cannot find the file specified: '2006'
这对我的朋友来说真的很有帮助,所以我非常有动力去做这件事(而且很好[读:非常]新编程)
感谢您提供的任何帮助
答案 0 :(得分:1)
在for year in yearList
循环中,您将更改为年份的子目录,但可能永远不会再次离开。因此,在第一次迭代中,您输入“2005”子目录,在第二次迭代中,您仍然在该子目录中。然后你得到的错误是没有“2006”目录(在当前的“2005”目录中)。
您可以通过在循环结束时再次保留子目录来解决此问题:
for year in yearList:
os.chdir(year)
...
os.chdir('..')
答案 1 :(得分:0)
执行chdir后,当前目录将更改为子目录,因此以后只能使用其名称移动到另一个子目录(第一个子目录)。使用绝对路径将解决您的问题。
尝试
os.chdir(os.path.join(driveLetter, clientName, year))
在转移到兄弟姐妹之前,回到父目录os.chdir("..")
也可以。
作为旁注,请更好地使用os.path.join(driveLetter, clientName, year, "Folder One")
代替driveLetter + clientName + '\\' + year + '\Folder One'
。它还可以使您的代码在其他操作系统上运行。我会争辩说有点可读性。
答案 2 :(得分:0)
我没有在Windows上测试过这个,但os.listdir(...)
返回一个列表,其中包含给定目录中的每个项目的名称(在您的情况下,是文件夹)。请记住,这不是一个绝对路径,所以当你切换到子目录时,你不能只用os.chdir()
来回复下一个项目。你需要上一个目录,如下所示:
os.chdir('..')
或使用不同的函数来跟踪绝对路径。
另外,在这一行:
os.chdir(driveLetter + clientName + '\\' + year + '\Folder One')
你不应该逃避\
中的'\Folder One'
吗?
答案 3 :(得分:0)
您可以使用上下文管理器将cwd临时存储在该问题中: