※ ChatGPTを利用し、要約された質問です(原文:pythonのスクリプトが動きません)
Pythonのスクリプトが動かない!PDFファイルを自動分割する方法
このQ&Aのポイント
Python3.7.0b3とPDFtkを使用したPDFファイルの自動分割スクリプトが動作しない場合について説明します。
スクリプトの実行手順や環境設定に問題がある可能性があります。
Windows7上での実行に関して、Pythonのバージョンとスクリプトの整合性を確認する必要があります。
Webで"大きなPDFファイルを自動分割するPythonスクリプト"
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import glob
import math
import subprocess
import re
#==-User Parameter====
MAX_PDF_SIZE_MB=80
class PdfSplit:
def __init__(self, fileName, resultpath):
print("Split file name is "+fileName)
#FileSizeCheck
fsizeMB=float(os.path.getsize(fileName))/1000000
print("file size is "+str(fsizeMB)+" MB")
if fsizeMB<=MAX_PDF_SIZE_MB:
print("Not need split")
return;
nSplit=int(math.ceil(fsizeMB/MAX_PDF_SIZE_MB))
print("nSplit:"+str(nSplit))
nPage=self.GetPdfPageNumber(fileName)
# nPage=888
print("nPage:"+str(nPage))
if nPage==0:
print("Error: cannot read page:"+fileName)
return
onePage=int(math.ceil(nPage/nSplit))
print("onePage:"+str(onePage))
#result path
finalpath=resultpath+"/"+fileName[2:-4]
print("finalpath:"+finalpath)
#Page split
startpage=1
for i in range(nSplit):
endpage=(i+1)*onePage
if i==nSplit-1:
endpage=nPage
print "start page:"+str(startpage)+",endpage:"+str(endpage)
cmd="pdftk "+fileName+" cat "+str(startpage)+"-"+str(endpage)+" output "+finalpath+"_"+str(i+1)+".pdf"
# pdftk 元ファイル名.pdf cat 開始ページ-終了ページ output 出力ファイル名.pdf
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.wait()
stdout_data, stderr_data = p.communicate()
print stderr_data
startpage=endpage+1
def GetPdfPageNumber(self,fileName):
cmd="pdftk "+fileName+" data_dump"
print cmd
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# p.wait()
stdout_data, stderr_data = p.communicate()
extracted=0
count=0
for strline in stdout_data.split("\n"):
# print strline
#sample NumberOfPages: 344
if "NumberOfPages" in strline:
number = re.search("\d+",strline)
extracted = number.group()
break
count+=1
if count>=100:
break
return int(extracted)
class SplitManager():
def __init__(self):
print "init"
def Main(self):
#Create Result dir
RESULT_DIR='results'
if not os.path.isdir(RESULT_DIR):
os.mkdir(RESULT_DIR)
files = glob.glob('./*.pdf')
for file in files:
PdfSplit(file,RESULT_DIR)
if __name__ == '__main__':
print __file__+" start!!"
manager=SplitManager()
manager.Main()
が公開されていたので使用しようと思ったのですがうまく動作しません。
このスクリプトを使用するためにPython3.7.0b3とPDFtkをインストールしました。
そして、公開されていたシクリプトをtextにコピーしてpdf.pyという名前で保存しました。
最後にpdfファイルを収納したフォルダにpdf.pyを入れて、pdf.pyを実行しました。
しかしコマンドプロンプトが一瞬表示されるだけで動作しませんでした。
何か間違っているから動かないのだと思うのですが分からないので教えてください。
Pythonスクリプトの実行手順はこれで合ってますか。
それともPythonのスクリプトとバージョンが合ってないのでしょうか。
PCはWindows7です。
回答よろしくお願いします。
お礼
ご回答ありがとうございます。 Pythonのバージョンを3から2にインストールしなおしたらpythonのスクリプトが動くようになりました。