カテゴリー
Python製の高機能データエディタ・『visidata』を使ってCSVファイルを操作する
※ 当ページには【広告/PR】を含む場合があります。
2024/03/28

著者の日々の業務でも、Windowsを触ることがほとんどなくなりつつあり、個人レベルでMicroSoft製品とだいぶ縁遠くなっているのをひしひしと感じます。
とはいえ、XLSファイルをお使いのクライアントもいるので、Excelの利用は欠かせないのですが、最近ではExcelをブラウザ立ち上げてデータを編集するスタイルも随分つまらなく感じてきました(※個人的な感想です)。
Excel離れ気味のLinuxユーザーへ、CSVデータの編集にちょっとした刺激がほしい場合に利用していただきたいのが、ターミナルベースのPython製CLIアプリ・『visidata』です。
バイナリ版もダウンロード可能ですが、PythonさえインストールできればOS環境に依存しない表データの編集が可能になります。
今回はショートカットキーを覚えることを念頭に、visidataの簡単な使い方を紹介していきます。
なお、英語版のチートシートは以下のサイトが見やすいかもしれません。
visidataの導入手順
visidataのインストール方法に関しては、公式のドキュメンテーションを参考にします。
OSごとに作法は変わりますが、Python3.6+であればPipで悩むことなく導入できるので、ここではPythonベースの導入方法を一つ試します。
$ python --version
Python 3.8.18
$ pip --version
pip 23.0.1
$ pip install visidata
これでvisidataのインストールが完了します。
以下のようにvididataのコマンド・『vd』が利用できるようになれば準備完了です。
$ vd --version
saul.pw/VisiData v3.0.2
visidataの簡単な練習 〜 CSVシートを作成する
『visidata』のショートカットキーの数はかなりのバリエーションがあり、その機能も多岐に渡ります。
その全てを覚えることはかなり困難ですが、実際にはいくつかの実用的なショートカットキーさえ覚えておけば十分です。
ここでは最初の簡単なチュートリアルとして、数字を埋めるだけのCSVデータを作成する手順を説明します
visidataでCSVデータを作る
visidataをインストールすると、ターミナルからは
vd
vd
$ vd hoge.csv
基本はCSV形式ですが、非テキスト系データのJSONやSQLiteなども利用できます。
他のフォーマットのデータファイルも対応していますが、別途読み込み用のプラグインのインストールが必要になるようです。
とりあえずvdコマンドを使い慣れるところから始めてみましょう。
以下のコマンドで、
1.csv
$ vd 1.csv
引数で指定したファイルが無い場合、以下のように空のスプレッドシートに
A
600x150

とりあえず、
i
すると新しい空の列が挿入されることがわかります。
600x122

列をいくらか増やしたところで
a
すると、空の行が一つ追加されます。
555x150

追加した行のセルに値を入力していく際に、現在アクティブになっている
「カーソル」(ハイライトされた行と列)
矢印キーの
←
→
h
l
また、カーソルの位置を行方向に上下に一つ移動したい場合、矢印キーの
↑
↓
k
j
visidataの操作ルールの一つに、特別な意味を持つプレフィックスキー・
「gキー」
例えば、カーソルを一足飛びに移動させたい場合、上端なら
gk
gj
gh
gl
では、編集したいセルにカーソルを合わせて、
e
e
Enter
399x282

また
Enter
Tab
ひとまずセルを適当に数値で埋めていきます。
432x136

ちなみに、B-E列のヘッダ名の横についている
「#」
型付の列のデータに、その型以外のデータをセルへ入力すると警告で教えてくれる機能として利用できます。
列のデータ型は後ほど説明します。
なお、入力したデータを間違えて上書きしたり、やっぱり元に戻したいなど、「Undo/Redo」操作がほしいときがあります。
編集後のセルに限った操作ではありませんが、visidataでは、Undo(一つ前に戻る)は
Shift-u
Shift-r
とりあえずセルの編集が終わったので、
Cntl + s
1.csv
552x600

データを保存したら、一旦
q
データがちゃんとcsv形式になっているかをチェックしてみましょう。
$ cat 1.csv
A,B,C,D,E
1,2,3,4,5
良い感じに編集できています。
このようにvisidataの最大の特徴の一つに、
visidataを快適に使いこなすには、いかにショートカットキーを自分のものにできるか、と言う点につきます。
以降ではもう少し基本的なテクニックを紹介していきます。
ショートカットキーの調べ方
思い出せないショートカットキーを思い起こそうとする場合には、オンラインのチートシートなどで探しもよいのですが、
Space
700x181

キーワードで検索して、該当の10項目が出てきますので、そのままlong-name commandプロンプトから実行しても良いですし、検索できそうにない場合には、
Ctrl + c
この節で使ったショートカットキー
次の節に進む前に、先程までの簡単なショートカットキーをおさらいしておきます。
覚え方は少々捻り出し感が半端ないですが、あくまでも参考程度にどうぞ...
セルデータの操作
ここではセルの操作で良く使いそうなショートカットキーをまとめます。
まず、セルの編集で余計な列を非表示としたい場合に、隠したい列にカーソルを合わせておいて、
-
逆に隠れた列を全て表示させるのが、
gv
これらを組み合わせて、編集したいセルの内容だけに集中することができます。
676x270

数字や文字列を入力していく過程の中で、文字数が長くなって1つの列の幅に入りきれずに見切れてしまう場合があります。
長い文字でセルの幅に収まりきれずに見切れてしまう時に、対象のColumnへカーソルを移動し、
_
800x249

これで対象の列の幅が、一番長い文字にフィットするように拡大できました。
ちなみに、
g_
逆にあまりに文字が長すぎて余計見づらいと感じた場合には、
z-
747x465

また、幅半減ではなく、
z_
先ほど述べたように、
e
セルの編集中では、一つのセルに操作がフォーカスされ、セル操作専用のショートカットキーがいくつか用意されています。
セル内で文字列の入力位置を移動する場合、矢印キー(
←
→
Ctrl-a
Ctrl-e
現在の文字入力位置から末尾までの文字を削除したい場合には、
Ctrl-k
また入力を取りやめてセルの編集モードから抜ける場合には、
Ctrl-c
この節で使ったショートカットキー
次の節に進む前に、先程までの簡単なショートカットキーをおさらいしておきます。
行(Row)データを使いこなす
visidataの行操作の基本となる考え方として、
ここでは、実例をもとに手を動かす感覚で、その基本操作を覚えていくところから始めましょう。
Rowデータを選択する・解除する
先程の
1.csv
276x287

まず「Rowの選択」からやってみると、適当な行に移動して
s
301x250

すると行の先頭に
「・」
この行の選択は同時に複数の行でも可能です。
259x250

なお行の選択解除は
u
t
gs
gu
gt
Rowの選択でもっとも使うであろうテクニックは、選択行だけでフィルター表示させることでしょう。
選択した状態で、
"
617x249

やっての通り、選択項目だけで表データを再構築することが可能です。
セル要素にマッチした行を選択する
行数が多くなってくると、手動で行を選択してまわるのが難しくなってきます。
そんなときに便利なテクニックが、
最初の表テーブルに戻り、例えば「D列」でセルの値が「6」となる列を選択したい場合を考えてみます。
D列にカーソルを移動し、
|
750x496

選択中の列の中で探したい文字パターンを入力後に、
Enter
この
|
逆に、選択した行項目から正規表現でマッチしたパターンで選択解除したいときには、
\
677x358

他にも、特定の列ではなく全ての列でパターンマッチによる選択(
g|
g\
正規表現検索とは別の簡易的な操作で、選択した列と重複するセル要素を持つ行の選択は
,
g,
行の移動
場合によっては手動で行の位置を入れ替えたいときがあります。
その場合には、移動させたい行にカーソルを合わせておき、上の位置へ動かす場合には、
Shift-k
Shift-j
709x664

この節で使ったショートカットキー
次の節に進む前に、先程までの簡単なショートカットキーをおさらいしておきます。
列(Column)データの操作
先ほどはRowデータの基本となる操作を紹介してみました。
これはデータ構造で言うところの
こちらは、表テーブルデータのもう一つの
Columnヘッダの基本操作
CSVデータでは一行目をヘッダ行として扱い、各列の名前の名前として利用するルールがあります。
ヘッダの名前を変更したい場合、通常のセルとは違い、
^
visidataでは、各列に型を明示することで、ExcelやSQLデータベースのような高度なデータ保持機能をもつアプリのファイルとの互換性を担保し、プレーンなCSVより「型安全」なスプレッドシートとして扱える仕組みがあります。
visidataでもColumnのヘッダーに以下の属性値を持たせることで、これらの属性をColumnの操作を行う際の利用することができます。
Name:
列の名前
Width:
スクリーン上に表示する列の長さ(文字数)
Type:
列の基本データ型(以下の5種)。
string ... 文字列型
integer ... 整数型
float ... 浮動小数型
currency ... 通貨型
date ... 日付型
Columnのデータ型を設定するには、カーソルを対象の列に移動し、文字列型なら
~
#
%
$
@
インデックスキー(プライマリーキー)列の設定
SQLデータベースを扱う場合には、「インデックスキー」のようなデータを識別・管理する上で特別なColumnが存在します。
インデックスキーをvisidataで扱う場合には、カーソル選択した列で、
!
418x246

基本的にインデックスキーはどの列にでも設定することができ、インデックスキーに指定した列はハイライト色が変化し、表の左端に固定されます。
「Columns-Sheet」モードの利用
visidataには、現在のスプレッドシート情報を参照・管理するための
このモードでは、シートの全ての列の属性値を確認と編集を行うことができます。
CSモードへは、
Shift-c
1000x850

CSVデータの表示だと通常はあまり意識しないような、小数点の桁数表示などのフォーマット形式を細かく設定したいときなどに利用できます。
Columnの移動
Shift-h
Shift-l
900x529

ちなみに、選択した列を右端に移動させたい場合は
g Shift-l
g Shift-h
この節で使ったショートカットキー
次の節に進む前に、先程までの簡単なショートカットキーをおさらいしておきます。
まとめ
今回はLinuxベースのターミナルでも動くPython製の表データ編集アプリ・『visidata』の主要なショートカットキーをまとめてみました。
見ていただいた通り、emacsやviのように往年のテキストエディタに慣れ親しみのあるユーザーであれば、割と使い勝手の良いツールになると思います。
個人的にお気に入りのユースケースとして、GUI環境のないVPSサーバー内に、tmuxのようなターミナルマルチプレクサを併用すると、わざわざローカルにCSVデータをダウンロードせずともサーバーごしにデータの中身を扱えてとても便利です。
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー