Python octの使い方

この記事のポイント

Pythonのoct関数は、整数を8進数表記の文字列に変換するための関数です。

この記事を読むと、次のようなことが身に付きます。

  • oct関数を使って整数を8進数文字列に変換する方法がわかる
  • 負の数やさまざまな型の数値がoct関数でどのように扱うかがわかる 
  • ファイル権限の設定など、8進数が使われる場面での活用例を知る

この記事を通して、oct関数の正しい使い方をマスターすれば、数値データを扱うプログラムを効率的に書けるようになります。

目次

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進数に変換してみましょう。

result = oct(8) print(result)

出力結果

0o10

この例では、oct関数に数値8を渡し、8進数に変換しています。進数の8は、8進数では10(8の位が1、1の位が0)となります。oct関数は8進数表記の目印として「0o」を先頭に付けるため、0o10と表示されます。

また、より大きな数値でも同様に変換が可能です。64という数値を8進数に変換する例を見てみましょう。

decimal_number = 64 octal_representation = oct(decimal_number) print(f"10進数{decimal_number}は8進数で{octal_representation}です")

出力結果

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進数に変換します。

cats_count = 25 octal_cats = oct(cats_count) print(f"ネコが{cats_count}匹います") print(f"8進数では{octal_cats}匹です")

出力結果

ネコが25匹います
8進数では0o31匹です

この例では、変数cats_countに代入した25をoct関数で変換しています。10進数の25は、8進数では31(8の位が3、1の位が1)です。oct関数は自動で接頭辞「0o」を付けるため、結果は0o31となります。

負の数の8進数変換

oct関数は負の数も適切に処理できます。この例では、地下にいるモグラの数を負の数で表現し、8進数に変換してみます。

underground_moles = -12 octal_moles = oct(underground_moles) print(f"地下{abs(underground_moles)}メートルのモグラ位置") print(f"8進数表現: {octal_moles}")

出力結果

地下12メートルのモグラ位置
8進数表現: -0o14

この例では、-12をoct関数に渡しています。10進数の12は8進数で14です。負の数の場合、oct関数はマイナス記号と接頭辞「0o」を組み合わせた「-0o」を先頭に付けます。そのため、結果は-0o14と表示されます。

ファイルの権限設定での活用

LinuxなどのUnix系システムでは、ファイルのアクセス権限(パーミッション)を8進数で設定することがよくあります。例えば、権限設定「755」(所有者は読み書き実行可、その他は読み取り実行可)は、10進数では「493」にあたります。

ここでは、10進数の493をoct関数で変換し、8進数の権限表記0o755としてみます。

file_permission_decimal = 493 permission_octal = oct(file_permission_decimal) print(f"イヌの写真ファイル権限 (10進数): {file_permission_decimal}") print(f"8進数表現: {permission_octal}") print(f"{permission_octal} は、読み書き実行(7)、読み実行(5)、読み実行(5)の権限を示します")

出力結果

イヌの写真ファイル権限 (10進数): 493
8進数表現: 0o755
0o755 は、読み書き実行(7)、読み実行(5)、読み実行(5)の権限を示します

この例では、10進数の493をoct関数で変換しています。結果は0o755となり、Unix系システムでよく使われるファイル権限の8進数表記が得られました。oct関数を使うと、10進数で管理している数値を、システム設定で必要な8進数表記に変換する際に役立ちます。

リストの要素を一括変換

複数の数値を一度に8進数変換する場合のサンプルコードです。動物園の各エリアにいる動物の数を8進数で管理してみます。

animal_counts = [8, 16, 32, 64] octal_list = [oct(count) for count in animal_counts] for i, (dec, octal) in enumerate(zip(animal_counts, octal_list)): animals = ['ライオン', 'トラ', 'ゾウ', 'キリン'] print(f"{animals[i]}: {dec} → {octal}")

出力結果

ライオン: 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進数に変換してみましょう。

hex_rabbit_id = 0xFF decimal_value = int(hex_rabbit_id) octal_rabbit_id = oct(decimal_value) print(f"ウサギID(16進数): {hex(hex_rabbit_id)}") print(f"ウサギID(8進数): {octal_rabbit_id}")

出力結果

ウサギ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進数に変換してみます。

binary_pattern = 0b1101 bird_pattern_oct = oct(binary_pattern) print(f"スズメの鳴き声パターン(2進数): {bin(binary_pattern)}") print(f"スズメの鳴き声パターン(8進数): {bird_pattern_oct}") print("パターン解析完了")

出力結果

スズメの鳴き声パターン(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進数表記を使ってみます。

panda_weight = 120 octal_weight = oct(panda_weight) print(f"パンダの体重: {panda_weight}kg ({octal_weight})") if panda_weight > 100: print("大型動物に分類されます") print(f"管理番号: {octal_weight}") else: print("中型動物に分類されます")

出力結果

パンダの体重: 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関数をマスターして、実用的なプログラムを作成できるようになりましょう。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. Pythonのリファレンス記事一覧
  4. Python octの使い方