質問するログイン新規登録

質問編集履歴

7

スクリプトを修正

2020/09/13 00:03

投稿

SatelliteStar
SatelliteStar

スコア2

title CHANGED
File without changes
body CHANGED
@@ -41,48 +41,54 @@
41
41
  pdflist = []
42
42
  evencounter = 0
43
43
  oddcounter = 0
44
- for filename in listdir("."):
44
+ for filename in os.listdir(os.getcwd()):
45
45
  #このファイルが置かれているディレクトリ内のファイルやフォルダを走査
46
+
46
- if filename.endswith(".pdf"):
47
+ if filename.endswith(r".pdf"):
47
48
  #ファイルネーム末尾が".pdf"で終わるファイルは、ファイルネームをpdflistに追加する。
48
49
  pdflist.append(filename)
49
50
 
50
- if filename.lower().startswithwith("even_"):
51
+ if filename.lower().startswith(r"even_"):
51
52
  #ファイル名が"even.pdf"で終わる場合(偶数ページのみがスキャンされているファイルの場合)、evencounterを足していく。
52
53
  #大文字の拡張子の可能性も考慮し、lowerメソッドを組んでいる。
53
54
  evencounter += 1
54
55
 
55
- if filename.lower().startswith("odd_"):
56
+ if filename.lower().startswith(r"odd_"):
56
57
  #ファイル名が"odd.pdf"で終わる場合(奇数ページのみがスキャンされているファイルの場合)、oddcounterを足していく。
57
58
  #大文字の拡張子の可能性も考慮し、lowerメソッドを組んでいる。
58
59
  oddcounter += 1
59
60
 
60
61
  if evencounter != 1 or oddcounter != 1:
61
62
  print("エラーが発生しました。")
62
- print(r'このファイルに置かれているPDFファイルは、"even_~~.pdf"あるいは"odd_~~.pdf"の2つのファイルのみでなくてはなりません。')
63
+ print(r"このファイルに置かれているPDFファイルは、'even_~~.pdf'あるいは'odd_~~.pdf'の2つのファイルのみでなくてはなりません。")
63
64
  print("プログラムを終了します。")
64
65
  sys.exit()
65
66
 
66
67
  pdflist.reverse()
67
68
  #pdflistに格納されているファイルが["even_~~.pdf","odd_~~.pdf"]のみであったとして、リスト内をeven,oddからodd,evenの順番にするためにソートする。
69
+ #key=str.lowerで、大文字小文字を区別しないようにしている。
68
70
 
69
71
  pdfwriter = PyPDF2.PdfFileWriter()
70
72
  #結合したPDFファイルを保持するために、オブジェクトを作成しておく。
71
73
 
72
74
  #奇数ページファイルの読み込みオブジェクト
75
+ odd_file_name = os.getcwd() + "\" + pdflist[0]
76
+ print(odd_file_name)
73
- odd_object = open(pdflist[0],"rb")
77
+ odd_object = open(odd_file_name,"rb") #pdflist[0]には、oddのファイルがある。
74
- odd_pdf = PyPDF2.PdfFileReader()
78
+ odd_pdf = PyPDF2.PdfFileReader(odd_object)
75
79
 
76
80
  #偶数ページファイルの読み込みオブジェクト
81
+ even_file_name = os.getcwd() + "\" + pdflist[1]
82
+ print(even_file_name)
77
- even_object = open(pdflist[1],"rb")
83
+ even_object = open(even_file_name,"rb") #pdflist[1]には、evenのファイルがある。
78
- even_pdf = PyPDF2.PdfFileReader()
84
+ even_pdf = PyPDF2.PdfFileReader(even_object)
79
85
 
80
86
  #evenとoddが同じ枚数の紙からスキャンしたオブジェクトなら、ページ数が揃うはず。その検証を行う。
81
87
  #evenのページ数を取得する。
82
88
  odd_num_page = odd_pdf.numPages
83
89
  even_num_page = even_pdf.numPages
84
90
  superchecker = 0
85
- #58行目のような状況に遭遇した場合の排他処理そするための識別コード:デフォルトは1で、if文に引っかかった場合に1とする。
91
+ #57行目のような状況に遭遇した場合の排他処理そするための識別コード:デフォルトは1で、if文に引っかかった場合に1とする。
86
92
  if odd_num_page != even_num_page:
87
93
  print("異なる文書からスキャンた奇数ページファイル、偶数ページファイルを誤って組み合わせないようにするための、安全用プログラムが作動しました。")
88
94
  print("同じ文書からスキャンして得られた偶数ページファイルと奇数ページファイルは、同じページ数になるはずです。")
@@ -92,12 +98,11 @@
92
98
  if chenknum == 1:
93
99
  superchecker = 1
94
100
  #57行目の状況に該当するので、1にしておく。
95
- break
96
101
  else:
97
102
  print("プログラムを終了します。")
98
103
  sys.exit()
99
104
 
100
- #58行目にある状況を想定して、2つのファイルのページ数で、大きい方を格納する。
105
+ #57行目にある状況を想定して、2つのファイルのページ数で、大きい方を格納する。
101
106
  if even_num_page > odd_num_page or even_num_page == odd_num_page:
102
107
  maxpagenum = even_num_page
103
108
  else:
@@ -105,7 +110,7 @@
105
110
 
106
111
  #PDFを、いよいよマージする。
107
112
  if superchecker == 0:
108
- #まずは、58行目のような状態でない場合(supercheckerが0の場合)
113
+ #まずは、57行目のような状態でない場合(supercheckerが0の場合)
109
114
  for pagenum in range(0,maxpagenum):
110
115
  oddpageobject = odd_pdf.getPage(pagenum)
111
116
  pdfwriter = addPage(oddpageobject)
@@ -113,7 +118,7 @@
113
118
  pdfwriter = addPage(evenpageobject)
114
119
 
115
120
  #マージングが終了したので、最後に書き出す
116
- pdfoutput = open("merged.pdf","wb") #"meiged.pdf"という名前のPDFを作成する
121
+ pdfoutput = open(r"merged.pdf","wb") #"meiged.pdf"という名前のPDFを作成する
117
122
  pdfwriter.write(pdfoutput) #書き出す
118
123
  pdfoutput.close() #書き込みの終了
119
124
  print("すべての処理が正常に完了しました。")
@@ -121,7 +126,7 @@
121
126
  print("プログラムを終了します。")
122
127
 
123
128
  else:
124
- #次は、58行目のような状態である場合(superchecker1の場合)
129
+ #次は、57行目のような状態である場合(superchecker1の場合)
125
130
  for pagenum in range(0,maxpagenum-1):
126
131
  oddpageobject = odd_pdf.getPage(pagenum)
127
132
  pdfwriter = addPage(oddpageobject)
@@ -133,11 +138,11 @@
133
138
  pdfwriter = addPage(lastpageobject)
134
139
 
135
140
  #マージングが終了したので、最後に書き出す
136
- pdfoutput = open("merged.pdf","wb") #"meiged.pdf"という名前のPDFを作成する
141
+ pdfoutput = open(r"merged.pdf","wb") #"meiged.pdf"という名前のPDFを作成する
137
142
  pdfwriter.write(pdfoutput) #書き出す
138
143
  pdfoutput.close() #書き込みの終了
139
144
  print("すべての処理が正常に完了しました。")
140
- print(r'merged.pdfという名前のファイルが保存されているはずです。')
145
+ print(r"merged.pdfという名前のファイルが保存されているはずです。")
141
146
  print("プログラムを終了します。")
142
147
 
143
148
  ```

6

スクリプトをフルバージョンに更新済み

2020/09/13 00:02

投稿

SatelliteStar
SatelliteStar

スコア2

title CHANGED
File without changes
body CHANGED
@@ -82,7 +82,7 @@
82
82
  odd_num_page = odd_pdf.numPages
83
83
  even_num_page = even_pdf.numPages
84
84
  superchecker = 0
85
- #57行目のような状況に遭遇した場合の排他処理そするための識別コード:デフォルトは1で、if文に引っかかった場合に1とする。
85
+ #58行目のような状況に遭遇した場合の排他処理そするための識別コード:デフォルトは1で、if文に引っかかった場合に1とする。
86
86
  if odd_num_page != even_num_page:
87
87
  print("異なる文書からスキャンた奇数ページファイル、偶数ページファイルを誤って組み合わせないようにするための、安全用プログラムが作動しました。")
88
88
  print("同じ文書からスキャンして得られた偶数ページファイルと奇数ページファイルは、同じページ数になるはずです。")
@@ -97,7 +97,7 @@
97
97
  print("プログラムを終了します。")
98
98
  sys.exit()
99
99
 
100
- #57行目にある状況を想定して、2つのファイルのページ数で、大きい方を格納する。
100
+ #58行目にある状況を想定して、2つのファイルのページ数で、大きい方を格納する。
101
101
  if even_num_page > odd_num_page or even_num_page == odd_num_page:
102
102
  maxpagenum = even_num_page
103
103
  else:
@@ -105,7 +105,7 @@
105
105
 
106
106
  #PDFを、いよいよマージする。
107
107
  if superchecker == 0:
108
- #まずは、57行目のような状態でない場合(supercheckerが0の場合)
108
+ #まずは、58行目のような状態でない場合(supercheckerが0の場合)
109
109
  for pagenum in range(0,maxpagenum):
110
110
  oddpageobject = odd_pdf.getPage(pagenum)
111
111
  pdfwriter = addPage(oddpageobject)
@@ -121,7 +121,7 @@
121
121
  print("プログラムを終了します。")
122
122
 
123
123
  else:
124
- #次は、57行目のような状態である場合(superchecker1の場合)
124
+ #次は、58行目のような状態である場合(superchecker1の場合)
125
125
  for pagenum in range(0,maxpagenum-1):
126
126
  oddpageobject = odd_pdf.getPage(pagenum)
127
127
  pdfwriter = addPage(oddpageobject)

5

スクリプトをフルバージョンに更新済み

2020/09/12 14:05

投稿

SatelliteStar
SatelliteStar

スコア2

title CHANGED
File without changes
body CHANGED
@@ -63,19 +63,18 @@
63
63
  print("プログラムを終了します。")
64
64
  sys.exit()
65
65
 
66
- pdflist.reverse(key=str.lower)
66
+ pdflist.reverse()
67
67
  #pdflistに格納されているファイルが["even_~~.pdf","odd_~~.pdf"]のみであったとして、リスト内をeven,oddからodd,evenの順番にするためにソートする。
68
- #key=str.lowerで、大文字小文字を区別しないようにしている。
69
68
 
70
69
  pdfwriter = PyPDF2.PdfFileWriter()
71
70
  #結合したPDFファイルを保持するために、オブジェクトを作成しておく。
72
71
 
73
72
  #奇数ページファイルの読み込みオブジェクト
74
- odd_object = open(pdflist[0],"rb") #pdflist[0]には、oddのファイルがある。
73
+ odd_object = open(pdflist[0],"rb")
75
74
  odd_pdf = PyPDF2.PdfFileReader()
76
75
 
77
76
  #偶数ページファイルの読み込みオブジェクト
78
- even_object = open(pdflist[1],"rb") #pdflist[1]には、evenのファイルがある。
77
+ even_object = open(pdflist[1],"rb")
79
78
  even_pdf = PyPDF2.PdfFileReader()
80
79
 
81
80
  #evenとoddが同じ枚数の紙からスキャンしたオブジェクトなら、ページ数が揃うはず。その検証を行う。

4

スクリプトをフルバージョンに更新済み

2020/09/12 14:03

投稿

SatelliteStar
SatelliteStar

スコア2

title CHANGED
File without changes
body CHANGED
@@ -39,40 +39,108 @@
39
39
  import PyPDF2, os, sys
40
40
 
41
41
  pdflist = []
42
+ evencounter = 0
43
+ oddcounter = 0
42
- for filename in os.listdir(os.getcwd()):
44
+ for filename in listdir("."):
43
45
  #このファイルが置かれているディレクトリ内のファイルやフォルダを走査
44
- if filename.endswith(r".pdf"):
46
+ if filename.endswith(".pdf"):
45
47
  #ファイルネーム末尾が".pdf"で終わるファイルは、ファイルネームをpdflistに追加する。
46
48
  pdflist.append(filename)
47
49
 
50
+ if filename.lower().startswithwith("even_"):
51
+ #ファイル名が"even.pdf"で終わる場合(偶数ページのみがスキャンされているファイルの場合)、evencounterを足していく。
52
+ #大文字の拡張子の可能性も考慮し、lowerメソッドを組んでいる。
53
+ evencounter += 1
54
+
55
+ if filename.lower().startswith("odd_"):
56
+ #ファイル名が"odd.pdf"で終わる場合(奇数ページのみがスキャンされているファイルの場合)、oddcounterを足していく。
57
+ #大文字の拡張子の可能性も考慮し、lowerメソッドを組んでいる。
58
+ oddcounter += 1
59
+
60
+ if evencounter != 1 or oddcounter != 1:
61
+ print("エラーが発生しました。")
62
+ print(r'このファイルに置かれているPDFファイルは、"even_~~.pdf"あるいは"odd_~~.pdf"の2つのファイルのみでなくてはなりません。')
63
+ print("プログラムを終了します。")
64
+ sys.exit()
65
+
48
- pdflist.reverse()
66
+ pdflist.reverse(key=str.lower)
67
+ #pdflistに格納されているファイルが["even_~~.pdf","odd_~~.pdf"]のみであったとして、リスト内をeven,oddからodd,evenの順番にするためにソートする。
68
+ #key=str.lowerで、大文字小文字を区別しないようにしている。
69
+
49
70
  pdfwriter = PyPDF2.PdfFileWriter()
71
+ #結合したPDFファイルを保持するために、オブジェクトを作成しておく。
50
72
 
51
73
  #奇数ページファイルの読み込みオブジェクト
52
- #ここの部分でエラー
53
- odd_file_name = os.getcwd() + "\" + pdflist[0]
54
- print(odd_file_name)
55
- odd_object = open(odd_file_name,"rb") #wbだったため、rb修正済み
74
+ odd_object = open(pdflist[0],"rb") #pdflist[0]は、oddのファイルがある。
75
+ odd_pdf = PyPDF2.PdfFileReader()
56
76
 
57
77
  #偶数ページファイルの読み込みオブジェクト
58
- #上の部分と同様の記述をしているため、ここの部分でもエラーが怒る可能性大。
59
- even_file_name = os.getcwd() + "\" + pdflist[1]
60
- print(even_file_name)
61
- even_object = open(even_file_name,"rb") #wbだったため、rb修正済み
78
+ even_object = open(pdflist[1],"rb") #pdflist[1]は、evenのファイルがある。
62
- even_pdf = PyPDF2.PdfFileReader(even_object)
79
+ even_pdf = PyPDF2.PdfFileReader()
63
80
 
81
+ #evenとoddが同じ枚数の紙からスキャンしたオブジェクトなら、ページ数が揃うはず。その検証を行う。
82
+ #evenのページ数を取得する。
83
+ odd_num_page = odd_pdf.numPages
84
+ even_num_page = even_pdf.numPages
85
+ superchecker = 0
86
+ #57行目のような状況に遭遇した場合の排他処理そするための識別コード:デフォルトは1で、if文に引っかかった場合に1とする。
87
+ if odd_num_page != even_num_page:
88
+ print("異なる文書からスキャンた奇数ページファイル、偶数ページファイルを誤って組み合わせないようにするための、安全用プログラムが作動しました。")
89
+ print("同じ文書からスキャンして得られた偶数ページファイルと奇数ページファイルは、同じページ数になるはずです。")
90
+ print("しかし、同じ文書からスキャンした文書で、最後のページが真っ白だった場合にそのページをスキャンしなかった場合も考えられます。")
91
+ print("あなたは、上記の状況に該当しますか。する場合は、1を入力してください。")
92
+ checknum = int(input())
93
+ if chenknum == 1:
94
+ superchecker = 1
95
+ #57行目の状況に該当するので、1にしておく。
96
+ break
97
+ else:
98
+ print("プログラムを終了します。")
99
+ sys.exit()
100
+
101
+ #57行目にある状況を想定して、2つのファイルのページ数で、大きい方を格納する。
102
+ if even_num_page > odd_num_page or even_num_page == odd_num_page:
103
+ maxpagenum = even_num_page
104
+ else:
105
+ maxpagenum = odd_num_page
106
+
64
107
  #PDFを、いよいよマージする。
108
+ if superchecker == 0:
109
+ #まずは、57行目のような状態でない場合(supercheckerが0の場合)
65
- for pagenum in range(0,odd_pdf.numPages):
110
+ for pagenum in range(0,maxpagenum):
66
- oddpageobject = odd_pdf.getPage(pagenum)
111
+ oddpageobject = odd_pdf.getPage(pagenum)
67
- pdfwriter = addPage(oddpageobject)
112
+ pdfwriter = addPage(oddpageobject)
68
- evenpageobject = even_pdf.getPage(pagenum)
113
+ evenpageobject = even_pdf.getPage(pagenum)
69
- pdfwriter = addPage(evenpageobject)
114
+ pdfwriter = addPage(evenpageobject)
70
115
 
71
- #マージングが終了したので、最後に書き出す
116
+ #マージングが終了したので、最後に書き出す
72
- pdfoutput = open(r"merged.pdf","wb")
117
+ pdfoutput = open("merged.pdf","wb") #"meiged.pdf"という名前のPDFを作成する
73
- pdfwriter.write(pdfoutput)
118
+ pdfwriter.write(pdfoutput) #書き出す
74
- pdfoutput.close()
119
+ pdfoutput.close() #書き込みの終了
75
- print("すべての処理が正常に完了しました。")
120
+ print("すべての処理が正常に完了しました。")
121
+ print(r'merged.pdfという名前のファイルが保存されているはずです。')
122
+ print("プログラムを終了します。")
123
+
124
+ else:
125
+ #次は、57行目のような状態である場合(superchecker1の場合)
126
+ for pagenum in range(0,maxpagenum-1):
127
+ oddpageobject = odd_pdf.getPage(pagenum)
128
+ pdfwriter = addPage(oddpageobject)
129
+ evenpageobject = even_pdf.getPage(pagenum)
130
+ pdfwriter = addPage(evenpageobject)
131
+ if pagenum == maxpagenum-2:
132
+ lastpage = maxpagenum-1
133
+ lastpageobject = even_pdf.getPage(lastpage)
134
+ pdfwriter = addPage(lastpageobject)
135
+
136
+ #マージングが終了したので、最後に書き出す
137
+ pdfoutput = open("merged.pdf","wb") #"meiged.pdf"という名前のPDFを作成する
138
+ pdfwriter.write(pdfoutput) #書き出す
139
+ pdfoutput.close() #書き込みの終了
140
+ print("すべての処理が正常に完了しました。")
141
+ print(r'merged.pdfという名前のファイルが保存されているはずです。')
142
+ print("プログラムを終了します。")
143
+
76
144
  ```
77
145
  ### 試したこと
78
146
 

3

ご指摘にあった部分を修正済み

2020/09/12 14:01

投稿

SatelliteStar
SatelliteStar

スコア2

title CHANGED
File without changes
body CHANGED
@@ -58,7 +58,7 @@
58
58
  #上の部分と同様の記述をしているため、ここの部分でもエラーが怒る可能性大。
59
59
  even_file_name = os.getcwd() + "\" + pdflist[1]
60
60
  print(even_file_name)
61
- even_object = open(even_file_name,"wb") #wbだったため、rbに修正済み
61
+ even_object = open(even_file_name,"rb") #wbだったため、rbに修正済み
62
62
  even_pdf = PyPDF2.PdfFileReader(even_object)
63
63
 
64
64
  #PDFを、いよいよマージする。

2

ご指摘にあった部分を修正済み

2020/09/12 05:32

投稿

SatelliteStar
SatelliteStar

スコア2

title CHANGED
File without changes
body CHANGED
@@ -62,7 +62,7 @@
62
62
  even_pdf = PyPDF2.PdfFileReader(even_object)
63
63
 
64
64
  #PDFを、いよいよマージする。
65
- for pagenum in range(0,maxpagenum):
65
+ for pagenum in range(0,odd_pdf.numPages):
66
66
  oddpageobject = odd_pdf.getPage(pagenum)
67
67
  pdfwriter = addPage(oddpageobject)
68
68
  evenpageobject = even_pdf.getPage(pagenum)

1

ご指摘にあった部分を修正済み

2020/09/12 05:26

投稿

SatelliteStar
SatelliteStar

スコア2

title CHANGED
File without changes
body CHANGED
@@ -6,7 +6,7 @@
6
6
  ###実現したいこと
7
7
  両面印刷された、多数の枚数で構成された文書があるとします。
8
8
  しかし、いちいちスキャンして裏返してスキャンして、次の紙をセットしてスキャンして裏返してスキャンして次の紙...など、面倒でやってられません。
9
- そこで、この文書を、フィーダーを使って表側をすべて連続スキャンし、表文書の表側(1,2,3,...ページ)がスキャンされたPDFを出力します。
9
+ そこで、この文書を、フィーダーを使って表側をすべて連続スキャンし、表文書の表側(1,3,5,...ページ)がスキャンされたPDFを出力します。
10
10
  次に、同様に裏側(2,4,6,...ページ)がスキャンされたPDFを出力します。
11
11
  最後の仕上げとして、Pythonを用いて2つのPDFを、ページが1,2,3,...ページと正しく繋がった1つのPDFにマージする、という手法を思いついたと言う次第です。
12
12
  これなら、両面同時コピーの機能はないがフィーダーがあって、片面を比較的高速に連続コピーやスキャンできるような家庭用の複合機で、大量の紙で構成される文書を素早くスキャンし、素早くPDFにマージできます。
@@ -52,14 +52,13 @@
52
52
  #ここの部分でエラー
53
53
  odd_file_name = os.getcwd() + "\" + pdflist[0]
54
54
  print(odd_file_name)
55
- odd_object = open(odd_file_name,"wb") #pdflist[0]にはoddのファイルがある。
55
+ odd_object = open(odd_file_name,"rb") #wbだったためrbに修正済み
56
- odd_pdf = PyPDF2.PdfFileReader(odd_object)
57
56
 
58
57
  #偶数ページファイルの読み込みオブジェクト
59
58
  #上の部分と同様の記述をしているため、ここの部分でもエラーが怒る可能性大。
60
59
  even_file_name = os.getcwd() + "\" + pdflist[1]
61
60
  print(even_file_name)
62
- even_object = open(even_file_name,"wb") #pdflist[1]にはevenのファイルがある。
61
+ even_object = open(even_file_name,"wb") #wbだったためrbに修正済み
63
62
  even_pdf = PyPDF2.PdfFileReader(even_object)
64
63
 
65
64
  #PDFを、いよいよマージする。