我正在使用子進程來執行命令,然後嘗試解析其輸出。輸出的類型爲:使用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