3

10 個のサブディレクトリ ("1"、"2"、... "10" という名前) を含むディレクトリ ("Top" という名前) があり、これらの各サブディレクトリには多数のテキスト ファイルが含まれています。サブディレクトリ 1 のファイルを開かずに、サブディレクトリ 2 ~ 10 のすべてのファイルを開くことができるようにしたいと考えています (次に、サブディレクトリ 2 のファイルを開かずに、サブディレクトリ 1 と 3 ~ 10 のファイルを開きます。前方へ)。現在、次のコードを使用して、サブディレクトリ 1 のファイルを読み取らずに、サブディレクトリ 2 ~ 10 のファイルを読み取ろうとしています。

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 [...]") では、サブディレクトリ 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
4

2 に答える 2

1

\問題は、定数で余分な s を使用しているという単純なものです。代わりに書いてください:

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
于 2013-08-22T00:27:00.870 に答える