よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

【データ加工 Vim編】Android地図アプリOsmAndの経路座標デー タを取得・加工する

前々回投稿の 【PythonとAndroid地図アプリOsmAnd】経路座標デー タを取得・加工する - よちよちpython では Android地図アプリ OsmAnd で取得・保存した経路座標データファイル(.pgx)から座標データだけを抽出する方法としてPythonを使いました。



前回投稿の 【データ加工 Linuxコマンド編】Android地図アプリOsmAndの経路座標デー タを取得・加工する - よちよちpython では、それをLinuxコマンドで加工しました。



今回は同じことをVimエディタでやってみます。
主に文字列の置換でデータを加工していきます。



実行環境



Vimエディタはターミナル上で動かす高機能なCUIエディタです。

  • Termuxアプリにインストールするには
$ pkg install vim ↩️(← 改行 エンターキー)

# またはPython用に改造されたものを

$ pkg install vim-python ↩️

でできます。下の vim-python が良いかな。

  • vimがインストールされているかどうかの確認
$ pkg list-installed | grep vim ↩️

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

vim-python/stable,now 8.2.4450-2 aarch64 [installed]
vim-runtime/stable,now 8.2.4450-2 all [installed,automatic]

vim-python がインストール済みのようです。vim-runtimeは確かvimをインストールすると自動的にインストールされる、と思う。installed,automatic と書いてあるし。



OsmAndアプリ で取得した経路座標データファイルの gpxファイル は、前もってカレントディレクトリに保存しておきます。

  • gpxファイルの存在確認
$ ls | grep *.gpx ↩️
2022-02-06_15-27_Sun.gpx

1つだけあります。



  • Vimエディタでgpxファイルを開く

gpxファイルがカレントディレクトリに1つだけあります。ファイル名を指定するのが面倒なので、以下では「*.gpx」で開いています。

$ vim *.gpx ↩️

Vimエディタが開かれる。Termuxでは次の画面になる。

f:id:chayarokurokuro:20220316122918j:plain

  • Vimを閉じるには

  • エスケープキー」を押して通常モードにする→

  • 終了コマンドを入力する
    • :q!」 を入力すると、編集・変更を保存せずに終了する
    • :q」 を入力で終了する。変更されていると注意が出る
    • :wq」 で編集・変更を上書き保存して終了する

今回は変更しませんので、エスケープキー:q!入力 でVimを終了させます。

f:id:chayarokurokuro:20220316123116j:plain

:q! と入力したところ。ここでエンターキーを入力すれば、変更を保存せずにVimが終了し、通常のターミナル画面に戻ります。



  • 座標データ行のみを別ファイルに保存

gpxファイルには、座標データが載っています。「<trkpt」から始まる行に書かれている。先にLinuxコマンドでその行だけを抜き出し、別ファイルに保存します。元データgpxファイルを変更しない為と、座標データの抽出が楽な為。

$ grep '<trkpt' *.gpx > locations.txt ↩️

「locations.txt」のファイル名で保存した。



  • 座標のみ抽出したファイルの中身を見る

上3行だけ見てみます。

$ head -n 3 locations.txt ↩️
      <trkpt lat="33.3027671" lon="130.5579563">
      <trkpt lat="33.3027594" lon="130.5579148">
      <trkpt lat="33.3027713" lon="130.557914">

スペースが入っていたり、座標データ以外の文字列が入っている。

以下では、これらをVimで編集して取り除き、最終的に 緯度と経度がカンマで繋がったCSVファイルに加工していきます。



  • 保存した座標ファイルlocations.txtをVimで開く
$ vim locations.txt ↩️

ターミナル上でVimが開かれる。Termuxアプリで開くと、次の画像のような画面になる。

f:id:chayarokurokuro:20220316123405j:plain

元のgpxファイルから座標の入っている行だけが抽出されている。



Vimでの編集作業

ここからは、上で保存した座標ファイルlocations.txtVimエディタ で編集していきます。



  • 緯度、経度の繋ぎ目をカンマに置換

" lon=",カンマ に置換します。エスケープキー を入力してコマンドを打てるようにし、次を入力する

:%s/" lon="/,/g

置換コマンド入力中の画面はこんな風

f:id:chayarokurokuro:20220316123337j:plain



置換コマンドをエンターキーで実行したら置換される

f:id:chayarokurokuro:20220316123349j:plain



  • 変更の上書き保存方法

変更したものを上書き保存したい場合は、エスケープキー を押して、

:w ↩️

で上書きされます。:wqだと上書き保存してVim終了され、通常のターミナル画面に戻る。



  • 先頭の<trkpt lat="を置換・削除する

エスケープキーを押してモードを変更し、次を入力

:%s/<trkpt lat="//g

f:id:chayarokurokuro:20220316124142j:plain



上を入力したらエンターキーで実行すると、

f:id:chayarokurokuro:20220316124252j:plain

置換された。



  • 行末の "> を置換・削除
:%s/">//g

f:id:chayarokurokuro:20220316124555j:plain

実行すると、↓

f:id:chayarokurokuro:20220316124638j:plain

行末の "> が置換削除された。



  • 行先頭のスペースを置換・削除

エスケープキーを押して、次を入力

:%s/  *//g

f:id:chayarokurokuro:20220316124834j:plain

エンターを押すと↓

f:id:chayarokurokuro:20220316124937j:plain

完成した。座標がカンマ区切りの2次元データにできた。CSVファイルとして保存します。

f:id:chayarokurokuro:20220316125316j:plain

既に同名のファイルが存在した ので E13: File exists (add ! to override) と赤い注意が出た。! を付ければ同名ファイルを上書き保存できる。中身は前回投稿で作った同じものだ。

:w! locations.csv ↩️

! を付けて、同名ファイルを強制上書き。

f:id:chayarokurokuro:20220316125823j:plain

変更したものを既存の同名ファイル locations.csv に強制上書きした。



  • Vimを終了する

上で強制上書きしたが、変更中の元のファイル locations.txt も上書き保存して終了する。結果的に locations.txtlocations.csv は同じ中身のファイル。

:wq ↩️

これで元のファイルを上書き保存し、Vimを終了できる。画面は通常のターミナルに戻る。



  • 保存終了の際の注意点

※ 元のファイル locations.txt は変更・編集中なので、未保存終了のコマンド :q だけでは注意が出る。

f:id:chayarokurokuro:20220316130759j:plain



【参考】 vimでファイルを保存するコマンドのまとめ。 | WWWクリエイターズ



結果は達成したので以上です。



が、Vimでは操作をマクロとして登録し、同じ作業を連続で実行できたりする。次回はそれをやりましょう。
Vimはビックリするぐらい便利な機能が色々ある。だが覚えられない。 覚えれば格段に作業の効率が上がる。



以上です。

【参考 関連】