2017-12-28 7 views
1

私はPythonの初心者です。私は、ディレクトリとサブディレクトリ内のすべてのファイルをパスを通して読み込み、関連するファイルを1つのファイルに結合しようとしています。同時に私はいくつかの特定のサブディレクトリを除外したいと私はこのステップで立ち往生している。専門家からの助けを感謝!!スキップする複数の読み込みを行っているときにディレクトリを除外する方法は?

/usr/home/micro/**/*.txt 

サブディレクトリ:ここ

は、いくつかの詳細は

メインパスしているこれまで

/usr/home/micro/frame/test 

私のPythonコード


#!/usr/bin/env python3 

import os 
import sys 
import glob 

complete = glob.glob('/usr/home/micro/**/*.txt', recursive=True) 

def test(): 
    with open("results.txt", "w") as f: 
     for name in complete: 
      for root, dirs, files in os.walk("/usr/home/micro/frame/"): 
       for skipped in ("/usr/home/micro/frame/test"): 
        if skipped in dirs: 
         dirs.remove(skipped) 
      with open(name) as currentfile: 
       current = currentfile.read() 
        f.write(current) 

def main(): 
    test() 

main() 
ため

def test(): 
    with open("results.txt", "w") as f: 
     for name in complete: 
      if name.startswith("/usr/home/micro/frame/test"): 
       continue 
      with open(name) as currentfile: 
       current = currentfile.read() 
        f.write(current) 

必要がありませんすでに私たちglob.glob場合:

答えて

0

はちょうどあなたのパスで始まる名前をスキップします。

+0

をこれが美しく働いており、実装する方法は簡単です。 すべてのエキスパートに感謝します。 – Pythonbee

0

スキップするディレクトリの名前は "/ usr/home/micro/frame/test"ファイルにあります。次に、リストにこのファイルを読み込み、そのリストを使用する必要があります。

with open("skipfilenames.txt", "r") as f: 
    skiplist = f.read().splitlines() 

次にあなたが使用することができます。

for skipped in skiplist: 
... 
1

for skipped in ("/usr/home/micro/frame/test"):ラインは、あなたはそれがないと思う何をしません。タプルを反復するのではなく、単一のパスの文字を繰り返します。

タプルにするには、かっこの終わりの直前にカンマが必要です(("/usr/home/micro/frame/test",))。カンマがなければ、かっこはオペレーションヒントの不必要な順序です((2*2)+12*2+1と同じです)。また、除外するパスを1つしか持たない場合は、ループを完全に取り除くこともできます。

実際に不要なフォルダを除外しようとする以外のループで役に立つものは何も実行していないため、コード自体は修正されません。しかし、あなたがcompleteのループを取り除き、os.walkからfiles iterableを使用した場合、あなたが望むと思うことをすることができます。

はこのような何か試してみてください:

def test(): 
    with open("results.txt", "w") as f: 
     for root, dirs, files in os.walk("/usr/home/micro/frame/"): # get rid of first loop 
      for skipped in ("/usr/home/micro/frame/test",):  # add comma to make a tuple 
       if skipped in dirs: 
        dirs.remove(skipped) 
      for name in files:   # move the rest of the logic inside the os.walk loop 
       fullname = os.path.join(root, name) 
       with open(fullname) as currentfile: 
        current = currentfile.read() 
       f.write(current) 
関連する問題