2009-12-13 111 views
1

我正在创建一个脚本来为我的一个朋友创建新的文件夹层次结构。有大约一千个客户,所以脚本会节省大量的时间。我有一切几乎工作,我没有的部分是这个。For Loop,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年是yearList列表中的第一个元素。这运行正常的2005年,但我得到这个错误:

WindowsError: [Error 2] The system cannot find the file specified: '2006' 

这将真正帮助我的朋友了,所以我非常积极地做(和漂亮[阅读:很]新的编程)

感谢您提供任何帮助

+0

对不起,我不认为我是很清楚的。目录yearList的内容正在寻找其中的目录2005,2006,2007,2008,2009和2010 – Dan 2009-12-13 04:44:27

回答

1

for year in yearList循环中,您切换到年份的子目录,但可能永远不会再离开它。因此,在第一次迭代中,您输入“2005”子目录,在第二次迭代中,您仍然在该子目录中。然后你会得到一个错误,即没有“2006”目录(在当前的“2005”目录中)。

可以解决,通过在循环结束时再次留下子目录:

for year in yearList: 
    os.chdir(year) 
    ... 
    os.chdir('..') 
+1

男人,你们真酷。非常感谢你:) – Dan 2009-12-13 05:00:30

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

非常感谢你的提示。会upvote,如果我有足够的权力这样做 – Dan 2009-12-13 04:59:54

+0

伟大工程,再次感谢:) – Dan 2009-12-13 05:07:01

0

我还没有在windows上测试过这个,但os.listdir(...)返回一个包含给定目录中每个项目名称的列表(在你的情况下,它是文件夹)。请记住,这不是绝对路径,所以当你切换到子目录时,你不能只用os.chdir()与下一个项目回来。你必须要么去了一个目录,如下所示:

os.chdir('..') 

,或者使用不同的功能来跟踪的绝对路径。

而且,在这一行:

os.chdir(driveLetter + clientName + '\\' + year + '\Folder One') 

你不应该被转义'\Folder One'\

+0

感谢您的帮助,为所有人+1 +1 – Dan 2009-12-13 05:02:19