■
なんか個人的に技術用のブログにしようと思ってたけど、雑多なこと全部書くことに変更します。なんか複数のとこに書くのがだるいんで。
といってもすぐ終わっちゃいそうですよね。
日常から勉強したことまで全部書いていきます。
Tkinterで自分用のテンプレート
ちょっとしたスクリプトでも、GUIつけとくと、
あとから便利だろうということで簡単な雛形を作成しときます。
# -*- coding: utf-8 -*- """ Tkinterで簡単なGUIを作る時のひな型 シンプルに。 http://www.shido.info/py/python6.htmlにあるデモを参考にしています。 """ import Tkinter as Tk import tkFileDialog as Fd import ScrolledText as S import tkMessageBox class MyFrame(Tk.Frame): def __init__(self, master=None): Tk.Frame.__init__(self, master) self.master.title('sample') la_top = Tk.Label(self, text=u'説明文') la_top.pack() # ファイル選択用 f1 = Tk.Frame(self) la1 = Tk.Label(f1, text=u'ファイル名') self.entry1 = Tk.Entry(f1, width=40) button1 = Tk.Button(f1, text='Browse...', command=self.filedialog) la1.pack(side=Tk.LEFT) self.entry1.pack(side=Tk.LEFT) button1.pack(side=Tk.LEFT) f1.pack() # 設定1 self.var_c1 = Tk.IntVar() self.var_c2 = Tk.IntVar() la_setting1 = Tk.Label(self, text=u'設定1') c1 = Tk.Checkbutton(self, text="check1", variable=self.var_c1) c2 = Tk.Checkbutton(self, text="check2", variable=self.var_c2) la_setting1.pack() c1.pack() c2.pack() # 設定2 self.var_r1 = Tk.IntVar() la_setting2 = Tk.Label(self, text=u'設定2') r1 = Tk.Radiobutton(self, text="check1", variable=self.var_r1, value=0) r2 = Tk.Radiobutton(self, text="check2", variable=self.var_r1, value=1) la_setting2.pack() r1.pack() r2.pack() # テキスト self.txt = S.ScrolledText(self, width=40) self.txt.pack() # ボタン f_button = Tk.Frame(self) button_func = Tk.Button(f_button, text=u'なんかやる', command=self.main) button_help= Tk.Button(f_button, text=u'HELP', command=self.help) button_func.pack(side=Tk.LEFT) button_help.pack(side=Tk.LEFT) f_button.pack() def main(self): """ メインの処理 """ s = "File Name: " + self.entry1.get() + "\n" s += "c1: %d, c2: %d\n" % (self.var_c1.get(), self.var_c2.get()) s += "r1: %d\n" % (self.var_r1.get()) top = Tk.Toplevel() t = TextFrame(top, "MAIN") t.set_text(s) t.pack() def help(self): tkMessageBox.showinfo('test', 'ヘルプだよ') def filedialog(self): # saveするときはasksavesafilename fname = Fd.askopenfilename(filetypes=[('All Files', ('*'))]) if fname: self.entry1.delete(0, Tk.END) self.entry1.insert(Tk.END, fname) class TextFrame(Tk.Frame): def __init__(self, master, title): Tk.Frame.__init__(self, master) self.master.title(title) self.txt = S.ScrolledText(self) self.txt.pack() def set_text(self, text): self.txt.insert(Tk.END, text) if __name__ == '__main__': frame = MyFrame() frame.pack() frame.mainloop()
PythonでExcelを読み込む(xlrd)
たくさんのExcelファイルから、それぞれのあるセルにあるデータを取り出してくる必要ができました。
VBAとかでやるのが筋なのかもしれませんが、Pythonで気軽にできないか調べてみることに。
以前PyExceleratorというライブラリがあったことを思い出して調べてみると、
最近は更新が停止されていて、xlrd, xlwtというライブラリを使うのが良いみたい。
公式サイトのPython Excelにpdfでまとめられたチュートリアルがあります。
かなり詳細に書いてあるので、わかりやすいです。
これを参考にインストールからやってみます。
概要
Excelを操作するパッケージとして以下の3つが用意されています。
- xlrd
- xlwt
- xlutils
xlrdが読み込み操作、xlwtが書き込み、xlutilsが既にあるExcelファイルをいじるなどのユーティリティを集めたものだそうです。
今回はxlrdのみ使います。
結構いろいろなことができるようですが、とりあえず今必要なセルの中身を読み込む操作だけやってみます。
インストール
easy_installを使って簡単にインストールできます。
easy_install xlrd
で完了です。
セルの読みだし
簡単なので、サンプルをちょっと改良するだけでできます。
わかりやすくて使いやすいですね。
import xlrd # open_workbook関数でファイルから読み込みます。 wb = xlrd.open_workbook('test.xls') # シートの情報を取得。 # wb.sheets()の返り値はシートの情報の入ったリスト sheets = wb.sheets() # シート1を使う s = sheets[0] # セルのオブジェクトを取得 c = s.cell(3, 2) # セルのオブジェクトを操作して情報を取得 print c.value
こんな感じで簡単に読みだせました。
pycronの動作の謎(謎のまま)
pycronではまりまくる。
まず、プログラムの指定にはまり、ディレクトリの指定にはまり。。。
と、あれこれ調べていたら、同じようにはまった方を発見。参考になります。
http://74.125.153.132/search?q=cache:Faa0oH8O6EoJ:d.hatena.ne.jp/thalion/20091230/p1+pycron+twitter&hl=ja&ct=clnk&cd=1
それでも、呟いてくれない。。。
と思ったら同じ症状の方が。。。
pythonでtwitterのbotを作る - 六番
とりあえず、インストールしたフォルダ内にあるpycron_console.exeをずっと実行しておけば動作してくれる。
でも邪魔だなぁ。
どうすればいいんだろう。
なんとなくVistaの権限関係が問題のような気もするけど、憶測の域を出ず。
PythonでTwitterのBOTっぽいのを作る
Windows環境で、起動してる間だけ呟いてくれます。
仲間内のネタキャラとして作成したので、その際の自分用メモ。
とりあえず、python-twitterが必要。
easy_installでインストール
easy_install python-twitter
後は以下のWebを参考にスクリプトを書いた。
簡単なTwitter Botのつくりかた(python編) - peroon's diary
これを自動で実行するべく、pycronのインストール。
(Windows環境なので。。。linuxとかだったらcronか)
pycronのインストールは以下を参考にしました!
http://www.multiburst.net/ElectricBrain/2009/10/windows-cron-pycron
公式のWebからインストーラをダウンロードしてインストールします。
インストールで大事なのは、最後の"install as service"みたいな項目にチェックを入れておくこと。
これで、Windowsのサービスとして、pycronが常時インストールされるようです。
あとは、上のサイトを参考に設定するだけ!
追記 09/01/20/23:25
と思ったけど、うまくいかない。
pycronがうまく動いてないみたい。。。どうしてだろう。
適当にftplib
作業の際に、FTPで他のコンピュータから頻繁にファイルを持ってくることがあります。
いちいちftpコマンドでがちゃがちゃやるのも面倒なので、
所望のファイルを適当に拾ってくるスクリプトを組みました。
といって、書いたスクリプトは個人情報やら変なコメントやらがあったので
書きなおし。例外処理は面倒なんで無かったり。
import getpass, ftplib, sys filename = "test.txt" # 取得するファイル名 host = ***** # host名 output_file = "out.txt" # ローカルでのファイル名 print u"passwordを入れてください" passwd = getpass.getpass() # パスワードを求める(入力させる) username = getpass.getuser() # ユーザー名の取得 ftp = ftplib.FTP(host) ftp.login(username, passwd) f = open(output_file, "w") ftp.retrbinary("RETR %s" % filename, f.write) # ファイルの内容を転送 ftp.close() f.close()
getpassモジュールが便利ですね。
最初知らなくて、inputとかでやりそうになってた。危ない。
ftplibは、hostを与えたFTPクラスを作って、ログインしてファイルに書きこむってかんじかな。
あんまり使い勝手が良くないような?
実際のスクリプトでは、ftpを操作する度に例外処理してたりします。