我有一个线程,我想遍历某个目录中的所有.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')
但这似乎不起作用。
任何帮助将不胜感激。提前谢谢......
答案 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模块,和队列类。但在尝试并行化之前,请先让文件处理代码 。