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

查看手册条目os.walk- 如果您需要递归子目录或者glob.glob您只对单个目录感兴趣。

于 2013-08-01T07:54:08.550 回答
0

主要问题是,您在要在线程中启动的函数中做的第一件事是使用该函数创建一个新线程。

由于每个线程都会启动一个新线程,因此您应该得到越来越多的线程启动新线程,这似乎也是发生的情况。

如果你想对所有文件做一些工作,并且你想在多核机器上并行执行(我猜是这样),请查看multiprocessing模块和 Queue 类。但是在尝试并行化之前先让文件处理代码工作。

于 2013-08-01T07:59:58.357 回答