list在python中变成空白

时间:2014-08-25 21:12:03

标签: python configuration-files

我正在尝试使用"目录路径"和" prefirx_pattern"来自配置文件。 我在vdir2和vprefix2变量中得到了正确的结果,但是list local_file_list仍然是空的。

result
  vdir2 is"/home/ab_meta/abfiles/"
  vprefix2 is "rp_pck."
  []

代码

def get_files(self):
     try:
        print "vdir2 is" + os.environ['dir_path']
        print "vprefix2 is "+ os.environ['prefix_pattern']
        local_file_list = filter(os.path.isfile, glob.glob(os.environ['dir_path'] + os.environ['prefix_pattern'] +  "*"))
        print local_file_list
        local_file_list.sort(key=lambda s: os.path.getmtime(os.path.join(os.environ['dir_path'], s)))
     except Exception, e:
         print e
         self.m_logger.error("Exception: Process threw an exception " + str(e))
         log.sendlog("error",50)
         sys.exit(1)
     return local_file_list

我尝试了下面给出的另一种方法,但是再次列表是空的。

第二选项:

def get_config(self):
    try:
        v_dir_path = os.environ['dir_path']
        v_mail_prefix = os.environ['mail_prefix']
        self.m_dir_path = v_dir_path
        self.m_prefix_pattern = v_prefix_pattern
        self.m_mail_prefix = v_mail_prefix

     except KeyError, key:
           self.m_logger.error("ERROR: Unable to retrieve the key " + str(key))
     except Exception, e:
         print e
         self.m_logger.error("Error: job_prefix Unable to get variables " + str(e))
         sys.exit(1)

def get_files(self):
     try:
        local_file_list = filter(os.path.isfile, glob.glob(self.m_dir_path + self.m_prefix_pattern +  "*"))
        local_file_list.sort(key=lambda s: os.path.getmtime(os.path.join(os.environ['dir_path'], s)))
     except Exception, e:
         print e

由于 沙

2 个答案:

答案 0 :(得分:2)

在此程序之外,无论您在何处设置环境变量,都会错误地设置它们。您的环境变量中包含引号字符。

设置环境变量以获取路径数据,但没有引号。

答案 1 :(得分:0)

分配enviornment变量,然后将您感兴趣的路径传递给函数。 从函数中访问全局状态会使跟踪和调试变得困难。

使用os.walk获取文件列表,它返回根目录的元组,dirs列表和文件列表。对我而言,它比使用os.isfile过滤更干净。 使用列表推导来过滤os.walk返回的文件列表。

我假设print语句是用于调试的,所以将它们排除在外。

vdir2 = os.environ['dir_path']
vprefix2 = os.environ['prefix_pattern']

def get_files(vpath):
    for root, dirs, files in os.walk(vpath):
        local_file_list = [f for f in files if f.startswith(vprefix2)]
        local_file_list.sort(key=lambda x: os.path.getmtime(x))
        return local_file_list