octとは?
oct関数とは、整数を8進数(octal)表記の文字列に変換するための、Pythonに標準で用意されている組み込み関数です。
8進数は、0から7までの数字を使って数値を表す方法です。
「なぜわざわざ8進数を使うの?」と思うかもしれませんね。普段私たちは10進数(0から9までの10個の数字)を使いますが、コンピューターの内部では0と1だけの2進数が使われています。しかし、2進数は桁数が非常に多くなりがちです。例えば、ファイルの権限を示す「111101101」のような長い2進数を人間が読み書きするのは大変です。
8進数は、2進数3桁分をピッタリ1桁で表せる(例: 2進数111 = 8進数7)ため、長い2進数を短くコンパクトに表現する方法として使われてきました。特に、Linuxなどで「ファイルのアクセス権限」を設定する場面でよく登場します。「所有者は全部OK、その他の人は読み取りだけ」といった設定を、755のような8進数の数値で指定するのが定番の使い方です。oct関数を使うと、普段使っている10進数の整数を、こうした場面で必要な8進数の文字列に簡単に変換できます。
oct関数では変換された文字列は、「0o」という目印(接頭辞)から始まります。Pythonで8進数を直接プログラムに書く場合も「0o」を付けるルールになっています。
oct関数の特徴
- 引数に指定した整数を8進数表記の文字列に変換する
- 変換後の文字列は必ず「0o」という接頭辞で始まる
- 負の数の場合は「-0o」から始まる文字列を返す
- 引数に整数以外を渡すとエラー(TypeError)が発生する
【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング
基本構文
oct関数の使い方はとてもシンプルです。oct(整数)のように引数に8進数に変換したい整数を渡すだけです。
まずは、10進数の8をoct関数で8進数に変換してみましょう。
出力結果
0o10この例では、oct関数に数値8を渡し、8進数に変換しています。進数の8は、8進数では10(8の位が1、1の位が0)となります。oct関数は8進数表記の目印として「0o」を先頭に付けるため、0o10と表示されます。
また、より大きな数値でも同様に変換が可能です。64という数値を8進数に変換する例を見てみましょう。
出力結果
10進数64は8進数で0o100ですこの例では、64をoct関数で変換しています。10進数の64は、8進数では100(64の位が1、8の位が0、1の位が0)です。f文字列を使って出力することで、「10進数64は8進数で0o100です」というメッセージが表示されます。
これらの例から分かるように、oct関数は整数を受け取り、8進数表現の文字列を返すシンプルな構文となっています。
実用例
ここからは、oct関数の実用的な使い方を、サンプルコードを交えて解説します。システムプログラミングやデータ処理など、oct関数が役立つ場面を動物の例を使って紹介します。実際に手を動かしながら試してみると、理解が深まるはずです。
基本的な整数の8進数変換
最もシンプルなoct関数の使用例として、動物の数を8進数で表現してみましょう。この例では、ネコの数を10進数から8進数に変換します。
出力結果
ネコが25匹います
8進数では0o31匹ですこの例では、変数cats_countに代入した25をoct関数で変換しています。10進数の25は、8進数では31(8の位が3、1の位が1)です。oct関数は自動で接頭辞「0o」を付けるため、結果は0o31となります。
負の数の8進数変換
oct関数は負の数も適切に処理できます。この例では、地下にいるモグラの数を負の数で表現し、8進数に変換してみます。
出力結果
地下12メートルのモグラ位置
8進数表現: -0o14この例では、-12をoct関数に渡しています。10進数の12は8進数で14です。負の数の場合、oct関数はマイナス記号と接頭辞「0o」を組み合わせた「-0o」を先頭に付けます。そのため、結果は-0o14と表示されます。
ファイルの権限設定での活用
LinuxなどのUnix系システムでは、ファイルのアクセス権限(パーミッション)を8進数で設定することがよくあります。例えば、権限設定「755」(所有者は読み書き実行可、その他は読み取り実行可)は、10進数では「493」にあたります。
ここでは、10進数の493をoct関数で変換し、8進数の権限表記0o755としてみます。
出力結果
イヌの写真ファイル権限 (10進数): 493
8進数表現: 0o755
0o755 は、読み書き実行(7)、読み実行(5)、読み実行(5)の権限を示しますこの例では、10進数の493をoct関数で変換しています。結果は0o755となり、Unix系システムでよく使われるファイル権限の8進数表記が得られました。oct関数を使うと、10進数で管理している数値を、システム設定で必要な8進数表記に変換する際に役立ちます。
リストの要素を一括変換
複数の数値を一度に8進数変換する場合のサンプルコードです。動物園の各エリアにいる動物の数を8進数で管理してみます。
出力結果
ライオン: 8 → 0o10
トラ: 16 → 0o20
ゾウ: 32 → 0o40
キリン: 64 → 0o100この例では、リストの各要素をリスト内包表記([oct(count) for count in animal_counts])で一度に処理しています。forループで元の10進数と変換後の8進数をzip関数で組み合わせながら出力することで、ライオン(8)が0o10、トラ(16)が0o20のように変換されているのが分かります。
16進数から8進数への変換
oct関数は10進数の整数しか受け付けませんが、Pythonでは16進数や2進数の数値をプログラム上でそのまま10進数の整数として扱えます。
16進数の識別番号(0xFF)を、oct関数を使って8進数に変換してみましょう。
出力結果
ウサギID(16進数): 0xff
ウサギID(8進数): 0o377この例では、16進数リテラル0xFFをhex_rabbit_idに代入しています。Pythonは0xFFを自動的に10進数の255として扱います。そのため、oct(hex_rabbit_id)はoct(255)と同じ意味になり、結果として8進数の0o377が得られます。
このように異なる進数間での変換も、一度10進数を経由することで簡単に実現できます。
バイナリデータの8進数表現
16進数と同じように、バイナリ(2進数)の数値もoct関数で直接8進数に変換できます。
鳥の鳴き声のパターンをバイナリ(0b1101)で表し、8進数に変換してみます。
出力結果
スズメの鳴き声パターン(2進数): 0b1101
スズメの鳴き声パターン(8進数): 0o15
パターン解析完了この例では、2進数リテラル0b1101を8進数に変換しています。Pythonは0b1101を10進数の13として扱います。oct(binary_pattern)はoct(13)と同じ意味になり、結果として8進数の0o15が出力されます。
バイナリデータを8進数に変換する処理は、デジタル信号処理やデータ解析などで欠かせない基本技術のひとつです。
条件分岐での8進数判定
if文とoct関数を組み合わせて、条件によって処理を変えつつ、結果を8進数で表示することもできます。
動物の体重が100kgを超えるかどうかで分類し、管理番号として8進数表記を使ってみます。
出力結果
パンダの体重: 120kg (0o170)
大型動物に分類されます
管理番号: 0o170この例では、まずpanda_weight(120)をoct関数で0o170に変換しています。if文の条件式(panda_weight > 100)は10進数の120で判定されます。条件がTrueのため、「大型動物に分類されます」というメッセージと、8進数で表記した管理番号(0o170)が出力されます。
条件分岐と組み合わせることで、動的な8進数変換処理が実現できます。
まとめ
Pythonのoct関数は、整数を8進数表記の文字列に変換する組み込み関数です。この記事では、基本的な使い方から活用例まで解説しました。
oct関数が活躍する場面
- ファイル権限を8進数で設定するとき
- バイナリデータを扱いやすくするために8進数表記にするとき
- 整数が8進数でどう表されるかを確認したいとき
oct関数を用いる上で、押さえておきたいポイントを覚えておきましょう。
重要なポイント
- 戻り値は「0o」から始まる文字列になる
- 負の数の場合は「-0o」から始まる文字列になる
- 引数には整数以外を指定するとエラー(TypeError)になる
初めてPythonを学ぶ方も、この記事で紹介したoct関数を実際に書いて、基本的な使い方を試してみてください。
ファイル権限の操作など、特定の場面で8進数表記はよく使用されます。ぜひoct関数をマスターして、実用的なプログラムを作成できるようになりましょう。