for循环,os.listdir()不正常
我正在为我的一个朋友写一个脚本,用来创建新的文件夹结构。因为有大约一千个客户,所以用脚本来做会省很多时间。我几乎把所有的功能都搞定了,唯一没有搞定的就是这一部分。
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'
这对我的朋友真的很有帮助,所以我很想把它做好(而且我对编程还很新手)
谢谢任何能提供的帮助
4 个回答
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'
。这样做可以让你的代码在其他操作系统上也能正常运行,而且我觉得这样写也更容易读懂。
0
在那个问题中,有一个上下文管理器可以用来暂时保存当前工作目录(cwd)。
1
在这个 for year in yearList
的循环中,你进入了每年的子目录,但可能之后再也没有离开过。所以在第一次循环时,你进入了“2005”的子目录,而在第二次循环时,你仍然停留在这个子目录里。这样就会出现错误,因为在当前的“2005”目录下找不到“2006”这个目录。
你可以通过在循环结束时再离开这个子目录来解决这个问题:
for year in yearList:
os.chdir(year)
...
os.chdir('..')