2017-03-29 24 views
1

この小さなprogを作成して、ディレクトリ内のすべてのPDFを検索し、検索可能かどうかを判断して適切なディレクトリに移動します。空白のファイル名python 3.4.2

私はPythonの初心者ですが、おそらく最善の方法ではありませんが、ファイル名に空白が入るまでは動作しますが、次のように返されます。

ご協力いただければ幸いです。

>>> os.system("pdffonts.exe " + pdfFile + "> output.txt") 
99 



import os 
import glob 
import shutil 
directory = os.chdir("C:\MyDir") # Change working directory 
fileDir = glob.glob('*.pdf') # Create a list of all PDF's in declared directory 
numFiles = len(fileDir) # Lenght of list 
startFile = 0 # Counter variable 
seekWord = "TrueType" 
while startFile < numFiles: 
    pdfFile=fileDir[startFile] 
    os.system("pdffonts.exe " + pdfFile + "> output.txt") 
    file1output = open("output.txt","r") 
    fileContent = file1output.read() 
    if seekWord in fileContent: 
     shutil.move(pdfFile , "NO_OCR") 
    else: shutil.move(pdfFile, "OCR") 
    startFile = startFile + 1 
+0

コードをよりニシキヘビ作ら 'os.system( "pdffonts.exe \" "+ PDFファイル+ "\"> output.txtと")のように、ファイル名を囲む引用符をエスケープしてみ' –

答えて

2

os.system()シェルを使用してコマンドを実行します。しかし、何の理由os.system()を使用するすべてのではありません

os.system("pdffonts.exe " + shlex.quote(pdfFile) + "> output.txt") 

:あなたはshlex.quote() functionでそうすることができ引用ファイルの一部としてスペースを認識するシェルのためのあなたのファイル名、必要があるだろうシェル。あなたはsubprocess.run() functionを使用してリダイレクトまたはシェルを使用せずに出力を返すためそれを構成する必要があります。

import subprocess 

seekWord = b"TrueType" 
for pdfFile in fileDir: 
    result = subprocess.run(["pdffonts.exe", pdfFile], stdout=subprocess.PIPE) 
    fileContent = result.stdout 
    if seekWord in fileContent: 
     # ... 

pdfFileを直接pdffonts.exeに渡されているので、もはやシェルの解析と空白を心配する必要はありません問題。

result.stdoutがバイト値であるため、をbytesリテラルに変更しました(ここで結果をUnicodeにデコードする必要はありません)。

+0

ありがとうあなたの助けに。 – Mick

0

これはPythonの問題ではないようですが、Windowsシェルです。引用符で囲む必要があります。あなたのプログラムpdffonts.exeを持っていないので、私はデバッグできません。私はまた、

import os 
import glob 
import shutil 
directory = os.chdir("C:\MyDir") # Change working directory 
fileDir = glob.glob('*.pdf') # Create a list of all PDF's in declared directory 

seekWord = "TrueType" 
for pdfFile in fileDir: 
    os.system('pdffonts.exe "{0}"> output.txt'.format(pdfFile)) 
    file1output = open("output.txt","r") 
    fileContent = file1output.read() 
    if seekWord in fileContent: 
     shutil.move(pdfFile , "NO_OCR") 
    else: 
     shutil.move(pdfFile, "OCR") 
+0

ファイル名に引用符が含まれているとどうなりますか?それらはWindowsファイルパス内の有効な文字です。 –

+0

@MartijnPietersあなたの答えは間違いなく良いです。 – Wli

+0

私はちょうど私がチェックしました:Windowsファイルパスでは二重引用符は機能しませんので、pdfFileに一重引用符があると問題はないと思います。 – Wli

関連する問題