約 3,401,036 件
https://w.atwiki.jp/hakuryu7orange/pages/13.html
並列化処理のための拡張言語であるOpenMPについてのメモ。 OpenMPの使用方法、及び環境設定(Visual Studio) 変数について 1 private変数 threadの生成 memo OpenMPの使用方法、及び環境設定(Visual Studio) まず、「プロジェクトのプロパティー C/C++ 言語」で、OpenMPサポートを「はい」に変更する。これでRelease構成では問題なく使用できるようになる。(「omp.h」をインクルードする必要がある。) ビルド時に何かしらのエラーが出た場合には、「Windows SDK for Windows Server 2008 and .NET Framework 3.5」をインストールしてあげればよい。 必要なのは、「Visual C compiler」にだけチェックを入れとけばいい。 Debag構成で使用したい場合、Standard_Edition以上のバージョンに含まれている(VS2008) 「Microsoft.VC90.DebugOpenMP.manifest」 「vcomp90d.dll」 の二つのファイルを C \Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugOpenMP から、実行ファイルがある場所にコピーしてくる事で、使用できるようになる。 threadの生成 下のような場合、これはコア数分だけスレッドが生成される。 #pragma omp parallel { printf( "スレッド:%d\n", omp_get_thread_num()); } 次に「parallel」の後に「sections num_threads(var)」をつけてあげると、指定した数分だけスレッドが生成される。 #pragma omp parallel sections num_threads(3) { #pragma omp section printf("a, from %d of %d\n", omp_get_thread_num(), omp_get_num_threads()); #pragma omp section printf("b, from %d of %d\n", omp_get_thread_num(), omp_get_num_threads()); #pragma omp section { printf("c,from %d of %d\n", omp_get_thread_num(), omp_get_num_threads()); printf("d,from %d of %d\n", omp_get_thread_num(), omp_get_num_threads()); } } これはシングルコアでも可能であるが、効率が悪くなる。つまり、コア数以上のスレッドを作っても、効率が悪くなるということ。 memo 他の端末でOpenMPを使って作成したプログラムを動かす場合、再配布可能パッケージをインストールする必要がある。 ちなみに、visual studioがインストールされていなくても問題はない。
https://w.atwiki.jp/nkym_memo/pages/62.html
gccでのOpenMP導入 gccのバージョンが4.2以上でコンパイル可能 ※gccのバージョンは $gcc --version で確認できる ヘッダファイル 「omp.h」 #include omp.h コンパイルオプション 「-fopenmp」 gcc -fopenmp test.c リンカオプション gcc -lgomp test.o -o test Makefileで .c.o g++ -c $ の部分に注意。C++の一般的な拡張子.cppだと .cpp.o g++ -c と合わせないと並列化されない(.cでもコンパイルは通る) 構文 構文 参考文献 OpenMP入門 マルチコアCPU時代の並列プログラミング(北山洋幸,2009,秀和システム)
https://w.atwiki.jp/conn1/pages/19.html
Ubuntuはインストールされてる前提で進める。 ApacheとWSGIはとりあえず置いておく。 まずはPythonの確認 python --version Django1.4がサポートしてるのは、Pythonの2.5~2.7 pythonがUbuntuに入ってないということは、ありえないと思うのでインストールは割愛。 (将来的に入らないこともありえるのだろうか……) pip Pythonのパッケージ管理ツールである pip をインストールする。 今後かなーりお世話になるはずなので pip ぜひ覚えておこう。エレキバンとは関係ない。 http //www.pip-installer.org/en/latest/installing.html ここを参考にした。バーチャルenvとか何やらサッパリなので無視って、普通のやりかたを採る。 コマンド列挙。いちいちsudoるのは煩雑なのでsuがいい。suしなさい。 su出来ないなら、全部のコマンドの前にsudo入れるかバーチャルenvを使ってください。 su apt-get install curl curl http //python-distribute.org/distribute_setup.py | python curl https //raw.github.com/pypa/pip/master/contrib/get-pip.py | python で、確認 pip --version user@ubuntu ~$ pip --version pip 1.2.1 from /usr/local/lib/python2.7/dist-packages (python 2.7) user@ubuntu ~$ バージョンが確認できたらOK Django pip を使って Djangoを入れる。ジャンゴ汎用とは関係ない(これが理解出来る人とはうまい酒がry sudo pip install Django こんな感じに成功するはず user@ubuntu ~$ sudo pip install Django Downloading/unpacking Django Downloading Django-1.4.2.tar.gz (7.7MB) 7.7MB downloaded Running setup.py egg_info for package Django Installing collected packages Django Running setup.py install for Django changing mode of build/scripts-2.7/django-admin.py from 644 to 755 changing mode of /usr/local/bin/django-admin.py to 755 Successfully installed Django Cleaning up... user@ubuntu ~$ 開発途上をソースから入れたいんじゃー、という方は https //docs.djangoproject.com/en/1.4/topics/install/#installing-development-version ここからどうぞ 確認 python Pythonが起動したら import django print django.get_version() バージョン番号が出てくればOK Railsに比べて、なんと簡単なことか! Railsは素晴らしい。だがDjangoも素晴らしい。 続けて、本家のチュートリアルとかやって、Djangoを学ぶといいでしょう。 https //docs.djangoproject.com/en/1.4/intro/tutorial01/ 緑が基調のページなので目にやさしく学ぶことができますよ なお、Pythonの基本が知りたいひとは コマンドラインから python を叩いて、起動し、 サンドボックスよろしく色々やってみたらいいと思う。 http //www.python.jp/doc/2.7/ 日本語ドキュメントがあるので、本なんか要らないよ。 右側に載せてるけどね「みんなのPython」 いくつかのサイトで、おすすめっぽく紹介されてたので、おそらく、多分、きっと良書。
https://w.atwiki.jp/tagami/pages/127.html
メモリ共有型並列計算 Lisへの導入 LisへのopenMPへの導入は,Lisのインストール時に ./configure --enable-omp とオプションをつけるだけで良い. しかし,サブルーチンでLisを使用する場合, lis_initialize( argc, argv); を最初に定義しないとエラーが出る. (サブルーチンの引数に"int argc, char** argv"を渡す)
https://w.atwiki.jp/komugi_com/pages/13.html
マルチプロセッサ対応のプログラムを作るためのC言語のディレクティブと関数のセット。gcc 4.2以降でサポート 使いかた http //d.hatena.ne.jp/kamekamekame877/20070802 リンク時にも -fopenmp を付けなきゃダメなんだな.でも速度は変わらなくて,OpenMPの効果無かった.うそ,倍くらい速くなった.指定の仕方が悪かったんだね. #pragma omp for schedule(static) じゃなくて, #pragma omp parallel for schedule(static) じゃなきゃいけないか.parallel 指定文でのみスレッドが生成されるんだ.だから,parallelを指定しないと意味が無い. これは簡単に速くなっていいぞ!このプラグマ文と omp.h を読み込みさえすればいいんだから. ちなみに,並列計算中のプロセスのCPU使用率はは top コマンドで見ると100%を超えます.デュアルコア・ハイパースレッディングのマシンなら,300%を超えます(必ずしも3倍の速さではない).timeコマンドでは,実時間が10秒で,ユーザ時間が20秒(スレッドを2つ以上使ったから)とかにもなりえます.
https://w.atwiki.jp/chapati4it/pages/46.html
Pythonとは 欧米で大人気のスクリプト言語でPlay Framework 1.2系でもCUIに採用されている。 DotCloudやGoogleAppEngineでサーバーサイドスクリプトとして動かすこともできる。 Pythonインストール(windows) 付属のIDE(IDLE)を使う Pythoyメモ PaaSのPythonのバージョン DotCloud DotCloudのPythonは2.6.5がいいようです。2.7も動くけど2.6推奨らしい? 2012/07/30 $ dotcloud ssh hellopython.www # $SHELL dotcloud@hellopython-default-www-0 ~$ python Python 2.6.5 (r265 79063, Apr 16 2010, 13 57 41) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. exit() GoogleAppEngine GoogleAppEngineは2.7でよさそう Getting Started Python 2.7 - Google App Engine — Google Developers https //developers.google.com/appengine/docs/python/gettingstartedpython27/ Heroku Herokuも2.7でよさそう Getting Started with Python on Heroku | Heroku Dev Center https //devcenter.heroku.com/articles/python 参考サイト Pythonを始めよう(1/5):CodeZine http //codezine.jp/article/detail/1617 Python入門 http //www.pythonweb.jp/tutorial/
https://w.atwiki.jp/ukyo_python/pages/13.html
はじめに pythonを用いて、電卓を作成した。初めてのGUIだったこと、また、オブジェク ト指向プログラミングを勉強中という事で、見苦しいところがあるが、温かい目 で見て頂きたい。 コード全文 python - 電卓 classについて 今回のコードはclassオブジェクトを多用している。classオブジェクトを使用す ることのメリットを正確には理解できていないが、私が感じたことを以下に述べ ていく。 第一に、コードを使いまわすことが出来る。このプログラムで言うのならば、ボ タンを作成するコードはボタンの分だけ必要になる。これをclassを使用するこ とでコードを減らすことが出来る。ボタン1とボタン2があるとしよう。二つのボ タンは押された時に表示する文字が異なるだけで、大きさや色などの仕様は同じ である。この場合、共通する仕様を予めコード化し、異なる部分だけ、個別に追 加すれば良い。このようにすれば、共通部分のコードをボタンの分だけ書く必要 性がなくなる。 第二に、後からの修正が容易であることが挙げられる。ボタンの設定を変更した い場合、それもすべてのボタンに対して行いたい場合、classではボタンを設定 している部分のコードのみを書き換えれば良い。各ボタンごとにコードを書いて いる場合は、各ボタンの設定を書き換える必要が出てきてしまい、面倒だ。 第三にコードが読みやすい。これは、ボタンやラベルに関しての設定がまとまっ て記述されているため、その部分を読めば、何が原因で不具合が生じたのか、ま たどこを書き換えればより良くなるのかが分かる。 次に実際のclassを用いたコードを見てみる。 class A def __init__(self, A, B) self.a = A self.b = B def Display(self) print "+ {0}".format(self.a + self.b) print "- {0}".format(self.a - self.b) instance = A(1, 2) instance.Display() 1行目でクラスを宣言する。Aはクラスの名前で、基本的には、内容を表すような 名前にするべきだと考える。 2行目と6行目に記述されている、`def`はメソッドの作成である。クラスの内部 に存在する、関数のようなものである。メソッドはクラスの外部からも内部から もアクセスすることが出来る。メッソドを実行すると、メソッド内に記述されて いるコードが実行される。 特に、2行目に記述されている、`init`はクラスが呼び出された時に、特にメソ ッドを実行するような記述なしに、実行される。初期化メソッドである。このコ ードの場合、11行目でクラスAのインスタンスとして、instanceを作成している。 この時に、`init`内部のコードが実行される。3、4行目の self.a や self.b は インスタンス変数と呼ばれるものである。クラス内部でインスタンス変数を参照す る場合は self.a と書く。クラスの外部から参照する場合、`インスタンス名.a` とする。つまりここでは instance.a とすれば、値を参照できる。インスタンス 変数はインスタンスごとに保持するため、仮にインスタンスが instance と instancecopy がある場合、`instance.a`と instancecopy.a は別の変数を参 照することになる。 11行目のように記述することで、インスタンスを作成できる。また、`init`が引 数を取るのでそれを記述している。メソッドは、クラス内部でメソッドを使用す る場合、`self.Display()`とする。外部から行う場合、`instance.Display()`と する。 電卓作成に関する各部分の説明 文中に行数を指定し、説明する箇所があるがそれはコード全文(python - 電卓) の箇所を示すものである。 import from Tkinter import * import Tkinter as tk importするモジュールはTkinterである。このようにしないとうまくいかなかった。 明確な理由は不明だが、とりあえず、このようにimportした。 frame class Use_Frame(ttk.Frame) def __init__(self, master=None) ttk.Frame.__init__(self, master) self.grid(column=0, row=0) まず、GUIの基盤となるフレームクラスを作成する。このフレームの上に、ボタ ンやラベルを配置する。8行目では、クラスの継承を行っている。ttk.Frameとい うクラスを、自分の作成したクラスUse\_Frameに継承している。これで、 ttk.Frameに含まれているメソッドが使用できる。9行目以下の init 部分で初期 化を行う。10行目で、フレームの作成、11行目でフレームの配置、13行目でフレー ムの設定を行う。 9行目、10行目にある master は調べたが不明である。推測として、このオブジェ クトの所属している場所を示していると考える。フレームの上にボタンやラベル を乗せるが、この時、どのフレームに乗せるかを明示的にしなければならない。 フレームの場合も、どのGUIのフレームかということを明示的にする必要がある。 仮に、GUIの名前をdentakuだとすると、dentakuの中にフレーム(Frame1,Frame2...) があり、フレームの中にボタン(Button1, Button2...)がある。Frame1に Button1を乗せる場合、Button1のmasterはFrame1、Frame1のmasterはdentaku ということになる。 11行目にある、gridメソッドは、フレームを格子状に配置する。columnが行、row が列である。 button class Use_Button(tk.Button) def __init__(self, master=None) tk.Button.__init__(self, master) self["height"] = 3 self["width"] = 6 self["font"] = ("Helvetica", 15) self["command"] = self.input_exe def input_exe(self) Label.push_list.append(self["text"]) if self["text"] == "=" self.cal() Label.push_list = [] elif self["text"] == "C" Label.push_list = [] Label.Display() else Label.Display() def cal(self) result = eval(Label.display_item) Label.push_list.append(str(result)) Label.Display() ボタンクラスもフレームクラスと同じように、tk.Bottonを継承させる(16行目)。 17、18行目の init 部分も同様に、ボタンの作成と、自ら設定する初期設定であ る。20行目から23行目はボタンの性質を設定する。もちろん、フレームクラスと 同様に、configureを使用して設定を行うことも出来る。ここでは読みやすくす るためにこのような書き方をする。 `self.[key]`とする事で、self(つまり、インスタンス)が持つディクショナリへ アクセスする。`height`は高さ、`width`は幅、`font`はボタン上に書く文字の フォント、`command`はボタンが押された時の処理を、それぞれ設定する。 25行目から37行目はボタンが押された時に実行されるメソッドである。 26行目の Label.push_list は次に説明を行う、ラベルクラスのインスタンスで ある Label にアクセスしている。このような書き方が正しいのか不明である。 使用する際は気をつけるべきだと考える。この行が行っていることは「インスタ ンス(Label)が持つインスタンス変数push_listにself[ text ]を追加する」であ る。 self[ text ](ディクショナリ)はボタンに書かれた文字である。電卓では数字や 演算子のボタンを作るが、そのボタン上にかかれている文字列が代入されている。 28行目以下のif文は、押されたボタンに対して処理の分岐を行う。self[ text ] の値によって処理を変える。特に、`=`と C は他のボタンとは別の処理を行いた いので個別に設定を行う。 39行目以下は計算を行うメソッドである。40行目のevalは文字列を数式として処 理する関数である。例えば 1 + 1 はeval(`1 + 1`)で処理すると2になる。 label class Use_Label(tk.Label) def __init__(self, master=None) tk.Label.__init__(self, master) self["font"] = ("Helvetica", 20) self["width"] = 20 self["anchor"] = "e" self.push_list = [] def Display(self) self.display_item = "".join(self.push_list) self["text"] = self.display_item 46行目から48行目はフレームクラスとボタンクラスと同様の処理である。 tk.Labelを継承している。 50行目から53行目は初期設定である。ボタンクラスでは出てこなかった anchor はラベルの中にある文字をどのように配置するか、つまり、左からなのか右から なのか、中央に置くのか等を設定する。`e`はeastで東の意味なので、右から文 字を置いていく。 53行目の self.push_list はインスタンス変数を作成している。ここに、他の クラスからアクセスしていた。 55行目以降はメソッドである。自身の text 、コード中ではself[ text ]を変 化させる。ボタンクラスからアクセスされていた。 57行目にある"".join()は()にリストを置くことで、任意の文字("ここの文字列")を 使用し、リストの各要素を結合する。例えば、 ".".join(["test", "txt"]) "test.txt" "/".join(["desktop", "test.txt"]) "desktop/test.txt" このようになる。単に結合したい場合、"".join()として""の中に何も入れない。 root = Tk() root.title("計算機") 62行目はウィンドウを作成する。これもTk()クラスのインスタンスを作成し、 その中のメソッドを63行目で使用する。63行目はウィンドウのタイトルを設定 するメソッドである。 71行目以下は、クラスを呼び出して、各オブジェクトを配置していく。
https://w.atwiki.jp/memo101/pages/7.html
[1] 相補鎖を5 から表示 from Bio.Seq import Seq Seq( CTCTGGATTCTCCTTCAGTAGCAGC ).reverse_complement() REF [1]http //biopython-tutorial-ja.readthedocs.org/en/latest/chapter2.html
https://w.atwiki.jp/naobe/pages/156.html
言語に戻る 対象バージョン 3.3 インストール http //www.python.org/download/からPython 3.3.1 bzipped source tarball (for Linux, Unix or Mac OS X)を選択しダウンロード 解凍 configure, make, make install tkinterが動かない。さんざん悩んで、原因はtcl/tkのdevelがないこととわかる。yumを使ってdevelをインストール sudo python setup.py install tkinterは、pythonとは別にインストールしなければならないと思い込み、tkinterのダウンロードサイトを探し続けていた。python3.3の中にあるとは知らなかった。 比較操作 比較操作間に優先順位はない。比較演算子は算術演算子、ビット演算子、シフト演算子より優先順位は低い。 要素が数値なら大小を比較する。要素がバイトなら数値に変換して大小を比較する。要素が文字ならUTFコードを数値に変換して大小を比較する。 要素の型が異なると、例外を発生する場合がある。int型と文字型の比較はNG。 項目 説明 a b a b a b c a == b a = b a = b a != b a is [not] b notなしのとき、aとbが同じオブジェクトのときTrue a [not] in b notなしのとき、aがbの要素ならTrue。 フロー制御 if 条件がTrueなら行を実行する。 if 条件 行 (elif 条件 行)* [else 行] while 条件がTrueの間、行を実行する。 while 条件 行 [break] [continue] [else 行] 条件がfalseになると、elseを実行して終了する。 breakを実行すると、elseを実行しないでループを抜ける。 continueを実行すると、ループの先頭に戻る for リストの項目をターゲットリストに順次、代入して行を処理する。 for ターゲットリスト in リスト 行 [break] [continue] [else 行] リストがなくなると、elseを実行する breakを実行すると、elseを実行しないでループを抜ける。 continueを実行すると、ループの先頭に戻る ステートメント print ver.3から関数に移行。()が必要 書式 説明 print x,y x,yを標準出力に出力する。xとyの間には空白が入る。改行を出力する。 print x,y, x,yを標準出力に出力する。xとyの間には空白が入る。改行を出力しない。 print フォーマット文字列 % タプル C言語のprintf文と同じ。【例】print "%s...%s" % (x,y) print f,x,y ファイルfに、x,yを出力する 組込オブジェクト importしないで使えるオブジェクト 組込オブジェクトの型 オブジェクトの型 例 数値 23,3.14,999L,3+4j,Decimal 文字列 abcd ,"efgh" リスト [1,[2,3],4] ディクショナリ { k1 v1 , k2 v2} タプル (1, a , 2, b ) ファイル myfile = open( f1 , r ) その他 set, type, None, bool 文字列(stringオブジェクト) シーケンスオブジェクト。不変オブジェクト(値を変えることができない) 項目 説明 結合 文字列+文字列【例】a= aaa ;b= bbb ;c=a+b。cは aaabbb になる。 splice 位置を指定して部分を抽出する。a[n m]でnからm-1までを抽出する。【例】a = abcde ;print a[1 3]は、 bc を出力する。 分割 a.split(sep)でsepを元に分割した配列を作成する。 トリム a.rstrip().lstrip() トリプルクォーテーション シングルクォートまたはダブルクォート3個使って文字列を囲む。複数の行にまたがって文字列を指定できる。内部の改行は、文字列に含まれる。内部にシングルクォート、ダブルクォートを書いても良い(\を追加する必要がない)。 リスト 配列と同等のもの。可変オブジェクト。 項目 説明 作成 a = [1,2,3,4,5]でリストaを作成する。要素はオブジェクト。a = []で空リスト作成。 要素の追加 a[5] = 6 or a.append(6)。 要素の挿入 a.insert(位置,要素) 【例】a.insert(0,0)。aは[0,1,2,3,4,5,6]になる。 抽出 s[i j k] iからjまでステップkで抽出。 削除と抽出 a.pop(位置)。位置を指定しないと、最後尾を指定したことになる。 削除 del s[i j] iからj-1までの要素を削除 ソート a.sort() a.reverse()。sortは昇順。reverseは逆順。 splice 文字列と同様 要素の個数 len(list) 要素のインデックス a.index(要素) インデックス配列の作成 range(配列) インデックスと要素配列の作成 enumerate(配列)。【例】for i, t in enumerate(arry) 内包 演算結果を配列の要素に設定する。記述がシンプルになる。 a = "a b c d e f" b = [t for t in a.split(" ") if t] ファイルオブジェクト 組み込み関数openによって返されるファイルを表すオブジェクト。 メソッド 説明 read([size]) ファイルからsizeバイト読み込んで文字列オブジェクトを返す。sizeがないときはファイルの最後まで読み込む。EOFを読み込むと空の文字列を返す。バイナリモードのときは空のbytesオブジェクト(if len(data) == 0で判定)。 ディクショナリ perlのハッシュ。 項目 説明 作成 a = { key1 val1 , key2 val2 }でディクショナリaを作成する。a = []で空リスト作成。 要素の追加 a[ key3 ] = 6 要素の削除 del d[key] 要素の個数 len(a) 要素の存在確認 if key in dict 存在。if not key in dict 存在しない 関数 定義 defを使って定義する。 def func(a,b) return a *b print func(2,10) 【実行結果】 20 オブジェクトの参照渡し 引数にオブジェクトを渡すと参照が渡される。関数内でオブジェクトを操作すると、関数から戻った後も操作の結果は残る。 def func2(a) a.pop() a = [0,1,2,3,4,5] func2(a) print a 【実行結果】 [0, 1, 2, 3, 4] オブジェクトとの関係 関数はオブジェクトとして扱われる。関数を変数(オブジェクト)に代入すると、関数の参照が渡され、変数を使って関数を実行できる。また関数の引数に関数を使用できる。 def func(a,b) return a *b a = func print a(10,20) 【実行結果】 200 組込関数 モジュールを指定しないで使える関数のこと。 項目 書式 説明 help help(target)。 ヘルプを表示する。targetには、取り込んでいるオブジェクトを指定する。 クラス class クラス名でクラスを定義する。クラス(親クラス)とすると親クラスを継承したクラスを記述する。__init__はコンストラクタ。メソッドの最初の引数は、selfを指定する。クラス変数は、前もって定義しない。 class Person BASE_SALARY = 10000 def __init__(self, name) self.name = name def getSalary(self) return self.BASE_SALARY class Engineer(Person) def getSalary(self) return self.BASE_SALARY * 2 john = Person("john") print john.name print john.getSalary() print tom = Engineer( tom ) print tom.name print tom.getSalary() 【実行結果】 john 10000 tom 20000 モジュール .pyという拡張子を持ったファイル。 importを使ってモジュールをロードする。モジュールの属性を使うには、モジュール.属性とする。ファイルの拡張子は使わない。モジュールの中にクラス、関数、変数がある。 from モジュール import 属性とすると、モジュールを指定しなくて良い。 【例】 otherモジュールをロードして、bという変数を使用する。 import other a = other.b from other import b a = b モジュールは、モジュールサーチパスにあればロード可能。モジュールサーチパスは、sys.pathを参照する。環境変数PYTHONPATHを設定するとモジュールサーチパスにPYTHONPATHを追加する。 [suna@athlon4 python]$ export PYTHONPATH=~suna/language/python [suna@athlon4 python]$ python Python 2.4.3 (#1, Jan 9 2013, 06 49 54) [GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2 Type "help", "copyright", "credits" or "license" for more information. import sys sys.path [ , /home/suna/language/python , /usr/lib/python24.zip , /usr/lib/python2.4 , /usr/lib/python2.4/plat-linux2 , / usr/lib/python2.4/lib-tk , /usr/lib/python2.4/lib-dynload , /usr/lib/python2.4/site-packages , /usr/lib/python2.4/s ite-packages/Numeric , /usr/lib/python2.4/site-packages/gtk-2.0 ] パッケージ ディレクトリがパッケージ。モジュールを整理するために使用する。パッケージディレクトリには、__init__.pyを作成する。__init__.pyは空でかまわない。__init__.pyにはパッケージに関連する初期処理(ファイル作成、DB接続等)を記述する。モジュールをimportしたときに__init__.pyを実行する。 __name__属性 モジュールファイルを実行したときに__main__が設定される。ファイルの最後に以下の記述をすれば、importモジュールとしても実行モジュールとしても使用できる。 if __name__ == __main__ 実行するステートメント モジュールとメソッド モジュール オブジェクト メソッド 説明 commands 関数オブジェクト getoutput(command) コマンドを実行し、結果を返す。 (status, output) = getstatusoutput(command) コマンドを実行し、ステータスと結果を返す。 re 関数オブジェクト compile(pattern[,flags]) 正規表現パターンを使って正規表現オブジェクトを作成する。pattern 正規表現パターン。flags re.I(大文字、小文字を区別しない),re.L(\w,\W,\b\Bを現在のロケールに合わせる。)、他はリファレンス参照。複数のフラグを適用するときは、ビット論理和(|)を使う 正規表現オブジェクト match(string) stringが正規表現パターンにマッチしているときはマッチオブジェクトを返す。マッチしない場合は、Noneを返す sub(repl, str) マッチしたパターンを使って対象文字列を書き換える。repl 書き換える文字列。後方参照文字(\1,\2,..)を使用できる。str 対象文字列 io ファイルオブジェクト 用語 項目 内容 シーケンス 要素が順番に並んだオブジェクト。【例】文字列、リスト、タプル タプル 不変なリスト。a = (0,1,2)とすると、a[1] = 2とするとエラー。 正規表現 文字列が正規表現パターンに一致するか判定する #!/bin/env python # -*- coding utf-8 -*- import re m = re.compile( a{3}b{3} ) if m.match( aaabbb ) print "match" else print "unmatch" matchを出力する。 一致する部分を使って書き換える #!/bin/env python # -*- coding utf-8 -*- import re m = re.compile(r key1 ([0-9]+)\skey2 ([0-9]+) ) print m.sub(r val2 \2, val1 \1 , key1 100 key2 200 ) [foo@athlon4 python]$ ./t1.py val2 200, val1 100 エンコーディング 項目 説明 utf-8 cp932 その他 項目 内容 pydoc pydoc target。オンラインヘルプ。UNIXのmanコマンドのようなもの。 標準入力 ドキュメンテーション文字列 モジュールサーチパス sys.pathがモジュールサーチパス。import sys; print sys.path 引数の取得 sys.argvが引数のリスト python2からpython3への変換 2to3.py -w スクリプトファイル。元のファイルは.bak。 サンプルプログラム ファイルを読んで出力 """ CSVファイルを読み込み、項目に分解する """ # ディレクトリ DIR = "C /Users/suna/Dropbox/programs/python/" """ 行を項目に分解 @param line 行 @return 項目のリスト """ def parseLine(line) # カンマで分解 terms = line.split(",") # 返却するリスト list = [] for term in terms # 先頭と、最後の空白を削除 term = term.strip() term = term.rstrip() list.append(term) return list """ main """ f = open(DIR+"a.csv", "r") while True # ファイルから1行読み込み line = f.readline() # コメントは飛ばす if line[0 1] == "#" continue # EOFに到達したら終了 if not line break; # 改行を削除 line = line[ -1] # 項目に分解 terms = parseLine(line) # リストのサイズ size = len(terms) # リストからインデックス、項目を順次取得 for i, t in enumerate(terms) # 改行なし出力 if i == size - 1 print("%s" % (t), end= ) else print("%s," % (t), end= ) print() f.close() ディレクトリを巡回してサイズの大きいファイルを取得する #!/usr/local/bin/python3 # -*- coding utf-8 -*- from os import walk from os.path import getsize, islink, join """ 指定したディレクトリ下のファイルを順次求め、 サイズの大きい順にファイルを格納する """ def findBigFile(topdir, size) MAX_FILE = size filelist = [] for dirpath, dirs, files in walk(topdir) for dir in dirs # シンボリックリンクなら削除 abspath = join(dirpath, dir) if islink(abspath) dirs.remove(dir) # procは削除 if dir == proc dirs.remove(dir) for file in files abspath = join(dirpath, file) # リンクでないならファイルリストに保管 if not islink(abspath) filelist.append((getsize(abspath), abspath)) # サイズが大きいものを最大10個保管 if len(filelist) MAX_FILE filelist.sort(key=lambda file file[0], reverse=True) filelist = filelist[ MAX_FILE] return filelist if __name__ == __main__ filelist = findBigFile( / , 20) """ 求めたファイルを出力する """ for size, filename in filelist print("file name %s, size %d" % (filename, size/1000)) ファイルの16進ダンプ出力 #!/usr/local/bin/python3 """ ファイル16進ダンプ """ from sys import argv from struct import unpack import sys write = sys.stdout.write """ blockバイトを16進で出力する """ def printBlock(block) # HEXAでデータ表示 for b in block write( "%02x " % b) # データがブロックサイズ以下なら空白を表示 for i in range(BLOCK_NUM - len(block)) write( " " ) # ASCIIで表示 for b in block if 32 = b = 126 byte = chr(b) else byte = . write( "%s" % byte) # 定数 BLOCK_NUM = 16 # ファイル名 fname = argv[1] f = open(fname, rb ) write("\n") addr = 0 while True block = f.read(BLOCK_NUM) if len(block) == 0 break # アドレス出力 write( "%07d " % addr) # データ出力 printBlock(block) write("\n") addr += BLOCK_NUM ファイル書き込み f = open("aaa.txt", "w") print("aaa", file=f) print("bbb", file=f) print("ccc", file=f) f.close()
https://w.atwiki.jp/sevenlives/pages/501.html
Pythonic Guido van Rossum? PEP 20 Zope? setuptools? easy_install? pip PyPI? pydoc batteries included? mod_wsgi PSFL? PEPs introspection? ctypes? pyro? トレース・バック? 対話モード(python)? Pyjamas? Sphinx Werkzeug? Tkinter GIL? タートル・グラフィクス QPython Kivy? ■ オブジェクト(Python)? None? Ellipsis? ■ 変数(Python)? スコープ(Python)?global(Python)? nonlocal シーケンス型 ユニコード型(python) リスト(python) スライス(python)? マップ型? ディクショナリ(python)? アトリビュート(python)? 自由変数? 束縛変数 ■ 関数(Python)? イテレータ(Python)? ジェネレータ (Python)? デコレータ(Python)? ■ クラス(Python)? ABC? id(python) docstring? Python 2? Python 3 ■管理ツール virtualenv? pythonz Pythonbrew? ■Pythonフレームワーク? Django?