前の記事はこちら。
midoliko-tsuki.hatenablog.com
前回の記事で、ようやく1が終わりました。
次はPDFフォルダのファイル名リストを取得する部分です。
調べてみたらosとかpathlibとかいろいろあって混乱したのですが、読んでてなんとか理解できたこちらの記事を参考に、globモジュールを使ってみました。
weblabo.oscasierra.net
で、この後どうしたらいいのか分からなくて夫に助けを求めてしまいました。
# ファイル数分だけ繰り返す for oneFullPath in strFiles: # ファイルの場合 if os.path.isfile(oneFullPath): # フルパスからファイル名を抽出 strFileName = os.path.basename(oneFullPath)
とりあえずこれだけ書いてもらった。
後から理解したんですが、私はfor文がよく分かっていなかったのでした。「for 変数 in オブジェクト」の最初の変数で「知らない人出てきた! 誰!?!?」となってつまづいていたようです。どういう人なのかのキャラづけは後から自分でやるんですね。知らんわ! 自己紹介なしで飛び込んでくる知らない人こわい! ちゃんと名乗って!!
あと、出てくる文字列が変数なのか関数なのか分かってない(なんのためにVSCodeを使っているのか)、変数に何が入っているのか分かっていないのでどうしていいのか分からなくなる、というのがあり、これについては変数の名前を工夫しなさいと言われました。格好悪くてもいいので、自分で見て、これがなんなのか、何に使うのか分かる名前をつけた方がいい、と。夫は「このへんは賛否両論あるとこだけど」とつけ加えていましたが、少なくともいまの私はそういう名前のつけ方をしたほうがいいなと思いました。
で、続いては、抽出したファイル名から後ろ3文字を削る工程です。
こちらの記事を参考にしました。
pg-chain.com
えっ[ ]だけで文字が削れるの!? 簡単やん!? と感動したのですが、自分でやってみたら「pdf」だけが大量に切り取られて絶望しました。結局ここも夫に書いてもらいました。いまブログを書くために見返していてようやく理解しました。ブログ役に立ってるう(前向き)。
#末尾が.pdfであれば if strFileName[-4:] == ".pdf": # ファイル名から後ろ3文字を削る strTxtName = strFileName[:-3] #ファイル名 strTxtName = strTxtName + "txt"
「txt」を足してファイル名にするところだけようやく自分で書けました。
ファイル名ができたところで、テキストファイルを作成します。
office54.net
参考にしたのはこちら。
さてこのあとは前にもやった工程です。PDFを画像に変換して、画像をOCRして、テキストデータに変換する。そのあと、テキストデータをテキストファイルに書き込んで、ファイルを閉じる。
# ファイルを作成 f = open(strTxtName, 'w') # 画像オブジェクトからテキストに # テキストファイルに書き込む for image in images: txt = tool.image_to_string( image, lang=lang, builder=pyocr.builders.TextBuilder() ) f.write(txt) # ファイルを閉じる f.close()
も、もしかして完成してしまったのでは〜!? と動かしてみたら、動きました。
動いたのですが、できあがったテキストファイルが、苦心惨憺して作った現在時刻を名前にしたフォルダではなく、なぜか実行ファイルのあるフォルダに保存されていく! なんでや!
……見返してみて気づいたのですが、テキストファイルを新規作成するときに、保存先のパスを指定していませんでした。そりゃこうなりますね……。
別にこのままでも構わないといえば構わないのですが(手動で移動させれば済む話)、まあまあ頑張って作ったフォルダなので使われてほしい。というわけで、今度はパスを指定しないといけません。
なので今度は、テキストファイル保存先のパスを指定しないといけません。
参考にしたのはこちら。
python.keicode.com
フォルダ名はdir_name、ファイル名がstrTxtNameだからこれを足せばいけるのでは?
# 結果ファイルのパスを指定 resultPath=os.path.join(dir_name,strTxtName) # ファイルを作成 f = open(resultPath, 'w')
どや! とやってみたらエラーが出ました。なんでや! エラーメッセージを頑張って読んでみたら、そんなフォルダはないよって言ってるみたいでした。よくよく見返してみたら、dir_nameに入ってるのはフォルダの名前だけでパスではありませんでした。どうもすみません。
これでどうだ!!!
# 結果ファイルのパスを指定 resultPath=os.path.join(path,dir_name,strTxtName) # ファイルを作成 f = open(resultPath, 'w')
で、できた〜!!!!!!!!!
これでようやく、やりたいことの第一段階が終わりました。長かった……。
続きはこちら。
midoliko-tsuki.hatenablog.com