2015-11-26 164 views
0

我需要打开名为'data'的根文件夹,然后获取该文件夹中的文件夹列表,然后获取每个文件夹的路径并执行一些代码以检查这些文件夹内部是一个'docx'文件。For循环未执行

如果仅执行这样的:

rootDir = 'data' 
for dirName, subdirList, fileList in os.walk(rootDir): 
    if dirName == 'data': 
     pass 
    else: 
     print('Found directory: %s' % dirName) 

至于结果我得到的所有文件夹

Found directory: data/2014 09 Daily Reports 
Found directory: data/2014 11 Daily Reports 
Found directory: data/2014 03 Daily Reports 
Found directory: data/2015 04 Daily Reports 
Found directory: data/2015 03 Daily Reports 
Found directory: data/2015 08 Daily Reports 
Found directory: data/2014 10 Daily Reports 
Found directory: data/2015 07 Daily Reports 
..... 

的列表,但如果我有这样的:

rootDir = 'data' 
for dirName, subdirList, fileList in os.walk(rootDir): 
    if dirName == 'data': 
     pass 
    else: 
     dirpath = os.path.abspath(dirName) 
     for root, dirs, filenames in os.walk(dirpath): 
      for f in filenames: 
       os.chdir(dirpath) 
       fn = f.replace('\xc3\xab','e') 
       os.rename(f, f.replace('\xc3\xab','e')) 
       if 'docx' in f: 
        print 'docx files are found inside this folder' 
       else: 
        pass 
     print('Found directory: %s' % dirName) 

如果执行此,结果只有这样:

Found directory: data/2014 09 Daily Reports 

为什么for循环不能执行?任何帮助?

+0

我不明白:'os.walk'会自动遍历'rootDir'中的所有文件或导向器。所有文件,以及子目录中的文件。你为什么想散步散步? – FunkySayu

+1

@FunkySayu也许OP需要在跑步之前学习如何“走路”。 – SuperBiasedMan

+2

看起来你用'os.chdir()'改变了目录,所以你不再是你想象的那样。 – kwinkunks

回答

2

发生这种情况是因为您在循环内执行os.chdir

os.walk不会发现它是在环上一次执行改为目录里面的“数据”目录下,你需要要么改变rootDir提供“全/路径/到/数据”目录中或尝试在循环内执行os.chdir("..")以返回上一个目录。

+0

谢谢你的回答!是否有任何可能,最后在其他条件改变目录回到我原来的工作目录? –

+0

是的我猜在第二个嵌套循环外面执行'os.chdir(dirpath)'和'os.chdir(“..”)'应该做这个工作。把它们分别放在它前后。 –

+0

谢谢你解决了我的问题! –