我正在使用子进程来执行命令,然后尝试解析其输出。输出的类型为:使用Python解析命令行输出并将结果存储在字典中
物镜6
endobj 6
第12页
...
...
,此输出将跨越一堆文件来生成。
结果应该是这样的:
[obj; 6,8,3,....所有文件]
[endobj; 6,4,5,.....所有文件]
...
...
我设法创建下列程序:
import subprocess
import os
import re
from collections import defaultdict
def run_pdfid(filename, d):
try:
p = subprocess.Popen(['python',
'/Users/as/Desktop/tools/pdfid_v0_2_1/pdfid.py',filename],stdout=subprocess.PIPE)
for line in p.stdout:
if '%PDF' in line or line.startswith('PDFiD'):
continue
pattern1 = "^\s*(\S+)\s+(\d+)"
m = re.search(pattern1, line)
key = m.group(1)
if key in d:
d[key].append(m.group(2))
else:
d[key] = m.group(2)
except Exception:
match = None
if __name__ == '__main__':
os.chdir('/Users/as/Desktop/shared/clean')
d = dict()
for root, dirs, file_names in os.walk(os.getcwd()):
for file in file_names:
#print file
run_pdfid(file, d)
for key, value in d.iteritems():
print (key, value)
似乎一切都工作正常除了字典创建。你能帮我找出问题吗?
编辑:正如所建议的,我将字典创建移出循环,它似乎帮助我部分。我得到的当前输出仅记录每个键的一个值。我希望它会包含所有文件的值。 电流输出看起来像:
( 'OBJ', '8')
( '/ JS', '2')
( '流', '1')
( 'endobj',' 8 ')
它应该是: (' OBJ”, '8', '6', '5',......)
...
...
你的函数不返回任何东西。它应该返回字典。 – BHawk