![](/img/trans.png)
[英]Specifying the path to a hdfs directory within a python script on anaconda
[英]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] = '/'
文件树:
结果:
['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.