61 件 見つかりました。

CHALOW Search - hiChangeLog ChangeLog INDEX

[ 前へ ] 1 2 3 4 5 6 7 [ 次へ ]

コマンドを実行するにはosモジュールのsystem関数を使う [python]

import os
os.system('ls')

ファイル・ディレクトリの存在確認にはosモジュールのaccess関数を使う [python]

import os
os.access('.emacs', os.F_OK) # True
os.access('.eeeee', os.F_OK) # False

Emacsでpythonのコンソールを出していじる [python][Emacs]

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
でヒストリが辿れればまあ満足。

pythonでファイル名に連番を振る [python]

例えばデジカメ写真の一括リネームなど。

import glob, os

i = 1
for fname in glob.glob('*.JPG'):
    os.rename(fname, "070214_MyPhoto_%02d.JPG" % (i))
    i+=1
print "finished"

WikipediaのASCIIの表をpythonでchalow用に整形した [python]

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)

stringオブジェクトの説明は、"Python Library Reference (2.4)"の2.3.6節、Built-In Objects => Built-In Types => Sequence Typesにあった [python]

これはタイトルのまんま

ファイル入力及び標準入力 [python]

ちょっとしたテキスト整形を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

pythonに三項演算子は無い [python]

三項演算子ではなくifとelseで書けよとのことだそうだ。
http://omake.accense.com/wiki/PythonIntroThree

py2exeでpythonスクリプトをWindows実行形式に変換 [python][Windowsプログラミング]

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本体を含めた配布用ファイル一式が出来上がる。配布にあたってはこれらをまとめて配布する必要がある。

参考:
py2exe: Python のスクリプトを Windows 用の実行ファイル (exe形式) に変換する
py2exe

wxWidgetsのGUIデザイナ:wxGladesとXRCed [python][Windowsプログラミング][wxPython]

ちょっとした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()

[ 前へ ] 1 2 3 4 5 6 7 [ 次へ ]

ChangeLog INDEX
Powered by chalow