XlsxWriterでエクセル(xlsx)ファイルを作成する

Index

1. はじめに

XlsxWriterというPyhtonライブラリを使用すれば、Pythonで簡単にxlsxファイルを作成することができる。

XlsxWriterは、xlsxファイルと100%の互換性があり、以下の操作が可能である。

  • 各書式設定
  • セルの結合
  • 名前定義
  • チャートの作成
  • オートフィルタ作成
  • データの入力規則設定
  • ドロップダウンリスト作成
  • 条件付き書式設定
  • 画像挿入 (PNG/JPEG)
  • 文字のデコレーション (文字色や大きさなど)
  • セルのコメント
  • テキストボックス操作
  • Pandasとの統合
  • 大容量ファイルへのメモリ最適化

今回は、XlsxWriterの基本的な使い方を説明する。

また、XlsxWriterは、pipでインストールすることができる。

% pip install xlsxwriter

2. ワークシートの作成

下記のコードを実行すると、sheet_name という名前のシートを持つ test.xlsx が作成される。
add_worksheet の引数でシート名を指定しなかった場合、デフォルトでは、sheet1 になる。

import xlsxwriter

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet('sheet_name')

workbook.close()

3. セルへの書き込み

セルへの値の書き込みは、以下のメソッドで行うことができる。

worksheet.write(行, 列, 文字列/値/式) or worksheet.write(指定セルの文字列, 文字列/値/式)

import xlsxwriter

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet('sheet_name')

worksheet.write(0, 0, 3)
worksheet.write(1, 0, 5)
worksheet.write(0, 1, "A1 + A2")
worksheet.write('B2', "=SUM(A1:A2)")
worksheet.write('C1', "https://google.com")
worksheet.write('C2', False)
worksheet.write('C3', None)

workbook.close()

f:id:Garfields:20171019211132p:plain

また、式やURLをただの文字列として入力したい場合は、write_strint() メソッドを使用する。

worksheet.write_string('B2', "=SUM(A1:A2)")

4. 書式を変更する

ここでは、以下を設定する。 - 文字の色 - 文字のスタイル - セルの色

書式を設定するには、add_format() メソッドを使用する。

import xlsxwriter

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()

fmt = workbook.add_format()
fmt.set_font_color('blue')
fmt.set_bold()
fmt.set_bg_color('yellow')

worksheet.write('B2', "文字だよー", fmt)

workbook.close()

f:id:Garfields:20171019211146p:plain

また、add_format() メソッドは、以下のような書き方もできる。

fmt = workbook.add_format({
    'bold':True,
    'font_color':'blue',
    'bg_color':'#FFFF00',
})

worksheet.write('B2', "文字だよー", fmt)

その他のフォーマットは、こちらに詳細が記されているので、参照したい。

5. 条件付き書式の設定

XlsxWriterでは、条件付き書式も扱うことができる。
以下は、値が50より下ならば背景を赤に、50以上ならば青にするプログラムである。

import xlsxwriter
import numpy

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet('sheet_name')


fmt1 = workbook.add_format({'bg_color':'blue'})
fmt2 = workbook.add_format({'bg_color':'red'})

worksheet.conditional_format('A1:J10', {'type':     'cell',
                                        'criteria': '>=',
                                        'value':    50,
                                        'format':   fmt1})

worksheet.conditional_format('A1:J10', {'type':     'cell',
                                        'criteria': '<',
                                        'value':    50,
                                        'format':   fmt2})

values = numpy.random.randint(0, 100, (10, 10))

for x in range(10):
    for y in range(10):
        worksheet.write(x, y, values[x][y])

workbook.close()

f:id:Garfields:20171019211204p:plain

条件付き書式の詳細は、こちらに記載されている。

参考

書籍

Index

1. はじめに

pythonのRequestsを使えば、簡単にHTTPリクエストを作成することができる。
本稿では、Requestsの基本的な使い方を紹介する。

2. インストール

Requestsは、pipでインストールできる。

% pip install requests

また、以下でインポートする。

import requests

3. リクエストの生成

Requestsでは、以下7メソッドを使用してリクエストを生成することができる。
戻り値は、Response オブジェクトである。

requests.request(method, url, **kwargs)

また、method が指定されている以下のメソッドでも実現できる。

requests.get(url, **kwargs)
requests.post(url, **kwargs)
requests.put(url, **kwargs)
requests.delete(url, **kwargs)
requests.head(url, **kwargs)
requests.options(url, **kwargs)

オプション

  • params
    辞書またはバイナリ
    URLのクエリ文字列として送信される

  • data
    辞書、バイナリ、またはファイルオブジェクト
    ボディに埋め込まれ送信される

  • headers
    HTTPヘッダの辞書
    ヘッダとして送信される

  • cookies
    辞書または CookieJar オブジェクト
    クッキーとして送信される

  • files
    名前とファイルオブジェクトの辞書 ( {名前:ファイルオブジェクト} )
    または、( {名前 : (ファイル名:ファイルオブジェクト)} )
    multipart エンコードしファイルをアップロードする

  • auth
    認証タプル
    Basic/Digest/Custom HTTP 認証用

  • timeout
    Float
    リクエストのタイムアウトを指定する

  • allow_redirects
    Boolean
    POST/PUT/DELETE リダイレクトを許可するならTrue

  • proxies
    次のような辞書
    {'http': 'http://127.0.0.1:1234'}

  • verify
    Boolean
    真ならば、SSL証明書を検証する

  • stream
    Boolean
    False の場合、レスポンスの内容が直ちにダウンロードされる

  • cert
    文字列またはタプル
    文字列の場合、ssl クライアント証明書のパス (.pem)
    タプルの場合、('cert', key') のペア

4. ステータスコードの取得

r = requests.get("http://httpbin.org/get")
print(r.status_code)
# 200

5. レスポンスヘッダの取得

r = requests.get("http://httpbin.org/get")
print(r.headers)
# {'X-Powered-By': 'Flask', 'Connection': 'keep-alive', 'X-Processed-Time': '0.000687837600708', 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', 'Server': 'meinheld/0.6.1', 'Via': '1.1 vegur', 'Content-Length': '267', 'Date': 'Mon, 06 Nov 2017 01:49:32 GMT'}

上記は普通の辞書に見えるが、参照時に大文字と小文字を区別しない。

print(r.headers["Content-Type"])
# 'application/json'

print(r.headers["CONTENT-TYPE"])
# 'application/json'

また、getメソッドを使用しても要素を取得することができる。

print(r.headers.get("Content-Type"))
# 'application/json'

print(r.headers.get("content-type"))
# 'application/json'

6. ボディの取得

6.1 テキストを取得

r = requests.get("http://httpbin.org/get")
print(r.text)
# {
#   "args": {},
#   "headers": {
#     "Accept": "*/*",
#     "Accept-Encoding": "gzip, deflate",
#     "Connection": "close",
#     "Host": "httpbin.org",
#     "User-Agent": "python-requests/2.18.4"
#   },
#   "origin": "118.103.21.193",
#   "url": "http://httpbin.org/get"
# }

6.2 bytesとして取得

print(r.content)
# b'{\n  "args": {}, \n  "headers": {\n    "Accept": "*/*", \n    "Accept-Encoding": "gzip, deflate", \n    "Connection": "close", \n    "Host": "httpbin.org", \n    "User-Agent": "python-requests/2.18.4"\n  }, \n  "origin": "x.x.x.x", \n  "url": "http://httpbin.org/get"\n}\n'

6.3 jsonとして取得

r = requests.get("http://httpbin.org/get")
print(r.json())
# {'url': 'http://httpbin.org/get', 'origin': 'x.x.x.x', 'headers': {'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'Accept': '*/*', 'User-Agent': 'python-requests/2.18.4', 'Connection': 'close'}, 'args': {}}

print(r.json()["url"])
# 'http://httpbin.org/get'

7. 画像データを取得、保存する

import requests
from PIL import Image
from io import BytesIO

r = requests.get('http://httpbin.org/image/png')
image = Image.open(BytesIO(r.content))
image.save("test.png")

8. getのパラメータ追加

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)
print(r.url)
# 'http://httpbin.org/get?key1=value1&key2=value2'

9. リクエストヘッダの変更

headers = {'user-agent':'test'}
r = requests.get("http://httpbin.org/get", headers=headers)
print(r.json()['headers']['User-Agent'])
# 'test'

10. フォームの送信

HTMLのフォームのようなデータを送信するには、data 引数に辞書を渡せば良い。

data = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=data)
print(r.json()['form'])
# {'key1': 'value1', 'key2': 'value2'}

エンコードされていないデータを送信したい場合は、文字列を渡せば良い。

import json
r = requests.post("http://httpbin.org/post", data=json.dumps(data))
print(r.json()['data'])
# '{"key1": "value1", "key2": "value2"}'

参照

http://requests-docs-ja.readthedocs.io/en/latest/user/quickstart/

書籍

入門 Python 3

入門 Python 3

Pythonスタートブック

Pythonスタートブック

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)

  • 作者: Pythonサポーターズ,露木誠,ルイス・イアン,石本敦夫,小田切篤,保坂翔馬,大谷弘喜
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/03/05
  • メディア: 大型本
  • 購入: 1人 クリック: 65回
  • この商品を含むブログ (30件) を見る

Pythonプロフェッショナルプログラミング 第2版

Pythonプロフェッショナルプログラミング 第2版