source: flex_extract.git/source/python/classes/UioFiles.py @ 25b14be

ctbtodev
Last change on this file since 25b14be was 25b14be, checked in by Anne Philipp <anne.philipp@…>, 6 years ago

changed whole tree structure of flex_extract to have better overview

  • Property mode set to 100644
File size: 4.6 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3#*******************************************************************************
4# @Author: Anne Fouilloux (University of Oslo)
5#
6# @Date: October 2014
7#
8# @Change History:
9#
10#    November 2015 - Leopold Haimberger (University of Vienna):
11#        - modified method list_files to work with glob instead of listdir
12#        - added pattern search in method list_files
13#
14#    February 2018 - Anne Philipp (University of Vienna):
15#        - applied PEP8 style guide
16#        - added documentation
17#        - optimisation of method list_files since it didn't work correctly
18#          for sub directories
19#        - additional speed up of method list_files
20#        - modified the class so that it is initiated with a pattern instead
21#          of suffixes. Gives more precision in selection of files.
22#
23# @License:
24#    (C) Copyright 2014-2018.
25#
26#    This software is licensed under the terms of the Apache Licence Version 2.0
27#    which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
28#
29# @Class Decription:
30#    The class is for file manipulation. It is initiated with a regular
31#    expression pattern for this instance and can produce a list of Files
32#    from the given file pattern. These files can be deleted.
33#
34# @Class Content:
35#    - __init__
36#    - __str__
37#    - __list_files__
38#    - delete_files
39#
40# @Class Attributes:
41#    - pattern
42#    - files
43#
44#*******************************************************************************
45
46# ------------------------------------------------------------------------------
47# MODULES
48# ------------------------------------------------------------------------------
49import os
50import fnmatch
51
52# software specific module from flex_extract
53#import profiling
54from mods.tools import silent_remove, get_list_as_string
55
56# ------------------------------------------------------------------------------
57# CLASS
58# ------------------------------------------------------------------------------
59
60class UioFiles(object):
61    '''
62    Class to manipulate files. At initialisation it has the pattern
63    which stores a regular expression pattern for the files, the path
64    to the files and the files already.
65    '''
66    # --------------------------------------------------------------------------
67    # CLASS FUNCTIONS
68    # --------------------------------------------------------------------------
69    def __init__(self, path, pattern):
70        '''
71        @Description:
72            Assignes a specific pattern for these files.
73
74        @Input:
75            self: instance of UioFiles
76                Description see class documentation.
77
78            path: string
79                Directory where to list the files.
80
81            pattern: string
82                Regular expression pattern. For example: '*.grb'
83
84        @Return:
85            <nothing>
86        '''
87
88        self.path = path
89        self.pattern = pattern
90        self.files = []
91
92        self.__list_files__(self.path)
93
94        return
95
96    #@profiling.timefn
97    def __list_files__(self, path):
98        '''
99        @Description:
100            Lists all files in the directory with the matching
101            regular expression pattern.
102
103        @Input:
104            self: instance of UioFiles
105                Description see class documentation.
106
107            path: string
108                Path to the files.
109
110        @Return:
111            <nothing>
112        '''
113        # Get the absolute path
114        path = os.path.abspath(path)
115
116        # get all files in the dir and subdir as absolut path
117        for root, dirnames, filenames in os.walk(path):
118            for filename in fnmatch.filter(filenames, self.pattern):
119                self.files.append(os.path.join(root, filename))
120
121        return
122
123    def __str__(self):
124        '''
125        @Description:
126            Converts the list of files into a single string.
127            The entries are sepereated by "," sign.
128
129        @Input:
130            self: instance of UioFiles
131                Description see class documentation.
132
133        @Return:
134            files_string: string
135                The content of the list as a single string.
136        '''
137
138        filenames = [os.path.basename(f) for f in self.files]
139        files_string = get_list_as_string(filenames, concatenate_sign=', ')
140
141        return files_string
142
143    def delete_files(self):
144        '''
145        @Description:
146            Deletes the files.
147
148        @Input:
149            self: instance of UioFiles
150                Description see class documentation.
151
152        @Return:
153            <nothing>
154        '''
155
156        for old_file in self.files:
157            silent_remove(old_file)
158
159        return
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG