61 件 見つかりました。
import os os.access('.emacs', os.F_OK) # True os.access('.eeeee', os.F_OK) # False
python-modeはなかなか便利。http://aki.issp.u-tokyo.ac.jp/itoh/PukiWiki/index.php?python
M-x py-shellでpythonコンソールが現れる。普通のシェルでpythonを起動するとキーバインドの点で不満が大きいが、Emacs上ならそんな問題はない。色々と便利機能があるみたいだが、py-shellに限れば
M-n comint-next-input M-p comint-previous-inputでヒストリが辿れればまあ満足。
例えばデジカメ写真の一括リネームなど。
import glob, os i = 1 for fname in glob.glob('*.JPG'): os.rename(fname, "070214_MyPhoto_%02d.JPG" % (i)) i+=1 print "finished"
WikipediaのHTMLを、chalowの表用にpythonで整形するスクリプトを書いた。大したコードじゃないが不慣れから結構時間を喰った。何回かこういうことをこなしていけばスラスラ書けるようになるのかな。
import sys def split_elements(str, tag): tag_start = '<%s>' % (tag) tag_end = '</%s>' % (tag) if -1==str.find(tag_start): return [] startpos = str.find(tag_start) + len(tag_start) str = str[startpos:] # discard the "header" records = [] for record in str.split(tag_start): endpos = record.find(tag_end) if -1!=endpos: # non-closed tag will be ignored record = record[:endpos].strip() # end-tag and newlines are not needed records.append(record) return records def format_printable(num): str = open('ascii_printable%d' % (num), 'r').read() str = str.replace(' ', ' ') str = str.replace('&', '&') str = str.replace('<', '<') str = str.replace('>', '>') records = split_elements(str, 'tr') for record in records: datas = split_elements(record, 'td') if 0==len(datas): # ignore <th> record continue for data in datas: print '||%s' % (data), print def format_nonprintable(): tdtag = '<td style="font-family: \'lucida sans unicode\',\'arial unicode ms\';">' str = open('ascii_nonprintable', 'r').read() str = str.replace(tdtag, '<td>') str = str.replace(' ', ' ') records = split_elements(str, 'tr') for record in records: datas = split_elements(record, 'td') if 0==len(datas): # ignore <th> record continue del datas[4] # figure for data in datas: print '||%s' % (data), print format_nonprintable() print format_printable(1) print format_printable(2) print format_printable(3)
これはタイトルのまんま
ちょっとしたテキスト整形をpythonでやろうとしたが、ファイル入力あるいは標準入力のコードがとっさに全く思いつかず、ああまだ全然慣れてないのだなと思った。以下にメモる。
import sys f = open('test.txt', 'r') # file #f = sys.stdin # standard input for line in f: # f.readlines() will do the same print line, # comma is to suppress newline characters
三項演算子ではなくifとelseで書けよとのことだそうだ。
http://omake.accense.com/wiki/PythonIntroThree
py2exeというのが、pythonスクリプトをWindows実行形式に変換してくれるプログラムのようだ。すげー
私はダウンロードした実行ファイルをまず展開してインストール方法がわからずムカツいたが、単に実行ファイルを実行するだけでインストールは即座に終わった。
実際に変換するには
from distutils.core import setup import py2exe #setup(console=["aaa.py"]) # 実行時dos画面が出る setup(windows=["aaa.py"]) # 実行時dos画面が出ないなるsetup.pyを用意した上で
python setup.py py2exeとする。するとdistディレクトリ内にexe本体を含めた配布用ファイル一式が出来上がる。配布にあたってはこれらをまとめて配布する必要がある。
ちょっとしたGUIプログラムをパッと作りたい時にどうするか。
C/C++はちょっとやるだけには面倒なので、もっと何も考えないでいいやつにしたい。
Visual Basicは文法面がちょっと気にくわない。.NETはよくわからない。
じゃあスクリプト言語でということになるが、何かと文書やツール類が充実してるpythonが良さそう。
で、WindowsでpythonをGUIから使う/呼ぶためにはどうすればいいのか調べたことをメモする。
まずwxWidgetsというものがある。これは言語やOSの違いを吸収してくれるGUIツールキット。これをpythonからいじるためのものがwxPythonである。これが「pythonでGUI」に必要な条件(他のツールキットももちろんある)。
で、GUI設計においてはデザイナの使用がキモなので、このためのツールを探した。そしてwxGladeなるものとXRCedなるものを発見した。
前提(サイザー)
wxWidgetsにおいてはサイザーなるオブジェクトがある。これはウィンドウと各コントロールの相対的な大きさや位置関係をよしなに面倒見てくれるオブジェクト。wxWidgetにおいては、コントロールの配置はサイザーの使用が原則のようだ。wxGladeではサイザーが無いとコントロールが配置できない。XRCedではできるみたい。
wxGlade
これはコントロールを比較的直観的に、つまりはVisual Studioのように配置できるため、画面などもそこそこ見慣れたものが出てくる。GUIの情報の出力形式はXRC(後述)、python、C++など色々と選べる。インストーラでインストールできた。
wxWidgets でクロスプラットフォーム GUIアプリを作ろう
XRCed
これはVisual Studioなどと比べ抽象的に(と感じた)コントロールを配置するもので、最初は面喰らったがサイザーの概念が多少わかるとこれはそれほど苦にならなかった。GUI情報の出力はXRCのみ。wxPythonで記述されており、wxPythonに付属。
PythonMatrix:XRCedの使い方
ちょっと触っただけだが、どちらも優れていて使い易そうだなと感じた。だが、wxGladeは複数の出力形式ができ、イベントハンドラ名の記述もできる点で優れているのかなあと感じた。GUI部分を変更して上書き保存しても、ハンドラの定義部分はうまく残してくれるようだ。
順番は前後したが、wxPythonにおいてGUIの記述は2通りある:ソースに直接コントロールの配置など全て記述するのと、GUI情報のみXMLファイルに格納し(これをXRCというようだ)別途読み込むこと。前者はソースひとつで完結する単純明瞭さがメリットで、後者はインターフェースと処理のロジックを分離できるのがメリット。
wxGladeでハンドラを指定してpython形式で出力するとハンドラの記述も終わっていて便利。一方でXRCで出力すると、後に別途自分でpythonソースにハンドラを記述(「このボタン押下時この関数を呼べ」)する必要があってひと手間増える(GUIとソースの分離がXRCの本質なので、まあこれは当然)。XRCedは出力がXRCなので、当然同様な事情である。
パッと作成するシンプルさの観点からは、wxGladeを使用してpythonで出力するのが良さそうというのが今日の結論。
なお、XRCで記述したコントロールに対しイベントハンドラを記述するには以下のようにする。XRC Tutorial
<?xml version="1.0" encoding="cp932"?> <resource> <object class="wxFrame" name="myframe"> <title>myframe_title</title> <object class="wxPanel" name="mypanel"> <object class="wxBoxSizer"> <orient>wxVERTICAL</orient> <object class="sizeritem"> <object class="wxButton" name="mybutton"> <label>mybutton_label</label> </object> </object> </object> </object> </object> </resource>
import wx from wx import xrc class MyApp(wx.App): def OnInit(self): self.res = xrc.XmlResource('hoge.xrc') self.init_frame() return True def init_frame(self): self.frame = self.res.LoadFrame(None, 'myframe') self.panel = xrc.XRCCTRL(self.frame, 'mypanel') self.frame.Bind(wx.EVT_BUTTON, self.OnMyButton, id=xrc.XRCID('mybutton')) # wx.EVT_BUTTON(self, xrc.XRCID('mybutton'), self.OnMyButton) # also acceptable ?! self.frame.Show() def OnMyButton(self, evt): wx.MessageBox('hoge', 'fuga') if __name__ == '__main__': app = MyApp(False) app.MainLoop()