0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pdf の気温データを一括で抽出する

Last updated at Posted at 2025-04-16

環境計測データが pdf 形式で 600ファイルぐらいある。
午前10時の気温だけを一括で抽出せよと天からのお告げがあった。
肝心の pdf ファイルは手元になくて、内容がよくわからないけれども、いろいろ推測して作戦をたてる。

作戦

pdf ファイルは日ごとのファイルかな。仮に日時がファイル名になっていると考えます。
時刻ごとに測定をするので、多分表の形式になっているのではないかな。
それを元に・・・

1.pdf をテキスト化
2.grep で10時の行を抽出
3.気温のカラムを awk で抽出

サンプルデータ

適当な pdf がなかったので、以下のサイトを印刷時に pdf 化してファイルを作った。

image.png

「amedas輪島20250415.pdf」
image.png

このようにして、以下の3つのファイルを作成。

  • amedas輪島20250413.pdf
  • amedas輪島20250414.pdf
  • amedas輪島20250415.pdf

600 ファイルではなく、この3つのファイルでテスト。

環境

  • Ubuntu 24.04 LTS

WSL でもできるハズ

下準備

pdftotext をインストール

$ sudo apt install poppler-utils

pdf をテキスト化

$ pdftotext amedas輪島20250413.pdf

うん? 何も表示がないぞと思ったら、 amedas輪島20250413.txt ができていた。明示的に出力ファイルを指定するには以下のようにする。

$ pdftotext amedas輪島20250413.pdf  amedas輪島20250413.txt

できたtxt ファイル。

2025/04/16 10:51

気象庁|過去の気象データ検索
輪島(石川県) 2025年4月13日 (1時間ごとの値)
全天 雪(cm)
気圧(hPa) 降水量 気温 露点
蒸気圧 湿度 風向・風速(m/s) 日照
視程
時 現地
温度
時間
日射量
(mm)
(℃)
(hPa)
(%)
海面
風速 風向 (h) (MJ/㎡) 降雪 積雪 天気 雲量 (km)
(℃)
1 1007.7 1008.5
-- 12.1 8.8 11.3 80 3.3 南西
-- -20.0
2 1006.8 1007.6
-- 12.3 8.8 11.3 79 2.6 南南西
-- -20.0
3 1005.7 1006.5
-- 12.7 8.8 11.3 77 4.4 南南西
-- -20.0
4 1005.1 1005.9
-- 12.3 8.8 11.3 79 3.8 南西
-- -20.0
5 1003.9 1004.7
-- 12.1 8.9 11.4 81 2.8 南
-- -20.0
6 1003.2 1004.0
-- 12.9 8.8 11.3 76 4.6 南西 0.0
-- -20.0
7 1003.3 1004.1 0.0 15.4 8.4 11.0 63 5.3 南 0.0
-- -20.0
8 1002.5 1003.3 0.0 14.4 9.6 12.0 73 3.8 南 0.0
-- -18.4
9 1001.6 1002.4 1.0 14.7 10.7 12.9 77 4.9 南 0.0
-- -20.0
10 1001.0 1001.8 0.0 15.4 10.6 12.8 73 3.5 南 0.0
-- -20.0
11 1000.7 1001.5 0.5 14.9 12.0 14.1 83 1.6 北 0.0
-- -18.1
12 999.8 1000.6 1.0 15.2 11.6 13.6 79 2.8 南南西 0.0
-- -20.0
・
・
・

grep で10時の行を抽出

行頭に10があるのが時刻っぽいので

$ grep ^10 amedas輪島20250413.txt 

とすると以下の行が得られた。

10 1001.0 1001.8 0.0 15.4 10.6 12.8 73 3.5 南 0.0

気温のカラムを awk で抽出

5カラム目が気温なので、先程の grep をパイプで awk に流す。

$ grep ^10 amedas輪島20250413.txt | awk '{print $5}'

気温が出た。

15.4

一括処理

以下のようにしようとしたら、

$ pdftotext amedas輪島202504*.pdf

何てことだ、pdftotext はワイルドカードが使えないぞ。

しかたがない、

$ for file in amedas輪島202504*.pdf; do pdftotext "$file" "$file.txt"; done

として、

  • amedas輪島20250413.pdf.txt
  • amedas輪島20250414.pdf.txt
  • amedas輪島20250415.pdf.txt
    を得る。

それに対し、

$ grep ^10 amedas輪島202504*.txt | awk '{print $1,$5}'

とすると

とすると以下が出てくる。

amedas輪島20250413.pdf.txt:10 15.4
amedas輪島20250414.pdf.txt:10 
amedas輪島20250415.pdf.txt:10 11.0

やれやれ、終わり終わり・・・と思ったら、4月14日のデータが無いぞ。

異常データの対応

4月14日の該当箇所は・・・

10 1003.4 1004.2
-- 13.4 4.6 8.5 55 4.0 南南西 0.8
-- -20.0

元になったWebページのデータは、

image.png
該当箇所の pdf は
image.png

一見ちゃんとしたレイアウトになっているけれども、降水量のデータが -- となっているところが、pdftotext で改行が入っていることが原因のようだ。

これの対応として、pdftotext のオプションで、 -layoutオプションを使うと pdf のレイアウトのようにテキスト化する。

2025/04/16 10:51                                              気象庁|過去の気象データ検索
 輪島(石川県) 2025年4月14日 (1時間ごとの値)
  時 現地気圧(hPa) 降水量 気温 露点      温度  蒸気圧 湿度 風向・風速(m/s) 日照 全天 雪(cm)          視程
            海面    (mm)  (℃)  (℃) (hPa) (%) 風速 風向 (h) (MJ/㎡) 降雪 積雪 天気 雲量 (km)
                                                   時間 日射量
  1 1006.3 1007.1 0.5 6.8 6.1 9.4 95 1.5 南南西                 -- --       7.90
  2 1005.8 1006.6 1.0 6.2 5.0 8.7 92 1.6 南南西                 -- --       13.0
  3 1005.4 1006.2 0.5 6.1 4.8 8.6 91 2.5 南南東                 -- --       20.0
  4 1004.7 1005.5 0.0 6.1 4.3 8.3 88 3.2 南南西                 -- --       20.0
  5 1004.4 1005.2    -- 6.2 4.4 8.3 88 4.5 南                 -- --       20.0
  6 1003.7 1004.5    -- 6.7 4.4 8.3 85 5.6 南 0.0             -- --       20.0
  7 1003.6 1004.4    -- 7.7 4.8 8.6 82 5.0 南 0.7             -- --       20.0
  8 1003.7 1004.5    -- 9.7 5.5 9.0 75 4.2 南南西 1.0           -- --       20.0
  9 1003.6 1004.4    -- 11.8 5.7 9.1 66 2.4 南 1.0            -- --       20.0
 10 1003.4 1004.2    -- 13.4 4.6 8.5 55 4.0 南南西 0.8          -- --       20.0
 11 1003.3 1004.1    -- 13.9 3.1 7.6 48 5.3 南西 0.3           -- --       20.0
 12 1002.2 1003.0    -- 14.6 3.4 7.8 47 3.8 南 0.8            -- --       20.0
・
・
・

これに対応して以下のようにするとうまくいかない。

$ for file in amedas輪島202504*.pdf; do pdftotext -layout "$file" "$file.txt"; done

bash の do のパラメータが2つまでのようので、以下のようにして対処

$ for file in amedas輪島202504*.pdf; do pdftotext -layout "$file"; done

変更に対応して、以下のようにして抽出

$ grep ^" 10" amedas輪島202504*.txt | awk '{print $1,$6}'

得られたもの。

amedas輪島20250413.txt: 15.4
amedas輪島20250414.txt: 13.4
amedas輪島20250415.txt: 11.0

これをコピペして適当に加工すれば良い。

ほかのデータの対応

なお、今回はテスト用データなので、 pdf の形式によって適切に抽出方法を工夫する必要がある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?