首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -打开所有子目录中的所有文本文件,除非文本文件位于指定的目录中

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

Stack Overflow用户
提问于 2013-08-22 00:18:42
回答 2查看 3K关注 0票数 3

我有一个目录(名为"Top"),其中包含十个子目录(名为"1“、"2”、"10"),每个子目录都包含大量的文本文件。我希望能够打开子目录2-10中的所有文件,而不需要打开子目录1中的文件。(然后,我将打开子目录1和3-10中的文件,而不打开子目录2中的文件,等等)。现在,我正在尝试使用以下代码读取子目录2-10中的文件,而不读取子目录1中的文件:

代码语言:javascript
复制
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中的if文本文件.”)不允许我从文本文件列表中排除子目录1中的文件。你们中有人知道我如何修改我的代码,以便只在子目录2-10中打印这些文件的文件名吗?如果你能在这个问题上提供任何建议,我将不胜感激。

编辑:

如果其他人可能发现它有帮助,我想发布我最终用来解决这个问题的代码:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-22 00:24:10

将循环更改为:

代码语言:javascript
复制
for textfile in findfiles(r'C:\\Top', '*.txt'):
    if not textfile.startswith(r'C:\\Top\\1'):
        filename = os.path.basename(textfile)
        print filename
票数 2
EN

Stack Overflow用户

发布于 2013-08-22 00:27:00

问题就像在常量中使用额外的\一样简单。相反,写:

代码语言:javascript
复制
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

如果没有使用raw ( \\ )字符串,则\\将是正确的。如果此代码的性能太差,请尝试:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18369726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档