文字列置換のメモ

pythonでの文字列置換

簡単な置換

replace()を使う

original_str = "ABCD12341234"
# ABCDEFGHEFGH と置換される
replaced_str = original_str.replace("1234","EFGH")

上記は、マッチする文字列をすべて置換する。第三引数として、数を指定すると、指定する回数まで実施する。

original_str = "ABCD12341234"
# ABCDEFGH1234 と置換される
replaced_str = original_str.replace("1234","EFGH",1)

正規表現

re.sub()をつかう。引数が多くて少しややこしい。

import re
original_str = "ABCD12341234"
# ABCDEFGH と置換される
replaced_str = re.sub(r'[0-9]+', "EFGH", original_str)

re.sub()も最後の引数に数字をとり、繰り返し回数を指定できる。

perlの時のようにstr =~ s/[0-9]+/EFGH/gみたいなことはできないのがもどかしいな。

Openpyxlによるxlsxファイルの操作

Excelのファイルの編集

Openpyxl パッケージ

Excelのファイルのうち、xlsx、xlsmファイルを操作することが出来るのがOpenpyxlパッケージです。xlrdなど他のパッケージもありますが、古いxlsファイルでは無く、xlsxファイルを扱うならば、このopenpyxlの方が使いやすいのではと思いました。

仕事ではエクセルをたくさん使うと思いますが、これを使えば、いろいろな作業が簡単にならないかと思った次第です。

ファイルのオープンとセーブ

すごくわかりやすいです。既存ファイルのパスが入っている変数をnewFnameとすると、

import openpyxl as ox
wb = ox.load_workbook(newFname)
wb.save(newFname)

日時の情報をセルに設定する

Openpyxlで、単純な数値を扱う場合の例はいろんなサイトにあるようでしたが、日付を扱う場合の例があまりないようでしたので記載します。具体的には、セルにdatetimeパッケージのオブジェクトを設定すると、日付や時間としてセルに値を書き込んでくれます。

import openpyxl as ox
import datetime

wb = ox.load_workbook(newFname)
ws = wb.active

aDate = datetime.date(year=2017, month=6, day=4)
ws['A1']=aDate

表示形式でユーザ定義の書式を設定したい

このままだと、Excel上では2017-06-04のように表示されてしまいます。好みの表示書式に設定するには、cellオブジェクトのnumber_formatプロパティにを使います。

# 申請日 : 2017年 6月 4日(日曜日) みたいな感じになります。
dateformat = "\"申請日 : \"[$-411]ggge\"年 \"m\"月 \"d\"日 ( \"aaa\" 曜日)\";@"
ws['A1'].number_format=dateformat

なお、未だ自分が知らないだけかも知りませんが、セルに値を設定すると様々なプロパティが失われてしまいます。なので、上記の様なフォーマット設定は、値設定後にする必要があります。

罫線を引く、セルの罫線を保持する

罫線は,Borderオブジェクトをcellのborderプロパティに設定することで引けます。
上記に書いたように値設定するとセルの情報が失われるので、先に元の罫線の情報をコピーしておくと良いです。

from copy import copy
border = copy(ws['A1'].border)
ws['A1']=aDate
ws['A1'].border=border

ちなみに

xlsx,docx,pptxなどのMS Officeのファイルって実はzipファイルだって知ってました?。ファイルの拡張子をzipに変更して、解凍する事が出来ます。そうすると、複数のフォルダとxmlファイル等を取り出すことが出来ます。Openpyxlでxmlファイル操作のパッケージを使っているのはそういった理由です。

JetpackのMarkdown機能だけを有効にする

JP Markdownのサポート終了に対する対処

Markdownを使おうとする

注意:この記事を書いた後JetpackがVerupされてしまってModule Control for Jetpackが新バージョンに対応しているかは分かりません。

このページの作成をするのに、ビジュアルモードだと思った通りに段落やインデントの処理をかけられず、かといってテキストモードだとHTMLを一生懸命書かなくてはいけないということで、少し困っていた。調べるとWikiの記法のようなMarkdownという形式を使う方法があるとのことで試そうと思った。Wikiには結構親しみがある。

JP Markdownはサポート終了

WordPressにはテキストモードでMarkdown記法が使えるようになるJP Markdownというプラグインがあると知って、入れようと思ったら、サポートが終了していた。このプラグインはWordpress謹製のJetpackというプラグインのMarkdown記法をエディタで有効化するモジュールを切り出した物だったとか。

JetpackプラグインのMarkdown部分だけを使う

ということで、まずJetpackプラグインを入れる。ただ、これは機能が多すぎる。Wordpress.comのアカウントと連携しろとかも言ってくる。そこで、Jetpackの機能を必要なところだけ有効にするプラグイン、Module Control for Jetpackというものを作成している人がいて、それを使ってみる。

使い方

  1. 各プラグインのインストール

JetpackプラグインとModule Control for Jetpackプラグインとをそれぞれインストールし有効化する。

  1. Module Control for Jetpackの設定をする

Module Control for Jetpackを有効化すると、ダッシュボードの設定にJetpackの各モジュールに対する設定画面が追加される。下記の画像のように、Jetpackのバージョンアップ時の設定の自動再設定と、Wordpress.comへの接続を切った上で、不要なモジュールに全てチェックを入れよう。

当然、Markdownのモジュールにはチェックを入れない

  1. Jetpackプラグインから、エディタでのMarkdown使用を有効にする。

Jetpackプラグインの設定画面から、さらに設定画面に入る。ちなみの、上記の作業で、Jetpackプラグインはdev mode(開発者モード)となり、いろいろな機能が無効化されているはずだ。

設定画面の下に、Writing(記事編集)のテキスト画面で、Markdown構文を使うかを指定するスイッチがあるので、これを有効にする。

上記で、投稿作成のtextモードで、Markdown構文を記述すると、その使用に応じてフォーマットされて表示されるはずだ。

細かい、構文については以下の参考URLを見てください。

参考