我需要解析运行以下格式命令的日志文件:
ID_Paths = "path\of\dataset\folder"
listing = os.listdir(ID_Paths)
for fold_Path in listing:
print("NOW input images of new individual... ", fold_Path)
image_fold = os.listdir(ID_Paths + "\\" + fold_Path)
for file in image_fold:
segments = os.listdir(ID_Paths + "\\" + fold_Path + "\\" + file)
im = ID_Paths + "\\" + fold_Path + "\\" + file + "\\" + segments
test_image = cv2.imread(im)
某些命令不使用标准输入;有些不使用stdout。
我可以轻松地将cmd分开;我在编写可以给我其他部分的正则表达式时遇到麻烦。
我知道如何匹配直到单个字符串:
How to match "anything up until this sequence of characters" in a regular expression?
在字符串OR或字符串b 之前,我不知道如何进行匹配。
也就是说,我要匹配选项直到<或>或2 >>出现。
尝试以下操作无效。
cmd options < stdin > stdout 2>> stderr
输出:
import re
test = "cmd test1 test2 -c test3 < infile > outfile 2>> err"
optRegex = '.+?(?=>|<|(2>>))'
optRegex = re.compile(optRegex)
stdoutRegex = '>+?(?=>|<|(2>>))'
stdoutRegex = re.compile(stdoutRegex)
# get options
result = optRegex.search(test)
options = result.group()
rest = test[len(options):]
options = options.rstrip()
# get stdout
result = stdoutRegex.search(rest)
stdout = result.group()
rest = rest[len(stdout):]
stdout = stdout.rstrip()
print(options)
print(stdout)
print(rest)
事后看来,使用循环并扫描开始和结束字符可能更容易,但我对正则表达式解决方案感到好奇。
谢谢!