vars()
例
class foo:
def __init__(self, val_1, val_2):
self.val1 = val_1
self.val2 = val_2
afoo = foo(10, 20)
print(vars(afoo))
>>>
{'val1': 10, 'val2': 20}
Python tips
class foo:
def __init__(self, val_1, val_2):
self.val1 = val_1
self.val2 = val_2
afoo = foo(10, 20)
print(vars(afoo))
>>>
{'val1': 10, 'val2': 20}
Pywinauto
本エントリ作成時点(2017,Jun,10th)のバージョンは、0.6.1
(以下は、anacondaに作成した環境上のターミナルプロンプトから実行します。)
– pywin32のインストール
リビジョン220を入れる。
conda install -c conda-forge pywin32=220
conda install -c conda-forge six=1.10.0
conda install -c anaconda comtypes=1.1.2
上記HPのダウンロードリンクからZIPファイルのダウンロード&展開。
cd (zipを展開した setup.py を含むフォルダ)
python setup.py install
試しに以下のようなコードを書いたら動いた。
import time
from pywinauto.application import Application
slp = "notepad.exe"
app = Application().Start(cmd_line=slp)
mainwindow = app.notepad
mainwindow.Wait('ready')
time.sleep(3)
app.Kill_()
ただ、
\Anaconda3\envs\WinAutomation\lib\site-packages\pywinauto-0.6.2-py3.6.egg\pywinauto\application.py:1025: UserWarning: 32-bit application should be automated using 32-bit Python (you use 64-bit 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
みたいなことはできないのがもどかしいな。
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ファイル操作のパッケージを使っているのはそういった理由です。