list is coming as blank in python

拈花ヽ惹草 提交于 2019-12-13 18:06:55

问题


I am trying to use "directory path" and "prefirx_pattern" from config file. I get correct results in vdir2 and vprefix2 variable but list local_file_list is still empty.

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

code

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

I have tried another way as given below but again list is coming as empty.

2nd Option :

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

Thanks Sandy


回答1:


Outside of this program, wherever you set the environment variables, you are setting them incorrectly. Your environment variables have quote characters in them.

Set your environment varaibles to have the path data, but no quotes.




回答2:


Assign the enviornment variable and then pass the path you are interested in into the function. Accessing global state from within your function can make it hard to follow and debug.

Use os.walk to get the list of files, it returns a tuple of the root dir, a list of dirs, and a list of files. For me its cleaner than using os.isfile to filter. Use a list comprehension to filter the list of files returned by os.walk.

I'm presuming the prints statements are for debugging so left them out.

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     


来源:https://stackoverflow.com/questions/25494444/list-is-coming-as-blank-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!