サブプロセスを使用してコマンドを実行し、その出力を解析しようとしています。出力は型である:コマンドライン出力の解析とPythonを使用した辞書への結果の格納
OBJ 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)
すべてが正常に動作しているようです辞書の作成は除きます。問題を見つけるのを助けてくれますか?
編集:示唆したように、私はループから辞書の作成を移動し、部分的に私を助けるようです。私が得ている現在の出力は、キーごとに1つの値しか記録していません。私はそれがすべてのファイルの値を含むことを望んでいました。
( 'OBJ'、 '8')
( '/ JS'、 '2')
( '流れ'、 '1')
( 'endobj'、 ': 電流出力は次のように見えます8 ')
それがされている必要があります: (' OBJ」、 '8'、 '6'、 '5'、.....)
...
...
関数は何も返しません。それは辞書を返すべきです。 – BHawk