Class for file creation and directory validation

After reading some texts regarding creation of files under python, i decided to create this class which creates a new file on a directory, and creating a backup on the other directory if the file already exists (and if it's older than x hours )

The main reason i opened this question is to know if this is a correct way to write a class using try/except correctly, because actually i'm getting a little confused about the preference of using try/except instead if/elses.

Bellow, the working example:

import os
import datetime


class CreateXML():
    def __init__(self, path, filename):
        self.path = path
        self.bkp_path = "%sbackup" % path
        self.filename = filename
        self.bkp_file = "%s.previous" % filename
        self.create_check = datetime.datetime.now()-datetime.timedelta(hours=-8)

    @staticmethod
    def create_dir(path):
        try:
            os.makedirs(path)
            return True
        except:
            return False

    @staticmethod
    def file_check(file):
        try:
            open(file)
            return True
        except:
            return False

    def create_file(self, target_dir, target_file):
        try:
            target = "%s%s" % (target_dir, target_file)
            open(target, 'w')
        except:
            return False

    def start_creation(self):
        try:
            # Check if file exists
            if self.file_check("%s%s" % (self.path, self.filename)):
                self.create_dir(self.bkp_path)
                creation = os.path.getmtime("%s%s" % (self.path, self.filename))
                fcdata = datetime.datetime.fromtimestamp(creation)
                # File exists and its older than 8 hours
                if fcdata < self.create_check:
                    bkp_file_path = "%s%s " % (self.bkp_path, self.bkp_file)
                    new_file_path = "%s%s " % (self.path, self.filename)
                    # If backup file exists, erase current backup file
                    # Move existing file to backup and create new file.
                    if self.file_check("%s%s" % (self.bkp_path, self.bkp_file)):
                        os.remove(bkp_file_path)
                        os.rename(new_file_path, bkp_file_path)
                        self.create_file(self.bkp_path, self.bkp_file)
                    #No backup file, create new one.
                    else:
                        self.create_file(self.bkp_path, self.bkp_file)
            else:
                # Fresh creation
                self.create_dir(self.path)
                self.create_file(self.path, self.filename)
        except OSError, e:
            print e
if __name__ == '__main__':
    path = 'c:tempdata'
    filename = 'somefile.txt'
    cx = CreateXML(path, filename)
    cx.start_creation()

So, basically the real question here is:

-With the example above, the usage of try/except is correct?

-It's correct to perform the validations using try/except to check if file or directory allready exists? instead using a simplified version like this one:

import os
# Simple method of doing it
path = 'c:tempdata'
filename = 'somefile.txt'
bkp_path = 'c:tempdatabackup'
bkp_file = 'somefile.txt.bkp'
new_file_path = "%s%s" % (path, filename)
bkp_file_path = "%s%s" % (bkp_path, bkp_file)

if not os.path.exists(path):
    print "create path"
    os.makedirs(bkp_path)
if not os.path.isfile(new_file_path):
    print "create new file"
    open(new_file_path, 'w')
else:
    print"file exists, moving to backup folder"
    #check if backup file exists
    if not os.path.isfile(bkp_file_path):
        print "New backup file created"
        open(bkp_file_path, 'w')
    else:
        print "backup exists, removing backup, backup the current, and creating newfile"
        os.remove(bkp_file_path)
        os.rename(new_file_path, bkp_file_path)
        open(bkp_file_path, 'w')

-If the usage of try/except is correct, its recomended write an a big class to create a file if it's possible to write a short version of it?

Please do not close this tread, since i'm really confused about what is the "most correct pythonic way to do it".

Thanks in advance.

链接地址: http://www.djcxy.com/p/54678.html

上一篇: python django日志记录问题

下一篇: 文件创建和目录验证类