Pythonマニア

Pythonを楽しむ!

Archive List for Python モジュール

OpenPyXLでセルの書式設定を変更

OpenPyXLはPythonからExcelを操作するパッケージですが、今回はOpenPyXLでセルの書式設定を変更する方法を紹介します。 例えばExcelで「01」という値をセルに入力すると、デフォルトのセルの書式設定では数値として認識され「1」となってしまいます。 これをそのまま「01」と入力したければ、セルの書式設定を文字列にしておく必要があります。 このほか数値の小数点以下の桁数を指定したり、パーセンテージの書式に変更したい場合もあるでしょう。 このようにデフォルトの書式設定以外を使いたいければ明示的にセルに書式設定が必要です。これはPythonのOpenPyXLを使った場合も同じです。 セルの書式を文字列に設定する OpenPyXLからセルに書式設定するのは簡単です。次のようにOpenPyXLのCellオブジェクトのnumber_formatプロパティに表示形式を表す文字列を代入するだけです。 <Cellオブジェクト>.number_format = <表示形式文字列> セルの書式を文字列に設定する例でこれをみてみましょう。次のコードを実行すると、A1セルの書式が文字列に設定されます。 import openpyxl wb =openpyxl.Workbook() ws = wb.active cell = ws["A1"] cell.number_format = openpyxl.styles.numbers.FORMAT_TEXT wb.save('セルの書式を文字列に設定.xlsx') コードを実行した後にA1セルの書式設定を確認すると、文字列に設定されていることがわかります。 この例でセルに書式設定を変更しているコードは次の行です。 cell.number_format = openpyxl.styles.numbers.FORMAT_TEXT このようにCellオブジェクトのnumber_formatプロパティに表示形式を表す文字列を代入するだけです。 ここではopenpyxl.styles.numbersモジュールにあらかじめ定義された定数FORMAT_TEXTを代入しています。この定数の値は単なる「'@'」という文字列です。 代入できる値はあらかじめ定義された定数に限られません。number_formatプロパティにはExcelの表示形式を表す文字列を自由に設定できます。 表示形式を表す文字列とは、Excelの「表示形式」の「ユーザー定義」などに設定する文字列のことです。以下の図を参照してください。 例えば次のようにnumber_formatプロパティに設定すると、数値を小数点1桁まで表示します。 import openpyxl wb =openpyxl.Workbook() ws = wb.active cell = ws["A1"] cell.number_format = "0.0" cell.value = 123.456 wb.save('セルの書式を数値に設定.xlsx') 上記のコードを実行するとA1セルは「123.5」と表示されます。 Excelの書式記号の意味 Cellオブジェクトのnumber_formatプロパティに設定するときの、Excelの書式記号が使えることは前述しましたが、その書式記号のいくつかをここでて簡単に説明します。 […]

Pythonでgzipを解凍・圧縮する方法をサンプルコードで説明する

Pythonでgzipファイルを圧縮・解凍するにはgzipモジュールを使います。 gzipファイルを圧縮・解凍するのは、Pythonで通常のファイルを読み書きする方法とほとんど同じです。通常のファイル入出力が理解できていればgzipモジュールも簡単に使えます。 Pythonの通常のファイル入出力については「Python3入門 - ファイル入出力」に詳しく書いていますので、必要であれば参照してください。 まずは基本的な概要を説明し、そのあとはサンプルコードを使って実際に動作を見ていきましょう。 gzipファイルを圧縮・解凍する手順 gzipファイルを圧縮や解凍する手順はPythonのファイル入出力の手順と同じです。 with文でgzipファイルをオープンする。これにはgzip.open()関数を使う gzip.open()関数が返すファイルオブジェクトでgzipファイルを読み書きする ファイルを開く時にはwith文を使いましょう。そうすればファイルを自動的にクローズしてくれます。 with文の使用を推奨するのはgzipモジュールのドキュメントに次のような記載があるためです。 圧縮したデータの後ろにさらに何か追加したい場合もあるので、GzipFile オブジェクトの close() メソッド呼び出しは fileobj を閉じません。 このため、書き込みのためにオープンした io.BytesIO オブジェクトを fileobj として渡し、(GzipFile を close() した後に) io.BytesIO オブジェクトの getvalue() メソッドを使って書き込んだデータの入っているメモリバッファを取得することができます。 このようにgzip.open()関数が返すファイルオブジェクトのclose()関数を呼び出しても、下層のファイルオブジェクトが閉じられないかもしれません。 gzipファイルをオープンする gzipファイルをオープンするにはgzip.open()関数を使います。この関数の完全な構文は次の通りです。 gzip.open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None) 引数modeのデフォルト値は、組み込みのopen()関数と異なっていますので注意してください。gzip.open()関数はデフォルトでバイナリモード(b)でファイルをオープンします。 このように組み込みのopen()関数とデフォルトのmodeが異なるりますので、バイナリモード(b)で開くか、テキストモード(t)で開くか明示的に指定した方がわかりやすいでしょう。つまり「rb」、「ab」、「xb」、「rt」、「at」、「wt」のいずれかを指定します。 引数compresslevelには0から9の整数を指定できます。デフォルトの9は最大限の圧縮(しかし最も低速)を行います。 そのほかの引数は組み込みのopen()関数と同じですので、open()関数のドキュメントを参照してください。 gzipファイルを読み書きする gzip.open()関数が返すファイルオブジェクトは、組み込みのopen()関数が返すファイルオブジェクトと同様の読み込み関数と書き込み関数をサポートしています。 つまり書き込みにはwrite()関数、読み込みにはread()関数、readline()関数、readlines()関数などが使用できます。 ファイルオブジェクトをfor文で使うこともできます。 データからgzip圧縮ファイルを作成する ますは、Pythonのデータからgzip圧縮ファイルを作成する方法から見ていきます。 ここでの例でテキストデータとして次の文字列を使います。 >>> str = '''海が光る ... […]

Python3のipaddressモジュールの使い方

ipaddressモジュールは、IPアドレスやIPアドレスのネットワークを表すクラスを提供しています。 これらのオブジェクトを使うと、IPアドレスがネットワークに含まれるかを確認したり、ネットワークに含まれるIPアドレスを一覧するなど、IPアドレスに関する様々な処理を簡単に行うことができます。 このモジュールには、IPv4用とIPv6用の次のクラスが定義されています。 ipaddress.IPv4Address ipaddress.IPv6Address ipaddress.IPv4Network ipaddress.IPv6Network ipaddress.IPv4Interface ipaddress.IPv6Interface これらのオブジェクトは次の3つのに分類できます。 アドレスオブジェクト IPアドレスを表すオブジェクト(IPv4Address、IPv6Addressオブジェクト)。 「192.168.10.5」のような単一のIPアドレスを表します。 ネットワークオブジェクト ネットワークアドレスを表すオブジェクト(IPv4Network、IPv6Networkのオブジェクト)。 「192.168.10.0/24」のようにネットワークを表します。 インターフェイスオブジェクト インターフェイスを表すオブジェクト(IPv4Interface、IPv6Interfaceのオブジェクト) 「192.168.10.5/24」のようなネットワーク内のIPアドレスを表します。 ipaddressモジュールは、これらのオブジェクトを生成するファクトリー関数も提供しています。ファクトリー関数はオブジェクトの生成には便利ですが詳細を隠してしまうため、先ほど分類したオブジェクトから順に説明していきます。 ファクトリー関数については最後に説明します。 なお、この記事ではIPv4用のクラスについてのみ説明します。IPv6用のクラスについては機会があれば書きたいと思います。 アドレスオブジェクト アドレスオブジェクトはIPアドレスを表すオブジェクトです。IPv4用のIPv4AddressオブジェクトとIPv6用のIP64Addressオブジェクトがあります。 ここではIPv4用のIPv4Addressクラスのみに絞って説明します。 ipaddress.IPv4Addressクラス IPv4AddressクラスはIPv4のIPアドレスを表すクラスです。 IPv4Addressオブジェクトの生成 まずはIPv4Addressオブジェクトの作り方から説明します。このクラスのオブジェクトを生成するには次の関数を使います。 ipaddress.IPv4Address(address) addressには次のいずれかを渡します。 10進数のドット区切り形式。つまり0~255の範囲の4つの10進数をドッド(.)で区切ったもの (例:192.168.0.1) 32ビットに収まる整数 長さ4のbytesオブジェクト(最上位オクテットが先頭) 次の例は、どれも同じIPアドレスを表すIPv4Addressオブジェクトを生成します。 >>> ipaddress.IPv4Address('192.168.100.1') IPv4Address('192.168.100.1') >>> ipaddress.IPv4Address(3232261121) IPv4Address('192.168.100.1') >>> ipaddress.IPv4Address(bytes([192, 168, 100, 1])) IPv4Address('192.168.100.1') bytesオブジェクトの4つの要素は、IPアドレスのそれぞれのオクテットに対応します。 addressがIPv4アドレスとして不正ならAddressValueErrorが発生します。 >>> ipaddress.IPv4Address('192.168.100.256') Traceback (most recent […]