繁体   English   中英

在 Python 正则表达式中指定目录作为输入

[英]Specifying directory as an input within Python Regex

我正在尝试使用正则表达式从文件名中提取特定文本,如果我只传递一个文件名作为输入,我就可以这样做。 但是,我想对特定目录中的所有文件名执行相同的操作。 我知道re.search只能接受字符串作为输入? 有没有办法将目录作为输入传递?

下面是我正在使用的代码,

import os
import sys
import re
firstarg=sys.argv[1]
a = str(firstarg)
m = re.search(r'(?<=T)(.*)(?=\()', os.listdir( a )).group()
print (m)

尝试这个:

import os
import sys
import re
firstarg=sys.argv[1]
a = str(firstarg)
folder_list = os.listdir(a)

matches = [re.search(r'(?<=T)(.*)(?=\()', x).group() for x in folder_list]

print (matches)

但要小心re.search(r'(?<=T)(.*)(?=\()', x).group()如果没有匹配将失败

这将打印与正则表达式匹配的字符串数组。
这将在目录中的每个文件和文件夹上运行正则表达式,
如果任何文件或文件夹包含匹配项,则该匹配项将附加到数组 'm'
注意:不是递归的。

import os
import sys
import re

firstarg=sys.argv[1]
a = str(firstarg)
files = os.listdir(a)
m = []

for f in files:
    match = re.search(r'(?<=T)(.*)(?=\()', f)
    if( match != None):
        m.append( match.group() )

print (m)

例子:
sys.argv[1] = '/'

文件树:

  • /
    • 文件_Tvalue1(
    • 文件_Tvalue2(
    • 文件夹_Tvalue3(
      • 文件_Tvalue4(

结果:
['value1','value2','value3']

如果您希望它是递归的和 function。

import os
import sys
import re
def FindMatchesInDirectory(directory, afterRegex, beforeRegex, recursive=True):
    results = []
    for r, d, f in os.walk(directory):
        for path in f:
            match = re.search(r'(?<='+str(afterRegex)+')(.*)(?='+str(beforeRegex)+')', str(path))
            if( match != None):
                results.append( match.group() )    
        for path in d:
            match = re.search(r'(?<='+str(afterRegex)+')(.*)(?='+str(beforeRegex)+')', str(path))
            if( match != None):
                results.append( match.group() )    
        if ( recursive != True):
            break
    return results

示例:递归获取所有匹配项。 'T' 和 '(' 之间的任何值

print (FindMatchesInDirectory(sys.argv[1], 'T', '\('))

结果:
['value3','value2','value1','value4']

示例:获取所有匹配项而不递归

print (FindMatchesInDirectory('/', 'T', '\(', False))

结果:
['value3','value2','value1']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM