質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

5469閲覧

特定のフォルダ以下のすべてのPDFファイル(テーブル部のみ)をCSVで出力したい。

H.K2

総合スコア88

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/02/20 16:41

編集2018/02/20 16:45

『やりたいこと』
特定のフォルダ以下のフォルダのPDFファイルすべてについて、
テーブル部分のみ抽出してPDF化したいと考えております。

『やってみたこと』
ネットで調べたら,tabula-pyという、PDFのテーブル部分を
データフレームに変換するライブラリがありましたので
下記ソースコードを試しに書いて、再帰的にCSVファイルを
出力しようとしましたが、下記エラーが出てしまいます。
一応csvファイルはできるときもあるのですが、フォルダ構成によって途中で
止まってしまうなどしてしまいます。
試行錯誤してみましたが、一向に解決できないので、どなたかもしよろしければ
ご教示いただけないでしょうか。

『環境』
Anaconda 5.0
tabula-py 1.0.0

------------------------ソースコード---------------------------
from tabula import read_pdf
import codecs
import os

def find_all_files(directory):
for root, dirs, files in os.walk(directory):
yield root
for file in files:
yield os.path.join(root, file)

tmp_path = os.getcwd().replace('/', os.sep)

for file in find_all_files(tmp_path):
if(file.find('.pdf')>-1):
df = read_pdf(file, guess=False, encoding='cp932', pandas_options={'header':None})
df.to_csv(file+".csv")


エラー:
CalledProcessError: Command '['java', '-jar', 'C:\ProgramData\Anaconda3\lib\site-packages\tabula\tabula-1.0.1-jar-with-dependencies.jar', '--pages', '1', 'C:\py_Sample\pdf2csv\hoge\bbb\ほげ2.pdf.csv']' returned non-zero exit status 1.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

windosw上にいれたAnacondaでしょうか?
それともLinuxにいれたAnacondaでしょうか?

もしWindowsでしたら
tmp_path = os.getcwd().replace('/', os.sep)
のos.sepは¥ですのでその設定をしてみてください。
('/'はLinuxです)

またデータファイルの場所の読み書権限はあるか確認してください。
多分できるときもあるからいいとおもいますが?

Command '['java', '-jar', 'C:¥¥ProgramData¥¥Anaconda3 。。。
からWindowsですよね

投稿2018/02/20 22:12

GBB00516

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

H.K2

2018/02/21 12:19 編集

ご回答ありがとうございます。すみません。ご指摘の通り、Windows環境です(Windows10)。 ¥に相当するバックスラッシュを入れたのですが(\をjupyterにコピペしたらバックスラッシュになりました)、 下記エラーが出ました。 権限は、普通のフォルダなのでフルアクセスです。 File "<ipython-input-4-ed226e6d960b>", line 1 tmp_path = os.getcwd().replace('\', os.sep) ^ SyntaxError: EOL while scanning string literal
GBB00516

2018/02/22 02:47

細かいとこまで説明してませんでしたね そもそも \ はエスケープ文字なので 2個入れないと 機能しません。 また エラーは とじられていない(括弧やセパレータの個数があわない) の意味です。
GBB00516

2018/02/22 06:06

windows上での違いで検索して参考にしてください。 http://d.hatena.ne.jp/hidehara/20131018/1382088628 https://docs.python.jp/3.3/library/os.html#os.sep os.sep パス名を要素に分割するためにオペレーティングシステムで利用されている文字です。例えば POSIX では '/' で、Windowsでは '\' です。しかし、このことを知っているだけではパス名を解析したり、パス名同士を結合したりするには不十分です — こうした操作には os.path.split() や os.path.join() を使用してください
H.K2

2018/02/27 13:32

なるほど。エラーの意味がやっと分かりました。ご説明ありがとうございます!
guest

0

自己解決

すみません。自己解決しました。CSVを作成した時、ファイル名にPDFが残っており、
PDFじゃないファイルに対してtabula_Pyが動作してエラーを出していたようです。
下記のコードで、拡張子とファイルをぱーすして、拡張子に対してPDF判定すれば正常動作しました。

for file in find_all_files(tmp_path):
name, ext = os.path.splitext(file)
if(ext.find('.pdf')>-1):
print(file)
df = read_pdf(file, guess=False, encoding='cp932', pandas_options={'header':None}, pages='all')
df.to_csv(file+".csv")

投稿2018/02/21 15:14

H.K2

総合スコア88

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/02/22 02:53

file.endswith(".pdf")という方法もあります。ご参考までに。
H.K2

2018/02/27 13:30

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問