On 03/29/2015 07:37 AM, Saran Ahluwalia wrote:
On Sunday, March 29, 2015 at 7:33:04 AM UTC-4, Saran Ahluwalia wrote:
Below are the function's requirements. I am torn between using the OS module or some 
other quick and dirty module. In addition, my ideal assumption that this could be 
cross-platform. "Records" refers to contents in a file. What are some 
suggestions from the Pythonistas?

* Monitors a folder for files that are dropped throughout the day

* When a file is dropped in the folder the program should scan the file

o IF all the records in the file have the same length

o THEN the file should be moved to a "success" folder and a text file written 
indicating the total number of records processed

o IF the file is empty OR the records are not all of the same length

o THEN the file should be moved to a "failure" folder and a text file written 
indicating the cause for failure (for example: Empty file or line 100 was not the same 
length as the rest).

Below are some functions that I have been playing around with. I am not sure 
how to create a functional program from each of these constituent parts. I 
could use decorators or simply pass a function within another function.

Your problem isn't complicated enough to either need function objects or decorators. You might want to write a generator function, but even that seems overkill for the problem as stated. Just write the code, top-down, with dummy bodies containing stub code. Then fill it in from bottom up, with unit tests for each completed function.

More complex problems can justify a different approach, but you don't need to use every trick in the arsenal.


[code]
import time
import fnmatch
import os
import shutil


If you have code fragments that aren't going to be used, don't write them as top-level code. Either move them to another file, or at least enclose them in a function with a name like dummy_do_not_use()

My own convention for that is to suffix the function name with a bunch of uppercase ZZZ's That way the name jumps out at me so I'll recognize it, and I can be sure I'll never actually call it.


#If you want to write to a file, and if it doesn't exist, do this:

if not os.path.exists(filepath):
     f = open(filepath, 'w')

#If you want to read a file, and if it exists, do the following:

try:
     f = open(filepath)
except IOError:
     print 'I will be moving this to the '


#Changing a directory to "/home/newdir"
os.chdir("/home/newdir")

As Peter said, chdir can be very troublesome. Avoid at almost all costs. As you've done elsewhere, use os.path.join() to combine directory paths with relative filenames.


def move(src, dest):
     shutil.move(src, dest)

def fileinfo(file):
     filename = os.path.basename(file)
     rootdir = os.path.dirname(file)
     lastmod = time.ctime(os.path.getmtime(file))
     creation = time.ctime(os.path.getctime(file))
     filesize = os.path.getsize(file)

     print "%s**\t%s\t%s\t%s\t%s" % (rootdir, filename, lastmod, creation, 
filesize)

searchdir = r'D:\Your\Directory\Root'
matches = []

def search
for root, dirnames, filenames in os.walk(searchdir):

Why are you using a directory tree when your "spec" said the files would be in a specific directory?

     ##  for filename in fnmatch.filter(filenames, '*.c'):
     for filename in filenames:
         ##      matches.append(os.path.join(root, filename))
         ##print matches
         fileinfo(os.path.join(root, filename))


def get_files(src_dir):
# traverse root directory, and list directories as dirs and files as files
     for root, dirs, files in os.walk(src_dir):
         path = root.split('/')
         for file in files:
             process(os.path.join(root, file))
                     os.remove(os.path.join(root, file))

Probably you shouldn't have os.remove in the code till the stuff around it has been carefully tested. Besides, nothing in the spec says you're going to remove any files.


def del_dirs(src_dir):
     for dirpath, _, _ in os.walk(src_dir, topdown=False):  # Listing the files
         if dirpath == src_dir:
             break
         try:
             os.rmdir(dirpath)
         except OSError as ex:
             print(ex)


def main():
     get_files(src_dir)
     del_dirs(src_dir)


Your description says "monitor". That implies to me an ongoing process, or a loop. You probably want something like:

def main():
    while True:
        process_files(directory_name)
        sleep(10000)


if __name__ == "__main__":
     main()


[/code]



--
DaveA
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to