2013-08-22 49 views
3

我有一个包含10个子目录(名称分别为“1”,“2”,...“10”)的目录(名称为“Top”) ,并且这些子目录中的每一个都包含大量的文本文件。我希望能够打开子目录2-10中的所有文件,而无需打开子目录1中的文件。(然后,我将打开子目录1和3-10中的文件,而不打开子目录2中的文件,等等向前)。现在,我试图读取子目录2-10文件,而不通过使用下面的代码读取子目录1文件:Python - 打开所有子目录中的所有文本文件,除非文本文件处于指定目录中

import os, fnmatch 

def findfiles (path, filter): 
    for root, dirs, files in os.walk(path): 
     for file in fnmatch.filter(files, filter): 
      yield os.path.join(root, file) 

for textfile in findfiles(r'C:\\Top', '*.txt'): 
    if textfile in findfiles(r'C:\\Top\\1', '*.txt'): 
     pass 
    else: 
     filename = os.path.basename(textfile) 
     print filename 

麻烦的是,if语句在这里(“如果文本文件中findfiles [ ...]“)不允许我从文本文件列表中排除子目录1中的文件。你们中的任何一个碰巧知道如何修改我的代码,以便仅在子目录2-10中打印这些文件的文件名?如果您有任何建议可以借阅此问题,我将非常感激。

编辑:

如果其他人可能会发现它有用,我想后我最终结束了使用来解决这个问题的代码:

import os, fnmatch, glob 

for file in glob.glob('C:\\Text\\Digital Humanities\\Packages and Tools\\Stanford Packages\\training-the-ner-tagger\\fixed\*\*'): 
    if not file.startswith('C:\\Text\\Digital Humanities\\Packages and Tools\\Stanford Packages\\training-the-ner-tagger\\fixed\\1\\'): 
     print file 

回答

2

你的循环改成这样:

for textfile in findfiles(r'C:\\Top', '*.txt'): 
    if not textfile.startswith(r'C:\\Top\\1'): 
     filename = os.path.basename(textfile) 
     print filename 
+0

感谢您的帮助,@Brent。出于某种原因,更改循环仍然不允许我忽略子目录1中的文件。如果重要,则“Top”目录深埋在我的文件系统中,所以我的路径实际上看起来像:C:\\ Directory \\半打更多目录\\顶部\\ 1 - 应该影响startswith()方法? – duhaime

+0

是的,您需要更改startswith()参数。它应该是您要从循环中排除的确切字符串(前缀)。 –

+0

感谢您的继续帮助。我改变了startswith()参数以匹配子目录1的完整路径,但是当我运行循环时,它仍然会打印只出现在子目录1中的文件名。我错过了什么吗? – duhaime

1

问题就像在常量中使用额外的\一样简单。写来代替:

for textfile in findfiles(r'C:\Top', '*.txt'): 
    if textfile in findfiles(r'C:\Top\1', '*.txt'): 
     pass 
    else: 
     filename = os.path.basename(textfile) 
     print filename 

,如果你没有使用原料(r'')字符串的\\是正确的。 如果此代码的性能太差,请尝试:

exclude= findfiles(r'C:\Top\1', '*.txt') 
for textfile in findfiles(r'C:\Top', '*.txt'): 
    if textfile in exclude: 
     pass 
    else: 
     filename = os.path.basename(textfile) 
     print filename 
相关问题