DeanMWake
DeanMWake

Reputation: 923

Reading all .txt files in C:\\Files\\

I have a thread that I would like to loop through all of the .txt files in a certain directory (C:\files\) All I need is help reading anything from that directory that is a .txt file. I cant seem to figure it out.. Here is my current code that looks for specific files:

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)

does anyone have a simple fix for this? I have found a lot of threads using methods like:

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')

but this doesn't seem to be working.

Any help would be appreciated. Thanks in advance...

Upvotes: 0

Views: 312

Answers (3)

Lennart Regebro
Lennart Regebro

Reputation: 172249

The main problem is that the first thing you do in the function that you want to start in the threads is that you create a new thread with that function.

Since every thread will start a new thread, you should get an increasing number of threads starting new threads, which also seems to be what happens.

If you want to do some work on all the files, and you want to do that in parallel on a multi-core machine (which is what I'm guessing) take a look at the multiprocessing module, and the Queue class. But get the file handling code working first before you try to parallelize it.

Upvotes: 0

Maxime Lorant
Maxime Lorant

Reputation: 36161

I would do something like this, by using 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

This method works only if you want to read .txt in your directory and not in its potential subdirectories.

Upvotes: 1

Steve Barnes
Steve Barnes

Reputation: 28380

Take a look at the manual entries for os.walk - if you need to recurse sub-directories or glob.glob if you are only interested in a single directory.

Upvotes: 0

Related Questions