读取C:\\ Files \\中的所有.txt文件

时间:2013-08-01 07:44:38

标签: python

我有一个线程,我想遍历某个目录中的所有.txt文件(C:\ files \)我只需要帮助从该目录读取任何文件.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')

但这似乎不起作用。

任何帮助将不胜感激。提前谢谢......

3 个答案:

答案 0 :(得分: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而不在其潜在子目录中时才有效。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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