读取以digit python结尾的目录中的文件

时间:2015-12-05 14:35:56

标签: python file directory

我创建了以下代码。此代码的目的是扫描指定的目录,检查哪些文件以数字结尾,然后执行我创建的以前的python程序,该程序将对以数字结尾的文件实现更改。

def my_main():



for filenames in os.listdir("dir/"):
    if filenames.endswith("1.txt"):
        execfile('Location of previous python program')

    elif filenames.endswith("2.txt"):
        execfile('Location of previous python program')

    elif filenames.endswith("3.txt"):
        execfile('Location of previous python program')

    elif filenames.endswith("4.txt"):
        execfile('Location of previous python program')

    elif filenames.endswith("5.txt"):
        execfile('Location of previous python program')

    elif filenames.endswith("6.txt"):
        execfile('Location of previous python program')

    elif filenames.endswith("7.txt"):
        execfile('Location of previous python program')

    elif filenames.endswith("8.txt"):
        execfile('Location of previous python program')

    elif filenames.endswith("9.txt"):
        execfile('Location of previous python program')

    elif filenames.endswith("10.txt"):
        execfile('Location of previous python program')

我正在寻求帮助,因为我可以改进我的代码,我希望它更干净而不是那么混乱,我也希望它能够被推广,而不仅仅是硬连线在某个目录中工作。

任何关于如何实现这一目标的建议都将受到赞赏。

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式(来自re模块)来匹配文件名:

import re

def name_ends_with_digit(filename):
   return re.match(r'\w*\d+.txt$', filename)

def main():
   for filename in os.listdir("dir/"):
      if name_ends_with_digit(filename):
          execfile('Location of previous python program')

正则表达式检查字符串是否与模式匹配:

  1. 任意数量的单词字符(字母,数字或下划线)
  2. 后跟至少一位数
  3. 后跟'.txt'。
  4. 后面没有别的($
  5. 以下简单示例:

    import re
    
    def name_ends_with_digit(filename):
       return re.match(r'\w*\d+.txt$', filename)
    
    def check(filename):     
        if name_ends_with_digit(filename):
            print 'match'
        else:
            print 'no match'
    
    check('test1.txt')
    check('1.txt')
    check('10.txt')
    check('text1.txtyyy')
    check('text.txt')
    

    打印:

    match
    match
    match
    no match
    no match
    

答案 1 :(得分:1)

您可以使用glob查找您感兴趣的文件:

from glob import glob

files = glob("/dir/*[0-9].txt"):

同样str.endswith需要一个参数元组,所以你需要一个if而不是10:

ends = ( "1.txt","2.txt","3.txt"....)

if filenames.endswith(ends):
         ........

如果您只想查看是否有匹配使用iglob

from glob import iglob

if next(iglob("/dir/*[0-9].txt"), None):
    ............

iglob返回一个迭代器,因此如果next(iglob("/dir/*[0-9]*.txt"), None)没有返回默认None,您知道至少有一个匹配。