0

特定のディレクトリ (C:\files\) 内のすべての .txt ファイルをループしたいスレッドがあります。必要なのは、.txt ファイルであるそのディレクトリから何かを読み取ることだけです。私はそれを理解できないようです..特定のファイルを探す現在のコードは次のとおりです。

def file_Read(self):
    if self.is_connected:
        threading.Timer(5, self.file_Read).start();
        print '~~~~~~~~~~~~Thread test~~~~~~~~~~~~~~~'
        try:
            with open('C:\\files\\test.txt', 'r') as content_file:
                content = content_file.read()
                Num,Message = content.strip().split(';')
                print Num
                print Message
                print Num 
                self.send_message(Num + , Message)
                content_file.close()
                os.remove("test.txt")
                #except 
        except Exception as e:
            print 'no file ', e
            time.sleep(10)

誰でもこれを簡単に修正できますか?次のような方法を使用して多くのスレッドを見つけました。

directory = os.path.join("c:\\files\\","path")
        threading.Timer(5, self.file_Read).start();
        print '~~~~~~~~~~~~Thread test~~~~~~~~~~~~~~~'
        try:
            for root,dirs,files in os.walk(directory):
                for file in files:
                   if file.endswith(".txt"):
                        content_file = open(file, 'r')

しかし、これは機能していないようです。

どんな助けでも大歓迎です。前もって感謝します...

4

3 に答える 3

1

を使用して、次のようなことを行いますglob

import glob
import os
txtpattern = os.path.join("c:\\files\\", "*.txt")
files = glob.glob(txtpattern)
for f in file:
     print "Filename : %s" % f
     # Do what you want with the file

この方法は、潜在的なサブディレクトリではなく、ディレクトリ内の .txt を読み取りたい場合にのみ機能します。

于 2013-08-01T07:54:18.230 に答える
0

主な問題は、スレッドで開始したい関数で最初に行うことは、その関数で新しいスレッドを作成することです。

すべてのスレッドが新しいスレッドを開始するため、新しいスレッドを開始するスレッドの数が増えるはずです。これも起こるようです。

すべてのファイルに対して何らかの作業を行いたい場合、およびそれをマルチコア マシンで並行して行いたい場合 (これは私が推測していることです)、multiprocessingモジュールと Queue クラスを見てください。ただし、並列化を試みる前に、まずファイル処理コードを動作させてください。

于 2013-08-01T07:59:58.357 に答える
0

os.walkサブディレクトリを再帰する必要がある場合、またはglob.glob単一のディレクトリのみに関心がある場合は、-のマニュアル エントリを参照してください。

于 2013-08-01T07:54:08.550 に答える