在Python中搜索文件夹中的“/*tmp*.log”文件

时间:2009-07-07 06:17:18

标签: python linux file directory

正如标题所说,我正在使用Linux,该文件夹可能包含多个文件,我希望得到一个名称包含*tmp*.log的文件夹(*当然意味着什么!) 。就像我使用Linux命令行一样。

3 个答案:

答案 0 :(得分:12)

使用glob模块。

>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']

答案 1 :(得分:2)

全局答案更容易,但为了完整起见:您还可以使用os.listdir和正则表达式检查:

import os
import re
dirEntries = os.listdir(path/to/dir)
for entry in dirEntries:
  if re.match(".*tmp.*\.log", entry):
    print entry

答案 2 :(得分:0)

下面的代码通过显示更复杂的搜索案例来扩展先前的答案。

我有一个受配置文件严重控制的应用程序。事实上,配置的许多版本都有不同的权衡。因此,一个配置集将导致彻底的工作但是会非常慢,而另一个配置集会更快但不会那么彻底等等。因此,GUI将具有配置组合框,其具有对应于不同配置的选项。由于我觉得这组配置会随着时间的推移而增长,我不想在应用程序中硬编码文件列表和相应的选项(及其顺序),而是采用文件命名约定来传达所有这些信息。

我使用的命名约定如下。文件位于$ MY_APP_HOME / dat目录中。文件名以my_config_开头,后跟组合索引号,后跟组合项的文本。例如:如果包含的目录(包括其他文件)my_config_11_fast_but_sloppy.txt,my_config_100_balanced.txt,my_config_3_thorough_but_slow.txt,我的组合框将有选项(按此顺序):彻底但缓慢,快速但不稳定,平衡。

所以在运行时我需要

  1. 在目录
  2. 中查找我的配置文件
  3. 从所有文件名中提取要放入组合框的选项列表
  4. 根据索引
  5. 对选项进行排序
  6. 能够从所选选项中获取文件路径
  7. 下面的MyConfiguration类只用几行代码完成所有工作(明显少于我解释目的的原因:-),它可以用作以下内容:

    # populate my_config combobox
    self.my_config = MyConfiguration()
    self.gui.my_config.addItems(self.my_config.get_items())
    
    # get selected file path
    index = self.gui.my_config.currentIndex()
    self.config_file = self.my_config.get_file_path_by_index(index);
    

    这是MyConfiguration类:

    import os, re
    
    class MyConfiguration:
        def __init__(self):
            # determine directory that contains configuration files
            self.__config_dir = '';
            env_name = 'MY_APP_HOME'
            if env_name in os.environ:
                self.__config_dir = os.environ[env_name] + '/dat/';
            else:
                raise Exception(env_name + ' environment variable is not set.')
            # prepare regular expression
            regex = re.compile("^(?P<file_name>my_config_(?P<index>\d+?)_(?P<desc>.*?)[.]txt?)$",re.MULTILINE)
            # get the list of all files in the directory
            file_names = os.listdir(self.__config_dir)
            # find all files that are our parameters files and parse them into a list of tuples: (file name, index, item_text)
            self.__items = regex.findall("\n".join(file_names))
            # sort by index as an integer
            self.__items.sort(key=lambda x: int(x[1]))
    
        def get_items(self):
            items = []
            for item in self.__items:
                items.append( self.__format_item_text(item[2]))
            return items
    
        def get_file_path_by_index(self, index):
            return self.__config_dir + self.__items[index][0]
    
        def __format_item_text(self, text):
            return text.replace("_", " ").title();