Python打开所有子目录中的所有文本文件,除非文本文件位于指定的目录中

2024-04-27 01:14:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个目录(名为“Top”),其中包含十个子目录(名为“1”、“2”、…)10“),每个子目录都包含大量文本文件。我想能够打开子目录2-10中的所有文件,而不打开子目录1中的文件。(然后我将打开子目录1和3-10中的文件,而不打开子目录2中的文件,依此类推)。现在,我试图读取子目录2-10中的文件,而不读取子目录1中的文件,方法是使用以下代码:

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语句(“if textfile in findfiles[…])不允许我从textfile列表中排除子目录1中的文件。你们中有谁知道我该如何修改代码,以便只打印子目录2-10中那些文件的文件名吗?如果你能在这个问题上提供任何建议,我将不胜感激。在

编辑:

为了防止其他人觉得有用,我想发布我最终用来解决这个问题的代码:

^{pr2}$

Tags: 文件path代码inforifostop
2条回答

问题很简单,就是在常量中使用额外的\。改为写:

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'')字符串,\\将是正确的。 如果此代码的性能太差,请尝试:

^{2}$

将循环改为:

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

相关问题 更多 >