でも、WindowsのIDLEでは u"ほげ" ができない。 (Python3では直る) sys.argv もUnicodeじゃなくてcp932なので、渡せないファイル名があり、 対策するには自分でGetCommandLineWしてコマンドライン解析しないといけない。 (これもPython3では直る) WindowsのUnicode対応に関して言えば、Python3が最強だと思う。
pythonって日本語弱いんですか? そんなことはない。 Windowsで使うならR*byよりいいと思う。 だれがそんなこと言ったんだ 私だ 自分の経験から言うと日本語の文字列を扱う際に文字コードなんかを曖昧なまま処理した場合 Perl や Ruby は間違ってても「なんとなく」動くが Python はきっちりエラーになる エラー出さずに勝手に文字化けするか例外出して中断するかの違いだな 特にパス関係については他の追従を許さないぜ Javaのヌルポみたいなもんですね 漏れはちなみにそこは Python の弱点じゃなくて利点だと思っている
7 :
デフォルトの名無しさん :2010/08/24(火) 10:46:53
死ね
9 :
デフォルトの名無しさん :2010/08/25(水) 20:19:19
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究
pythonの勉強はじめてみようと思うのですが 2.x と 3.x ではどちらが良いでしょうか?
12 :
デフォルトの名無しさん :2010/08/26(木) 13:40:14
初めてなら2.xがお勧め 3.xはライブラリとかがまだ対応出来ていないものがあるからそれでもよければどうぞ 文字コード関連の処理方法については3.xの方がすっきりしていることになっている
新しいのがよければ2.6 ライブラリ目当てなら2.5, 2.4 人柱したいなら3.1, 2.7
2.4はもう除外したほうがいい
2.5に対応してないライブラリも結構あるよ Pythonの黎明期は2006年で、2.5〜3.0にかけて酷い過疎化
17 :
デフォルトの名無しさん :2010/08/26(木) 21:35:10
java-jaをよろしくおねがいします!!!!
Pythonでコンピュータをスリープするにはどうすればよいでしょうか? OSはWindowsです
現在ログインしているユーザが誰かを知りたいのですが どのようにすればいいでしょうか?
>>18 >>> import ctypes
>>> ctypes.windll.PowrProf.SetSuspendState(0, 1, 0)
1
>>19 import ctypes
name = ctypes.c_char_p(''*100)
sz = ctypes.c_int(100)
ctypes.windll.advapi32.GetUserNameA(name, ctypes.pointer(sz))
print name
ttp://mercurial.selenic.com/wiki/Py3kPort のExisting problemsってところで、
> There are some python 3 APIs that only support (unicode) string arguments
略
> All of them must be of the string type.
ってあって、そこまでUnicode嫌いか?って思ってしまう。
PILが3.0対応してから本気出す
おっぱいそん
>>22 thx!
ちなみにGetUserNameWの方じゃだめなんですか?
>>27 c_char_pをc_wchar_pに変える
>>28 ありがとうございました
#Rubykaigiの実況をUSTREAMで見ながら
dasaigi
一意性のある配列から要素の有無を高速に調べる方法ってありますか? PHPだと配列からin_array()で要素を検索すると遅いので、 要素をハッシュのキーに指定してis_null()で評価する、みたいな話です。 バージョンは2.6を使っています。 value in hoge hoge.has_key(value) あとsetを使ったバージョン など試してみたのですが速度差は誤差の範囲でした。 ループの中で乱数を作って代入みたいな簡単なテストプログラムなのですが 同じロジックをPHPでつくると5〜12倍くらい高速です。 (is_null()を使うと要素のヒット率で速度にバラツキが出ます。) なにか使い方に根本的な勘違いをしてたらごめんなさい。 教えてエロい人!
set
mod_phpとCGIで速度差比べたのか
setは使ってみましたが速度的な差はありまさんでした。 inを使う以外に方法があるのでしょうか? ライブラリリファレンスには「集合クラスは辞書を使用して実装されます。」 とあるので速度的な差はでないだろうと勝手に思い込んでいました。 両方ともコマンド叩いてtimeで時間図りました。 php.iniの設定次第でapache経由じゃなくてもmod_php動いてたりするんですかね? webを経由させるつもりはないのですが、質問の意味がよくわかってないです。 回答になっていなかったらごめんなさい!
inを使う形で問題ないよ。
OSも環境も測定方法も書かずに何を言っておるのかね
あとコードもね。
wxpythonが3.x系用にリリースされるのはいつになりますか?
trunkになかったっけ?
PyQtは?
ライセンスが・・・・・・・・・・・・・
Python3.0 への移行準備
ttp://d.hatena.ne.jp/methane/20090321/1237631348 ttp://coreblog.org/ats/why-python-30-is-still-deprecated 最も大きな理由。それはCで書かれたエクステンションの3.0対応がけっこう大変だから。
...
データベース接続モジュール,テンプレートエンジンとか,お世話になっているCエクステンションは多い。
直接使って無くても,フレームワークがそういうエクステンションを使っていることが多い。
その他にも,PILのようなライブラリ,wxPythonのようなGUIフレームワークラッパは修正点が多くて大変だと思う。
これらのエクステンションの多くが3.0に対応してくれないと,僕は完全に3.0には移行できない。
それまで数年かかるだろう,ということだ。
まったく同感だったんだけど、最近はPython界が僕が思うより速く動いている事に驚いている。
数年というのは3年以下かもしれない。
Pythonの「バージョン間互換性重視」スタイルは言語と標準ライブラリだけでなくて Python/C API にも及んでいる。
Python3でも、いくつかの型が変更されたけれど参照カウント等の基礎は基本的にそのままになっている。
そして、その互換性を重視した文化は、多くの拡張ライブラリ作成ツールを生んだ。
そのツールたちも、Python3に続々対応してきている。基本が変わらないから、そこそこの手間で対応できるらしい。
ツール群とそのツールを使った有名なライブラリをあげてみる。
で、wxpythonが3.x対応になるのはいつなの?
Djangoも早く3.0対応して欲しいですぅ
numpyも
Ruby使えば解決だよ!
DjangoがPython3対応になったら古いDjangoとの互換性はどうなるんだろ
もしサポートがなければ変換用スクリプト組むしかないんじゃないのかな
Windows XP Service Pack 3
Python 2.7
です。
ファイル名を表す文字列で、
文字列1 自然数1x自然数2 文字列2.拡張子
となっているものがあります。
(自然数1と自然数2の間には'x'の1文字だけがはいります。
また、文字列1 文字列2の部分は空かもしれません。)
それらを与えて、[自然数1,自然数2]となったリストを取得する方法は
どう書けばいいでしょうか?
例:
http://codepad.org/b4iymaHe 正規表現は使ったことがあまりない(テキストエディタで正規表現検索はしています。)のですが、
正規表現で可能でしょうか。
もし可能でしたら、教えていただけますでしょうか?
よろしくお願い申し上げます。
r'.*(\d+)x(\d+).*\.[^\.]+'
自然数1x自然数2 がファイル名の中に一回しか出てこないと決まっているなら、 >>> import re >>> m = re.search(r'(\d+)x(\d+)', "aaaa iiii 5555 uuuu eeee 1200x1600 ooo.jpg") >>> if m: map(int, m.groups()) ... [1200, 1600] '2x4 buildings 1200x1600.jpg' とかだと上手くいかないので注意
xの前後に空白があるパターンもあるみたいよ
すまん間違いっぽい これでとりあえず通る r'.*?(\d+)x(\d+).*\.[^\.]+'
55 :
50 :2010/08/31(火) 23:41:10
>>51-54 ありがとうございます。
>自然数1x自然数2 がファイル名の中に一回しか出てこないと決まっているなら、
確かに、その条件を申し上げておりませんでした。
一回しか出てこないと決まっています。
>>53 > xの前後に空白があるパターンもあるみたいよ
xの直前や直後に空白がある場合は無効です。
コメントを読んでなかった。xの前後にスペースあるのは駄目という例だったのか。
57 :
デフォルトの名無しさん :2010/09/01(水) 01:03:38
ファイル「f」の先頭n行が欲しい場合は for num, line in enumerate(f): if num >= n: break 処理 と for num, line in zip(range(n), f): 処理 のどちらが良いでしょうか? 好みでも構わないのでどちらがいいのか(できれば理由付きで)ご教示ください #ファイルがn行未満の場合は例外を発生させます
58 :
50 :2010/09/01(水) 01:42:06
>>51-54 おかげさまでどうにかなりました。
ありがとうございました。
>>57 前者はif文がキモイ。
後者は一気にn行読み込んでしまうので、itertools.izipを使う。(Python3ならzipでOK)
for i in range(n):
line = next(f)
もシンプルで良い。
n行を一気に読み込むなら、前者の書き方よりも、
lines = [next(f) for i in range(n)]
の方が良い。
>>59 おかげさまでどうにかなりました。
ありがとうございました。
61 :
デフォルトの名無しさん :2010/09/02(木) 04:46:16
組み込み関数名を上書きしてしまいハマってしまいました。 関数名の上書きでエラーが出ないってちょっとおかしくないですか? 前もってすべての関数名を知っておかないといけないってことですよね こういうハマり方をしないための知恵などあえば教えてください。
組み込み関数くらい全部把握しとけや…
ちなみに上書きしたのはstrです。 文字列型のテンポラリな変数でよく使っていた変数名なので・・。
>>62 そうするしかないのでしょうか
鬼のような言語ですね
len もうっかりやってしまう
>>61 いいこと思いついた。お前、関数の中で上書きしろ
67 :
デフォルトの名無しさん :2010/09/02(木) 05:47:11
将来新しい名前が組み込まれて、既存のコードとぶつかったらどうなるんです?
新しいコードを書かなきゃいいんじゃね
組み込み関数のリスト見たらidとかsumとかmaxとか・・地雷原ですやん 恐ろしい言語だなあ
>>66 ああ分かった
そのためにわざわざ
def main():
定義しておいて
if __name__ = '__main__':
main()
ってやるのか
71 :
デフォルトの名無しさん :2010/09/02(木) 06:12:28
もともとsum関数を使うようなコードなら変数名にsumは使わないだろうし sum関数が定義されていても変数名として使いたいなら使えたほうがいい sum関数は使わないけど定義されている.ゆえにsumという変数が作れない sum関数は使わないけど定義されている.でもsumという変数は作れる これを自由度が高いとみるか安全じゃないとみるかは人によるだけだ
main関数を必ず定義しろってことですか あれが言語の危険さを防ぐ知恵だなんて誰も教えてくれなかったな 油断すると名前衝突起こすノーブレーキ言語ってことがバレるからかな? でもありがとうございました
自分の失敗の腹いせなのか、別の言語の工作員なのかよく分からんな
>73 ついでに後方参照の問題も解決するんだよ Rubyでも同じことはよくやる
むしろ後方参照の解決がメインだと思う。 呼ばれる順番を気にしながら関数を書くなんてやってられない。
>>61 組み込み関数に色つけてくれるPython対応エディタ使え
組み込み関数全部に__buildin__くっつければ万事解決
>>> a = 'abc' >>> b = 'defgh' >>> len = len(a) >>> len2 = len(b) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'int' object is not callable やべー ネタだと思ってたらマジな話だったの加代
なんでネタだと思うんだよw
いままで自分の書いてたコードが 奇跡的に動いていただけだったことを悟ったとき
いや、自分が定義した変数や関数を組み込み関数として使ったりしないだろ
Ruby厨うぜー
後方参照の問題の解決というのは いわゆるメインルーチンをサブルーチンより前に書いてもOKになる ってことですか?
それは前方参照
えっ
いや間違ってないけど
後方参照ってRuby用語だろ
詳説正規表現の二版の脚注だったか 前方参照と後方参照どっちにしたらいいか迷ったってのがあったなあ
Rubyでやれ
へー勉強になった 豚楠 C/C++では後方参照ができないので宣言が必要 とか書いてあるサイトもあるけど これも正しくは C/C++では前方参照ができないので宣言が必要 ってことかな
呼び出す地点より後ろで定義された関数は参照できないんだから 後方参照じゃないの? 何が前方なの?
相対的に
いわゆるスルーパスだから前方なんだろうな
ソースの後ろの方なのか、 ソースの進行方向の後ろ側なのか。
ああ、やっと分かった 読んでいくCPUの立場に立つと、コードの下の方が「前」ですな。 エディタでも、前と後はそういう概念だな。 でも本の場合、「もっと前の方」というと、若いページを指す。 はじめて感覚の違いに気づきました。
前方参照というのは、forward referenceの定番的な訳語。 forward referenceは、言語規格書などでよく使われる言葉。 まだ定義していない用語を使ったときに、 「定義はこの先のxxページにあります」ということを示す際に用いる。
人間でも、「前を向いて生きる」の前は未来だし、 「この前」の前は過去だな。 「見ている人がどっちを向いているか」で前は変わるってことだね。
うまいこといったつもりだろうけどおれはみとめないぞ!
前総理はあさっての方向を向いてたけどな
死ぬときは、例えどぶの中でも前のめりに死にたい
105 :
デフォルトの名無しさん :2010/09/03(金) 03:54:48
pythonでは、"と'が同じ意味ですが、 どっちを使う人の方が多いですか?
どっちが多いかは知らんけど 自分はソースがすっきりするから ' を使う
107 :
デフォルトの名無しさん :2010/09/03(金) 04:13:45
関数の再帰呼び出しの時は、関数名を記述したくありません。 そのような方法はありますか?
回答まだですか?
>>108 誰です?
質問者を騙ってDQNと思わせようとするのやめてください。
グローバル定数・文字単体は'' 他は""
>>10 javascript のarguments.calleeみたいなことがしたいってことか?
わいこんびねーたや!
100前後のやり取りに不覚にも吹いたやーん
114 :
デフォルトの名無しさん :2010/09/03(金) 22:55:50
type関数の結果から、'str'とか'unicode'とかの部分を取得したいのですが 文字列化して切り出す以外の方法ありますか?
isinstanceという関数があってだな
これからはじめてのPythonを読みながら勉強しようとおもうぬですが 本にあわせて2.5にするべきか2.6をいれるか悩んでいるのですがどちらの方が良いのでしょうか
初めての でなく はじめての なのか Windowsなら2.7でよいよ
>>118 すいませんオライリーの"初めて"第三版のほうでした。
いまのところはwindows xpです
Windows 2.7は持ってません
>>116 新しいので問題発生することは少ないから、2.7でいいと思うよ。
たまーに古いやつでないと動かないライブラリとかあるけど。
>>120 windows 3.5ならまだあるかも
>>121 ご丁寧にありがとうございます
さっそく2.7いれてきます
123 :
デフォルトの名無しさん :2010/09/04(土) 20:38:49
>>115 その関数は知っているのですが、
strとかunicode以外の、非組み込みクラスのオブジェクトも検出したいのです。
type関数の返り値のtypeインスタンスは、
strで表示する限り、特有の名前を持っているみたいなのに、
それを取り出すメソッドはないのでしょうか?
とりあえずstrを加工して取り出しましたが、泥臭くて抵抗感があります
>>123 こういうこと?
>>> a = u'aa'
>>> type(a).__name__
'unicode'
>>124 おお、これです
ありがとうございます。
126 :
デフォルトの名無しさん :2010/09/05(日) 02:21:12
リスト内包表記で、前処理を書く方法はないですか? [ hoge(o) for i in o ] のような処理があったとして、 hogeの前に実行したいコードがあるのです
hoge(i)でした
[ hage(i) or hoge(i) for i in o ]
なるほど!ありがとうございました
130 :
デフォルトの名無しさん :2010/09/05(日) 04:56:18
新スタイルクラスのインスタンスか 旧スタイルクラスのインスタンスかを調べるにはどうするのが一番スマートですか?
ぼくの考えたスマートな方法は、 type(o) == o.__class__ です。 これ以上スマートな方法ありますか?
旧クラス判定は str(type(o)) == "<type 'instance'>" です。これはちょっとイケてないですよね?
134 :
デフォルトの名無しさん :2010/09/05(日) 10:53:24
>>61 >組み込み関数名を上書きしてしまいハマってしまいました。
>関数名の上書きでエラーが出ないってちょっとおかしくないですか?
>前もってすべての関数名を知っておかないといけないってことですよね
>>63 >ちなみに上書きしたのはstrです。
>文字列型のテンポラリな変数でよく使っていた変数名なので・・。
あるあるー
strとかlenとかlistとか、ふつうに一時変数として使いたいよね
このまえ all() という組み込み関数があるの知らなくて、all という変数を使って
意味不明のエラーになってはまった
日本人ならRubyだろ この非国民どもめ
布教活動をしてもろくな人間しか集まらず 言語としての評価を著しく下げる行為だと Ruby信者には、それがわからんとです
怪しい外人とか、消えて欲しいよね
why_は本当に消えちゃったな
140 :
デフォルトの名無しさん :2010/09/05(日) 22:30:50
おまいら巣に帰れ
rubyはend書くのが面倒くさい
143 :
デフォルトの名無しさん :2010/09/06(月) 03:34:43
インデントが深くなった関数とか長めの関数だと#end 関数名って最近付けるようになった だがRubyは書き方が複数存在するところが嫌い たとえばifとかwhileに別の書き方(判定分が偽のときに実行)があったり
if hage: if fuga: if hoge: pass pass pass #end pass pass pass #end pass pass pass #end なんかおかしくね
145 :
デフォルトの名無しさん :2010/09/06(月) 04:40:43
python3未満で、辞書内包表記みたいに一行で辞書を作りたいのですが、 そんな方法ありますか?
あります
>>145 はずしてるかもしれないけど
>>> {'a': 100, 'b': 200, 'c': 300}
{'a': 100, 'c': 300, 'b': 200}
>>> dict(zip(('a', 'b', 'c'), (100, 200, 300)))
{'a': 100, 'c': 300, 'b': 200}
148 :
デフォルトの名無しさん :2010/09/06(月) 05:18:25
辞書内包表記とはなんぞやと思ってググったら { k:v for k in a for v in b } 3以降はこんなふうに書けるのか これと同じものを作るのなら dict( zip(a, b) ) kやvに処理を加えるなら dict( zip( (foo(k) for k in a), (bar(v) for v in b) ) ) って感じ?
>>145 ,146,147
ありがとうございました
辞書内包表記なくても問題ないですね
150 :
デフォルトの名無しさん :2010/09/06(月) 08:20:17
C言語系の言語で if ( a = hoge() ){...} みたいに、代入と評価を同時にすることがありますが これはPythonではできないですか?
それはPythonではすることはできないです。
そうですか。 ありがとうございました。
Traceback (most recent call last): 遡る (最も 最近 呼ぶ 最後): ↑ 日本語でおk
>>> print (lambda n: n + 1)(2) 3 は実行出来ますが >>> print (lambda n: n += 1)(2) は実行出来ません >>> print (lambda n: a = n)(2) なんかも駄目みたいです lambda の中で式というか代入をしたい場合はどうすればよいでしょうか
>>150 これができないのと同じ理由でできない
Pythonでは代入は式ではなく値を返さない、lambdaに入れられるのは単一の式のみなので
直感的には理解し辛いよね
lambda を使って n! を再帰的に求める関数は作れますか
冗長に見えても明示的なコードの方が良いのです
pythonとダンス関係なさそうなのになんでランバダっていう命令があるんですか?
161 :
デフォルトの名無しさん :2010/09/06(月) 10:41:32
ネストしてある正規表現にマッチした部分を、構造的に取り出すにはどうしたらいいですか? MatchObject.group() でマッチした部分を取り出せますが、 一次元のリストみたいな形でしか取り出せないようです。
162 :
デフォルトの名無しさん :2010/09/06(月) 10:47:47
>>162 gourpの引数とかはちがうのか?
つかお前のいう構造的ってのが良く分からん
((hoge)(poge)moge) みたいな正規表現に対して [["hoge","poge"],"moge"] みたいに、正規表現の構造を反映した形で値が返ってくるということです・・
なにその不思議な反映のされ方
>>> re.findall(r'(a(b.*))', 'xyzabcdef') [('abcdef', 'bcdef')]
perlでいうと $2.1 とか $3.2 のことか
>>164 それは
["hogepagemoge",["hoge","poge"]]
を返すべきじゃないか
>>156 むしろC言語やってた時、代入が値を返すのを初めて知って違和感あった
Cの代入は式だからなあ。 それが便利でもあり、問題でもあり。
171 :
156 :2010/09/06(月) 21:50:26
172 :
デフォルトの名無しさん :2010/09/06(月) 21:59:52
ビット演算の「&」「|」には代入演算子「&=」「|=」があるのに 論理演算の「and」「or」にはそれがないんだね 後者の代入演算子として「&=」や「|=」を使うのってありですか?
173 :
172 :2010/09/06(月) 22:01:44
補足 実行結果は問題ないことは確認済で,コーディングスタイルとしてありかという意味です
174 :
デフォルトの名無しさん :2010/09/06(月) 23:28:53
v = ['a','b',['c'],'d'] print str(v) v = ('a','b',('c'),'d') print str(v) ↓結果 ['a', 'b', ['c'], 'd'] ('a', 'b', 'c', 'd') このように、タプルにすると要素が一つの時 勝手にネストが解消されてしまうのは何故ですか?
>>> ('c') 'c' >>> ('c',) ('c',) 式を先に計算するためのカッコと区別するために 一要素のタプルは要素のあとに , をつける必要があるです
そういうことになってたのですね ありがとうございました
177 :
デフォルトの名無しさん :2010/09/07(火) 00:24:43
178 :
デフォルトの名無しさん :2010/09/07(火) 02:48:30
名前空間のすべてのオブジェクトのリストを取得する方法ってありますか? dir()で、名前だけは分かりますが、 引数に渡したいので、オブジェクトで欲しいんです
179 :
デフォルトの名無しさん :2010/09/07(火) 03:30:39
locals() globals() でそれぞれローカル・グローバル名前空間における 名前:オブジェクト の辞書が取得できる
素晴らしいですね ありがとうございます
181 :
デフォルトの名無しさん :2010/09/07(火) 04:46:35
ソース中の日本語をすべてユニコード文字列にすると uを付け忘れることがあるから、 処理する時だけunicodeにする方がいいですよね?
と思ったけど・・ 一度unicodeにしたものをもう一度utf-8に戻すのが面倒だから やっぱりユニコードに統一した方がいいですね・・
from __future__ import unicode_literals は邪道なの?
>>181 >ソース中の日本語をすべてユニコード文字列にすると
>uを付け忘れることがあるから
ソース中の日本語をすべてユニコード文字列にしたら
uを付ける必要が無い
186 :
デフォルトの名無しさん :2010/09/07(火) 18:29:06
ソースファイルのエンコーディングとは無関係な話だよな
で
>>185 は
>>183 をしたらuをつける必要がないってこと?
Do hoge() Loop While X < 100 に相当する表現がないみたいなんですけど どうすればいいんですか
while True: hoge() if not (X < 100): break
while X < 100: hoge()
190 :
デフォルトの名無しさん :2010/09/08(水) 14:16:59
そんな気持ち悪い言語使ってる人は文法を改めるべきだと思います
192 :
デフォルトの名無しさん :2010/09/08(水) 14:18:36
a == b a != c のとき b != c は成立する
194 :
デフォルトの名無しさん :2010/09/08(水) 14:56:32
いやまあそうなんだけどね...
>>188 の無限ループっぽさを気持ち悪いと思うか
>>187 も本質的には無限ループになりうると気付くかどうかだぬ
不変表明を理解してないだけ
197 :
デフォルトの名無しさん :2010/09/08(水) 22:56:10
Pythonでordered hashみたいなものを使いたい時は どうするのが普通ですか?
collections.OrderedDict
そろそろ2.7は安定したかな? まあ2.6から乗り換えるメリットも特にないが
精神衛生的の比率 2.6.x: 60% (comfortable with libraries) 3.x: 16% (fun on latest) 2.5, 2.4: 11% (available obsolete libraries) 2.7: 9% (needs libraries, and fun on latest) 1.x: 4% (forgotten that)
201 :
デフォルトの名無しさん :2010/09/08(水) 23:37:44
[[1,2],[3,4],[5,6]] となっているリストから 例えば、3で検索した場合に3と同じリストになっている4を出力するにはどうしたらいいでしょうか?
6で検索したときは5を返すのか?
203 :
デフォルトの名無しさん :2010/09/08(水) 23:54:53
[[1,2],[3,4,[8,7]],[9,5,6]] とかなってるときは?
それは4,[8,7]だろ
てかpython関係ねーw 純粋にアルゴリズムの話やん
>>201 def search(list,s):
for i,pair in enumerate(list):
for v in pair:
if v == s:
return list[i][0] if not s == list[i][0] else list[i][1]
ってやるととれそうだけど、
元の設計が悪い気がする。
208 :
デフォルトの名無しさん :2010/09/09(木) 00:07:59
>>204 appendの段階で2つになっています。
>>207 ありがとうございます。
やはりfor文でまわさないといけないようですね。
[[1,2],[4,[3,8,7]],[3,9,5,6]] とかなってるときは?
>>207 alistの話だと思って見ていて思わぬ展開に驚いたよ
二つになってるなら辞書にしてから3で参照すればいいのでないので?
ほんとlist周りのパーサってないよね いちいちforや包○表現や組み込み関数を使いまわさないとダメって
[[1,2],[3,4],[3,3]] となってるときは?
214 :
デフォルトの名無しさん :2010/09/09(木) 00:15:21
>>209 ,213
あんまり詳しく書かなかったので申し訳ないです。
2重までになってて、値は重複なく、組になって入っています。
リストに対して回す以外にどんな方法があんのさ?
重複ないなら辞書オヌヌメ
217 :
sage :2010/09/09(木) 00:19:48
>>209 for x in [[1,2],[4,[3,8,7]],[3,9,5,6]]:
if 3 in x: print [y for y in x if y != 3]
[[1,2],[3,4],[4,3]] となってるときは重複?
ふつーにfilter使えばいいと思ってた俺は
220 :
デフォルトの名無しさん :2010/09/09(木) 00:26:25
>>218 すべてのデータで見て、重複しないということなので、どこかに同じ値があるってことはないです。
わかりにくくてすいません、
>>> l = [[1,2],[3,4],[5,6]] >>> dict(l+[[y,x] for x,y in l])[3] 4 >>> dict(l+[[y,x] for x,y in l])[6] 5
[hoge for hoge in hage] ってなんかくどいよね [[1,2],[3,4],[5,6]] を [[2,1],[4,3],[6,5]] にする関数とかないのかな
>>223 さすがにそんなマニアックな関数はないと思う。
>>> L = [[1,2], [3,4], [5,6]]
>>> [ list(reversed(x)) for x in L ]
[[2, 1], [4, 3], [6, 5]]
>>> map(lambda x: list(reversed(x)), [[1,2], [3,4], [5,6]]) [[2, 1], [4, 3], [6, 5]]
>>198 ありがとうございます。
でも2.7からなんですね・・
GAEは2.5なのでまじファックです。
227 :
デフォルトの名無しさん :2010/09/09(木) 04:36:26
for k, v in sorted(h.keys()): print k, v これじゃいかんの
229 :
デフォルトの名無しさん :2010/09/09(木) 04:37:12
いかんな for k in sorted(h.keys()): print k, h[k]
>>227 そんな簡単に実現できるならライブラリになってないのではないでしょうか・・
>>228 バックポートされてたんですね。
ありがとうございます。
挿入順を言ってるのかkeyの値としての順序を期待しているのかがいまいち判らん。
232 :
デフォルトの名無しさん :2010/09/09(木) 05:04:57
2.7未満でも、 from collections import OrderedDict みたいに、2.7以降と互換性のある書き方ができるようにする方法はありますか?
>>231 挿入順です
PHPのarrayやrubyのOrderedHashみたいな
234 :
デフォルトの名無しさん :2010/09/09(木) 06:09:53
自前でOrderDictクラスを定義すればいんじゃない? こんな感じに(未検証) class OrderDict(dict): ..def __init__(self, *args, **kwds): ....self.orderd = [] ....dict.__init__(self, *args, **kwds) ..def __setitem__(self, k, v): ....dict.__setitem__(self, k, v) ....if k not in self.orderd: ......self.orderd.append( k ) ..def __delitem__(self, k): ....dict.__delitem__(self, k) ....self.orderd.remove(x) ..def __iter__(self): ....for k in self.orderd: ....yield self[k] あとは必要だと思うメソッドをオーバーライドすれば使えると思う #コンストラクタの挙動がちょっと心配
235 :
デフォルトの名無しさん :2010/09/09(木) 07:17:59
リストの各要素に、文字列が入っています。 ['a','b','c'] それを、指定した文字列を間に挟んで結合したいです。 'a_b_c' これを簡単にやるにはどうしたらいいですか?
(lambda xs: '' if xs == [] else ('%s' + '_%s' * (len(xs)-1)) % tuple(xs))(['a','b','c'])
すごく・・難しいです・・
(lambda xs: '_'.join(xs))(['a','b','c'])
240 :
デフォルトの名無しさん :2010/09/09(木) 08:06:02
Rubyはファイル入出力でcloseを書かなくてもいい書き方ができますが Pythonはできますか?
基本的に閉じなくてもPython終了時に勝手に閉じられる メモリ消費とかはよくわからんけど
おまえらひどいな '_'.join(['a','b','c'])
>>240 hoge = open('fuga', 'rb').read()
これでいいよ
ガベコレされるタイミングはRubyと一緒かな?
>>240 with open("hoge.txt", "w") as f:
f.write("hogehoge")
知りたいのはこういうこと?
>>243 CPythonはリファレンスカウントが基本なので
その文の時点でファイルディスクリプタは閉じられるよ
質問失礼します。 echoサーバーをselect使って書いています。 アクセプトしたソケットがクライアント側で切断された場合にサーバー側でそれを感知することはできるでしょうか?
248 :
246 :2010/09/09(木) 17:53:05
Python本スレで質問したいと思います。 失礼しました
>>243 こんなふうに一気読みした後,
読み込んだ文字列を行単位で処理する方法ないかな?
メモリ使用量が倍になるけど、'\n'でsplitしてリストとして扱うしかない?
from StringIO import * s = 'abc\ndef\nghi' for line in StringIO(s): print line, Pythonの文字列はイミュータブルだから メモリ使用量もバカみたいに増えたりはしないと思うけどどうだろ
>>250 ありがとう。
まさに求めていたものだった。
メモリ使用量はどうかな…まったく同じ文字列なら使いまわすだろうけど。
cStringIOを使おう運動
>>249 for line in open('fuga', 'rb').readline():
print line
こんなんじゃだめすか
254 :
デフォルトの名無しさん :2010/09/10(金) 01:34:16
open('fuga', 'rb').readline()
はファイルを開いて「1行」読み込むって意味だから
それだと読み込んだ1行を1文字ずつlineにいれてループってことになる
>>253 の「readline」を「readlines」にすれば1行ずつ読み込んで表示できる
255 :
デフォルトの名無しさん :2010/09/10(金) 03:49:31
>>183 __future__というのは2.6で追加されたようです。
2.6未満では。u'ほげほげ'と書くしかないですか?
いや、__future__モジュール自体はあるようです。 ただunicode_literalsというのがありません。
いろいろ検索してみると unicode_literalsを使うとuを書かなくてもデフォルトでuを指定したことになるものみたいですね まさに求めていた機能ですが、残念
258 :
デフォルトの名無しさん :2010/09/10(金) 05:10:27
呼び出された関数から、呼び出した関数のオブジェクトを取得するにはどうすればいいですか?
259 :
デフォルトの名無しさん :2010/09/10(金) 05:31:25
リストで存在しないインデックスを指定するとエラーになります。 ここでエラーにせず、Noneを返す方法はありますか?
unicode_literalsが無いとは、Python 2.5以下の化石使ってるのか、3.0以降使ってるのか、 どっちだろ?
>>260 その化石しか使えないのがGoogle App Engineですよ
あぁ、自分で勉強のためにPythonを触っているなら絶対2.6以降をおすすめするが、 そういう事情があるなら仕方ないな。 実際、広く使われているプログラムをメンテするときはCentOS5のために2.4以降を サポートするように書かないといけなくて、with文無いのが鬱陶しすぎる。。。
>>258 >>> hoge = [2,3,4]
>>> fuga = [5,6,7]
>>> def hage(x):
... x[0][1] = 9
... x[1][2] = 8
...
>>> hage([hoge, fuga])
>>> hoge, fuga
([2, 9, 4], [5, 6, 8])
sys._getframe() ただし、ポータブルな方法ではない。CPython以外のPython実装では使えない可能性がある。
"aiueo"という文字列ただ1つだけを要素に持つ様なタプルを書こうとして ("aiueo")と書いても通用しません。 そこで試行錯誤したところ ("aiueo",) が正解なのではないかと思ったのですが、これは正式な仕様ですか?
はい。
ありがとうございます。 あと、自然数が格納されたnum(たとえば123など)があるとき、 "123"ないしu"123"と書けば文字列になりますが、 この様に即値を書いていてはnumが状況によって変わり得る時に困ります。 そこでを文字列にするには str(num) とすれば良いようですが、unicode文字列にするには どうしたらよいでしょうか。 unicode_string(num) みたいな関数があるのでしょうか。 よろしくお願いいたします。
unicode(num)
>>268 ありがとうございます。
助かりました!
270 :
259 :2010/09/10(金) 20:59:03
print a[index] if isinstance(index,int) and 0 <= index and index < len(a) else None こんな感じにすることでエラーを出さなくできました。 これであってますか?
あとこのような処理を組み込んだリストを組み込むには、オリジナルのリストクラスを書かないといけませんが みなさんそういうの作ってますか? 組み込みクラスにも関数を追加できたらいいのですが・・。
272 :
デフォルトの名無しさん :2010/09/10(金) 21:41:45
>>259 例外処理だとダメなん?
l=[0,1,2,3,4,5]
try: print l[6]
except IndexError: print(None)
うーん、例外を通常のプログラムの流れの中で使うのは抵抗がありますね アサーションの意味があると思うので・・
>>271 Rubyおすすめ
[0, nil, 1][100]でもnil、[0, nil, 1][1]でもnilが返ってくる
組み込みクラスの拡張も思いのまま
[]は上書きできないんだっけ?
listを継承して__getitem__なんかを定義するしかないんじゃないか
>>274 Rubyは以前やってましたが総合的にはPythonの方が好きです
>>276 やはりそうですか
>>273 Python の場合はその考えは忘れた方が良いお
>>273 >リストで存在しないインデックスを指定するとエラー
これこそアサーション使う場面じゃん
やたら例外吐きやがる!氏ねPython って考えなら捨てたほうがいいかも
>>278 だな。
文字列が整数のみからなるものかどうかを調べる典型的な方法が
def is_int(s):
try:
int(s)
except ValueError:
return False
return True
だからなぁ。
isinstance(s,int)じゃあかんの
もちつけ
>>283 Java も parseInt だかなんだかで例外をプログラムの流れの中で使うからな
>>273 は C++ 使いすぎた化石
>>283 そう書くと冗長に見えるけど、その関数の呼び出し元で直接例外を扱うことを考えると、
if is_int(s):
xxxxx
else:
yyyyy
が、
try:
val = int(s)
xxxxx
except ValueError:
yyyyy
になるだけで、1行しか増えてない。
しかも、もしifの後で結局数値に変換するのであれば、テストと変換で2回文字列を走査
しないといけない方が非効率になるし。
>>262 俺も2.4を使わざるを得なくて、withくらいならいいかって思ってたら
後置ifもなくて泣いた。
>>287 xxxxxが予期せずValueError返す可能性考えると
try:
val = int(s)
except ValueError:
yyyyy
else:
xxxxx
ってしないと駄目だよ。
冗長だとは思わないが、例外使うのに抵抗ある人には使い辛いだろうなぁ、と思う。
あんま関係ない話だが、一行try式がほしい。
val = int(s) except ValueError 0
is_int = True try int(s) except ValueError False
CentOS5 は Python2.5 以上も動くよ yum にも影響出ないし
291 :
デフォルトの名無しさん :2010/09/12(日) 13:37:34
str型のu'\u30c6\u30b9\u30c8'のような文字列をunicodeに戻すにはどうしたらいいのでしょうか。
>>291 質問の内容がいまいち掴めない
それだと初めから unicode 型だよ?
>>> type(u'\u30c6\u30b9\u30c8')
<type 'unicode'>
u'\u30c6\u30b9\u30c8'.encode('utf-8', replace) とE.S.P.
ごめんなさい str="u'\u30c6\u30b9\u30c8'" を読めるようにしたいという意味です。。
>>> print u'\u30c6\u30b9\u30c8' テスト これがしたかったのか?
>>294 読むだけなら...
>>> s="u'\u30c6\u30b9\u30c8'"
>>> exec('print %s' % s)
テスト
連投スマソ、こうかな?? >>> s="u'\u30c6\u30b9\u30c8'" >>> exec('u= %s' % s) >>> type(u) <type 'unicode'>
>>297 できました!
ありがとうございましたー
>>298 exec は文字列を Python のコードとして実行する関数だから取り扱いには気をつけてね
exec を使う以外にも↓で表示できたわ
import re
m = re.search("'(.*?)'","u'\u30c6\u30b9\u30c8'")
print m.group(1).decode('unicode_escape')
>>> print "u'\u30c6\u30b9\u30c8'".decode('unicode-escape') u'テスト'
301 :
デフォルトの名無しさん :2010/09/12(日) 23:06:20
今、はじめてのPythonという本を読んでいるのですが P206のf.write("%d\n" % c)というコードが分かりませぬ \nは改行? cというのは1〜100までの数字で %d\nをcで割るというのはどういうことなんでしょう
それは %d のところに c を埋め込むっていう意味 '%d\n' % 100 や '<%s><%s>\n' % ['hoge', 'piyo'] なんかを試してみればわかると思う 詳しくは 文字列フォーマット Python でぐぐって
303 :
デフォルトの名無しさん :2010/09/12(日) 23:40:32
文字列フォーマットのパラメタは()で括っているだけで タプル(シーケンス型)ではなかったと思うのだけど > '<%s><%s>\n' % ['hoge', 'piyo'] この書き方って大丈夫だっけ?
305 :
303 :2010/09/13(月) 00:03:26
try: print '%d, %d' % (1,2) except Exception, e: print e try: print '%d, %d' % [3,4] except Exception, e: print e try: v = (5, 6) print '%d, %d' % v except Exception, e: print e try: v = [7, 8] print '%d, %d' % v except Exception, e: print e <出力> 1, 2 int argument required 5, 6 int argument required へー
306 :
302 :2010/09/13(月) 00:04:09
>>303 大丈夫じゃないね。指摘どうもです
もし試すなら '<%s><%s>\n' % ['hoge', 'piyo'] でな '<%s><%s>\n' % ('hoge', 'piyo') で
>>> "%d\n"%100 == str(100)+"\n" == "100\n" True 上記は全て同じ値になります つまり c の数値を %d に当てはめて数字化してるってことだよ \n は改行であってるよ、% は除算ではなくて剰余だけどね
308 :
301 :2010/09/13(月) 00:52:55
>>302-307 ありがとうございます!
とても分かりやすかったです。
さっき、はじめてのPythonって書いたけどみんなのPythonの間違いでしたすみません。。
write(str(c)+"\n")じゃダメなのん?
>>309 '%04d-%02d-02d' % (year, month, day) とかをそれで書くのは大変だし読みにくいぞ
文字列を+で結合するのはコストが高いことを知っておいた方が良い hoge = [] hoge.append(str(c)) hoge.append('\n') write(''.join(hoge)) としなさいとPEPにも書いてあるくらいだ
最近は + でも速いよ
というかおそいってのも 大量のものでやるとき+だと再確保しまくるからであって、いくつかの物をくっつけるときはあまり関係ないような
文字列の長さや結合回数で変わるけど小規模なら+のが速い
m9
辞書でキーに指定したものが存在しない場合、何が返ってきますか?
それはさすがに自分で試すかマニュアル読むべき
文字列フォーマットって特定用途ですげー便利なんだけど、 なんかなくなるみたいな話なかったっけ? 記法が他と浮いてるから、整理したくなる気持ちは想像つくが…
%を使う従来の書き方が廃止になって、新しくはなる。
%記法がなくなると不便になるな。
ちょっと調べてみたけど、新しい方のstr.format()はなかなか使いやすそう。
メールに関してなんだけど、どこで聞いたらいいのか分からないからここで聞きます。 携帯から自鯖へメール転送をして保存したいんだけど、絵文字の部分が〓に変わって保存されてしまいます。 ちゃんとあとから区別ができるように情報を失わずに保存したいんだけどなんとかなりますか? 携帯はソフトバンクですが、USB接続やカード保存ができない機種なので難儀しています。 自鯖はpythonで書いたもので、関係ある部分だけ書き出すと、こんなかんじです。 import asyncore import smtpd from email import message_from_string class MySMTPServer(smtpd.SMTPServer): def process_message(self, peer, mailfrom, rcpttos, data): with open("mail.eml", "w") as f: f.write(data) if __name__ == '__main__': server, port = "192.168.11.3", 25 MySMTPServer((server, port), None) asyncore.loop()
ソフトバンクのロゴだから無理
上で言われてる通り無理 絵文字に割り当てられてる文字コードに対応する文字が無いから表示がおかしくなる どうしてもどうにかしたいというなら 絵文字の文字コードのとこを絵文字を説明する文字列に置き換えるとかならできるが
UNICODEに絵文字導入するって噂あったけどどうなってるんだろうね
326 :
322 :2010/09/13(月) 20:49:44
>>323-324 表示がおかしくなることは構わないのですが、全部下駄に置換されてしまうので
バイナリで見ても、元がどの文字だったか分からないんです。
区別できるんであれば、htmlで画像を埋め込んで表示させたり、手はあると思うのですが。
どうにかならないでしょうか。
from email import message_from_string これをやめろ
基礎的な質問ですが、 XXXabcdeYYY XXX12345YYY XXXあああああYYY のような文章を XXXxyzlmYYY XXXxyzlmYYY XXXxyzlmYYY のように一括置換するにはどのような文が適切でしょうか? XXXとYYYを正規表現で検出して置換するのを想定しています。 <a href ="XX">abc</a> の記載を <a href ="YY">abc</a> のように、リンク先URLだけ置換するにはどうすればよいでしょうか?
↑すいません、下の4行は無視してください。
全部無視しました
屁が出そう
最短マッチあるんだから、マニュアル読んだだけでできるだろうに 丸投げしないでがんばれ
( ´,_ゝ`)プッ
335 :
322 :2010/09/13(月) 21:32:00
>>327 ,328
process_messageで引き取ったdataを手を
print(bytes(data, "ascii", 'backslashreplace'))
で見てみたけど、渡された時点で iso-2022-jp に変換されているようで
絵文字はすでに下駄になっているようでした。
これは、softbankが外のsmtpに送信する際にはもう変換しているってことなんでしょうか。
なら、もとに戻すのは無理ですよね。
えっ
〓ってデコメで送れないの?
>>335 smtpd.SMTPServer で受けるんじゃなくて
他の普通のメールサーバーで受けたソースはどうなってる?
339 :
322 :2010/09/13(月) 22:55:40
>>337 デコメじゃなくて、普通の絵文字の話です。
>>338 PCのメアドに送ってみたら、下駄になってました。
文字コード変換されていない生のままでメールを表示させても
絵文字は判別不能になっていました。
ダメっぽいですね。
いや デコメだろ
絵文字はキャリア側で勝手に変換されるよ。 携帯キャリアと関係がある会社が専用で受けるときだけ直接絵文字のバイナリが 入ったデータが受け取れる。
>>339 外見だけじゃなくて下駄の文字コードは確認したの?
ドコモもそうだぞ。auも忘れたけどたぶんしている筈。 メールサーバーが、絵文字を送っても良い送信先一覧を持っていて、 それ以外のサーバーに送るときには変換して送る。 gmailなんかは直接送っていいようになっているから、gmail経由で受け取るとかしたら、 絵文字を受信できるよ。
2.7をさけて、2.6.6にする価値ってあるんですか?
はい
Pythonはver0.1刻みでライブラリの対応が変わってくる 3.xも3.2がリリースされたようだし2.7も中途半端 2.6.6が2.6.xの最終リリースらしいから無理に2.7使う必要はない
2.4 糞 2.5 慎重派 2.6 普通 2.7 人柱 3.2 チャレンジャー
Gzipのやつをダウンロードして解凍したんですが、 コマンドプロンプトでpythonと入力してもpythonが起動しません 何が問題ですか?
環境変数PATHを設定する わかんなかったら PATH カレントディレクトリ でぐぐる それすら面倒ならインストーラつきPythonをダウンロードしてインスコ
Windowsならmsiのがオヌヌメ
Windowsなのにmsiを使わない人って・・・
msiでインストールすると、レジストリという面倒なものを使って、 あとでゴミが残るんじゃないですか? バージョンはちょくちょく変えていくつもりなのでそういうの嫌だなと
問題なし
怖がりすぎ m9
統合開発環境と、テキストエディタはどちらがお勧めですか? 職業プログラマーではないので、大がかりな仕事というのはしないのですが、 統合開発環境のほうが便利なんでしょうか
便利でもIDEは統合の開発環境だから 皆と同じようなアプリ・コードを作ることになる それは他言語目的のIDEだとPythonを使う上でとてもイカン
補完機能便利です
コマンドラインでは、 >>>a=[3,4,5,6] >>>a とすると、[3,4,5,7]と表示されますが、 統合開発環境で、 a=[3,4,5,6] a と書いて実行しても、 >>> >>> としか出ないのですがどうしてですか
repr(a)
>>364 Python(command line)ってはっきり書いてあるアプリケーションなんですが
えー
print(a)
print(repr(a))
コマンドライン:Windowsではコマンドプロンプトのこと Python(command line):コマンドライン用インタラクティブシェルのこと 後者はインタラクティブシェル(対話的にプログラムを記述・実行すること)だから 入力した式が即座に評価されて,その値がNoneでなければ表示されるようになっているだけ
Emacs系のエディタ使え
>>371 たぶん、 Python(command line) は、インタラクティブシェルじゃなくて
コマンドライン用のPythonアプリケーションを書く設定の事だと思うぞ。
>>373 Python(command line) ってことはWindowsだと思ったんだが(ファイル名がそうなってるから)
WindowsだとGUIツールキットを使用した IDLE とCUI用の Python(command line) の2種類ある
後者はコマンドライン引数にスクリプトを与えるとインタプリタとして動き,
コマンドライン引数無しで実行するとインタラクティブシェルモードで起動する
とりあえず、
>>362 は、「統合開発環境」がなになのかと、Python(command line) ってどこに書いてあったのか
(Windowsのスタートメニュー内なのか、統合開発環境の中のどこかなのか)をはっきりさせないと。
362ですが、コマンドラインといったものは、 msiファイルでインストールした後にwindowsのすべてのプログラムのところに追加されたものです。 統合開発環境はPyScripterです
>>376 PyScripterで新しいファイル(例えば test.py)に
a = [1,2,3,4]
a
みたいに書いて、実行(F5?)して出てきたコマンドライン(シェル?)に
>>>
>>>
しか、表示されないってことかな?
a = [1,2,3,4]
print(a)
で、コマンドラインの方に
[1,2,3,4]
って表示されるよ。 ってこういうことじゃないのかな?
ファイルが圧縮ファイルなのかどうかを調べて 圧縮ファイルじゃなかったら、圧縮するってスクリプトを書いてるんだけど ディレクトリの中にファイルが1つしか存在しないと仮定して filename = os.listdir('.')[0] if not [i for i in ('tar', 'zip', 'rar', 'lzh') if i in filename]: 圧縮するコード と if not True in map(lambda x: x in filename, n): 圧縮するコード を思いついたんだけど、どっちがいいだろうか? どっちもしっくりこないな…
>>378 exts = ['.tar', '.zip', '.rar', '.lzh']
if os.path.splitext(filename)[-1] in exts
380 :
379 :2010/09/15(水) 17:10:55
判定が逆だったな if os.path.splitext(filename)[-1] not in exts
tgzとかbz2とかならどうするつもりなんだろう
>>380 おおお! ありがとう!!!
超しっくりしたよ!!
ひとりでPythonを勉強してると
自分のコードがひどいものなのかどうかわからないから困る…
拡張子はdowncaseしないとまずくない?
超しっとりしたよ!!に見えた 疲れてるのかもしれない ディレクトリを渡り歩くので詰まってたら os.walk を調べてみるとよいよ
>>381 拡張子じゃなくパターンにしてfnmatch()使った方がいいかもな。
patterns = ['*.lzh', '*.zip', '*.rar', '*.gz', '*.bz2', '*.xz', '*.?[gbx]z']
if not itertools.any((fnmatch.fnmatch(filename, p) for p in patterns)):
>>383 ありがとう! lower 追加しといた。
>>384 風呂入ってしっとりしてきた
間違って os.path.walk 調べてたよorz
今はファイルの分割で煮詰まってる
filedata = 0
max_size = 4 << 20
with open('filename', 'rb') as f:
filedata = f.read()
bytes = len(filedata)
inc = max_size # 4MB
fileNames = []
num = 0
for i in range(0, bytes + 1, inc):
fnl = '{0:#03d}.{1}'.format(filename, num)
num += 1
fileNames.append(fnl)
with open(fnl, 'wb') as f:
f.write(filedata[i:i + inc])
とかすると、ドデカいファイルを扱うとメモリが死にそうになる…
>>386 「4MB読んで、4MB書き出す」を繰り返すようにロジックを書き換えればいい。
>>385 fnmatch めちゃくちゃ便利!!
教えてくれてありがとう!
from fnmath import fnmatcn
exts = ['*.lzh', '*.zip', '*.rar', '*.gz', '*.bz2', '*.xz', '*.?[gbx]z']
any(fnmatch(filename, p) for p in exts):
>
>>387 先生時間をください…
389 :
387 :2010/09/15(水) 21:29:14
>>388 ヒント。
1.f.read(size)で「最大sizeバイト読み込む」という動作になる。
2.ファイルの終りに到達した後にf.read()すると空の文字列""が返ってくる。
3.こういう処理はwhile Trueで無限ループを回して、終了条件でbreakするのが定石。
streamだったら無限ループするのかな あreadが戻ってこなくなるのか
>>389 read()は一気に読んでしまうだけだと思い込んでたよorz
取り敢えず、これで実現できた!!
めちゃくちゃ感謝します!!!
with open(cmpfile, 'rb') as f:
while True:
fnl = '{0}.{1:#03d}'.format(cmpfile, num)
with open(fnl, 'wb') as F:
F.write(f.read(max_size))
f.seek(44, 1)
num += 1
if not f.read(5): break
これから、もっとうまくかけないか煮詰めます!
392 :
387 :2010/09/15(水) 23:21:57
>>391 え、ホントにこのコードで実現できてるの?
f.seek()で何か謎に44バイト読み飛ばしてるのとか、
EOFじゃなかったら5バイト無駄に読めちゃうわけだから5バイト戻らなきゃいかんのに、その処理がないとか。
ちなみにwhileループの中は
filedata = f.read(max_size)
if not filedata:
break
with file(fnl, 'wb' as F:
F.write(filedata)
って書けば、EOFチェックのための空読みは要らなくなるよ。
あとスタイル的な話をするとローカル変数に大文字の名前イクナイのと、open()じゃなくてfile()を使おう。
f/F に苦悩の跡がうかがえるけど
>>391 なんかでファイルオブジェクトにつける名前は何がいいんだろうね
fin/fout, src/dest のほかにいいのある?
395 :
387 :2010/09/15(水) 23:42:22
>>393 「fileクラスのオブジェクトなんだからfile()で作るのが筋だよね」って話があったような気がしたけど、
俺の勘違いだったか。
将来的に、openが返すのは直接fileのオブジェクトじゃなくなるからな。
397 :
387 :2010/09/16(木) 00:17:03
ちなみに、俺が考えたスレチな(初心者用じゃない)解答。 with open(src, 'rb') as f: for num, chunk in enumerate(iter(lambda : f.read(size), ''), start = 0): dst = '{0}.{1:#03d}'.format(src, num) with open(dst, 'wb') as o: o.write(chunk)
398 :
387 :2010/09/16(木) 00:22:33
with open(src, 'rb') as f: for num, chunk in enumerate(iter(lambda : f.read(size), ''), start = 0): open('{0}.{1:#03d}'.format(src, num), 'wb').write(chunk)
shutil モジュールのコード読むところから始めたらいいよ。
>>392 確かにこれじゃ動きませんでした…
初心者的な解答はこれであってるかな? file()とopen()はどっちがいいかわからなかったから保留で
max_size = 50 << 10
split_file = 'img.jpg'
if os.stat(split_file).st_size > max_size:
filenames = []
num = 0
try:
with open(split_file) as src:
while 1:
filedata = src.read(max_size)
if not filedata: break
fnl = '{0}.{1:#03d}'.format(split_file, num)
filenames.append(fnl.encode('utf8', 'replace'))
with open(fnl, 'wb') as dst: dst.write(filedata); num += 1
except(OSError, IOError) as e: raise OSError('FileSplitterException: {0}'.format(e))
else:
with open('join.py', 'w') as f:
f.writelines([”#!/usr/bin/env python\n”,
'#-*- coding:utf-8 -*-\n',
'new_file = ”{0}”\n'.format(split_file),
'fileNames = {0}\n'.format(filenames),
'dataList = []\n',
'\n',
'for fn in fileNames:\n',
” with open(fn, 'rb') as src:\n”,
' dataList.append(src.read())\n',
'\n',
”with open(new_file, 'wb') as f:\n”,
' for data in dataList:\n',
' f.write(data)\n'])
402 :
387 :2010/09/17(金) 00:31:34
>>401 > file()とopen()はどっちがいいかわからなかったから保留で
俺の勘違いだった。open()でok。
・while 1:じゃなくてwhile True:
・IOErrorを捕捉してOSErrorを送出するのはよくない。
・join.pyを書き出す必要ってある?
・結合処理が「全部読み込んでから書き出す」なのがよくない。
>>402 確かに、cat img.jpg. * > img.jpg とかやったほうが早いと思ったけど
Pythonの勉強のために一応やってみた
shutil.pyを見てみたら while 1: ってやってたからこっちの方がいいのかなぁとか
取り敢えず、初心者split.py完成形
16KBしばりにしてみた
教えてくださった方々めっちゃありがとう!!
import os, os.path
B, KB, MB = 0, 10, 20
length = 16 << KB
max_size = 50 << MB
split_file = '/host/debian/debian.img'
if os.path.getsize(split_file) > max_size:
num = 0
try:
with open(split_file) as src:
while True:
fnl = '{0}.{1:#03d}'.format(split_file, num)
filedata = src.read(1)
if not filedata: break
else: src.seek(-1, 1)
with open(fnl, 'wb') as dst: pass
for i in range(max_size / length):
with open(fnl, 'ab') as tdst: tdst.write(src.read(length))
if max_size % length:
with open(fnl, 'ab') as edst: edst.write(src.read(max_size % length))
num += 1
except() as e:
raise('FileSplitterException: {0}'.format(e))
>>403 例外はこれに変更で
except EnvironmentError as e:
raise EnvironmentError('FileSplitterException: {0}'.format(e))
405 :
387 :2010/09/17(金) 21:16:25
>>403 いや、cat使えば良いとは思わんが、分割時にファイル名埋め込んだjoin.pyを書くんじゃなく、
「python join.py hogehoge.dat」と実行すればhogehoge.dat.001その他をhogehoge.datに
復元するようなjoinj.pyを書けばいいんじゃない?って話。
あと、俺の主観ではキロバイト・メガバイトをバイトに換算するならビットシフトより乗算の方が分かりやすい。
KB = 2 * 10
split_size = 16 * KB
ビットシフトだと「1KB=1000Bでよろしく」な時に悲惨だし、他の言語なら「ビットシフトは掛け算より速い」という
こともあるけど、Pythonだと似たようなもんだろうし。仮に差があったところで微々たるもんだから、
1度きりの計算なら無視できるし。
EOF検査のために空読みして、そのデータを捨てて1byte戻るのも悪手。
「初心者バージョン」の正解は空読み不要な
>>392 だよ。
>>405 なるほど!!すごい! 確かにそっちのほうがいいね!
shutil.pyにも *1024 で書いてあったし、ビットシフトよりもわかりやすいよね…
ビット演算をマスターしようといろいろ使ってるんだけど、なかなかうまくいかないよ
16KB縛りで頑張ってみてたんだけど、for文のなかで、ブレイクしちゃうとwhile文までは
breakしてくれないし、いっばいif not filedata: break 書かないといけないしで
あわわわわわってテンパッて妥協しちゃったんだ…
これ以上俺スレにするわけにもいけないし、ひとりで頑張ってみるよ!
本当、いろいろ教えてくれてめっちゃ感謝してる!! ありがとう!!!
細かいが、 2*10じゃなくて、2**10だろ
>>407 /)
///)
/,.=゙””/
/ i f ,.r='”-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ”\ `ー'´ /
上とは関係ないが import os for filename in os.listdir('.'): if filename.endswith('.pdf'): next print filename 20分はまった
>16KB縛りで頑張ってみてたんだけど、for文のなかで、ブレイクしちゃうとwhile文までは >breakしてくれないし、いっばいif not filedata: break 書かないといけないしで else
411 :
387 :2010/09/17(金) 23:50:07
プログラム初めての青二才です。 Pythonスタートブックというのを読み終わりました。 ほぼマスターしたので次に読むべきお勧めがあったら教えてください。 2.6に対応した本は少ないようですね。
同じくスタートブック持ってるけど、みんPyがもひとつ濃い内容 ただし、オブジェクト指向で混乱をきたす可能性あり
>>412 本は買わずにライブラリリファレンス眺めてプログラムを書き始めたほうがいいよ
>>412 「ほぼマスターした」といえるなら、ズバリ「Pythonクックブック」を勧める。
基礎がきちんとできてるなら、わからないことは、ネットで検索すれば解決するだろうし。
クックブックはその上で目から鱗がオチるようなコーディングがいっぱい載ってるので、
変な我流作ってしまう前にクックブック読むのがいいと思う。
>>412 それ読み終わって
みんなのpython webアプリ編って本読んでるんだが
さっぱりわからん
レスありがとうございます。
>>415 調べてみました。ありがたいことに日本語訳もされてるようですね。参考にさせていただきます。
>>416 すいません「ほぼマスターした」は言いすぎでした。もう1,2回読んで記憶を定着させます。
クックブックは良さそうですが高いのでいずれ欲しいです。
>>413 ,414
みんpyが書店にあったような気がしたのでそれからいかせてもらいます。
スタートブックは三角関数と一部亀の座標取得のメソッドの説明が無かったところでつまずきましたが
良い本でした。
助言ありがとうございました。
>>417 >みんなのpython webアプリ編って本読んでるんだが
あれは著者の趣味で自作ORMの紹介してるだけだからなぁ
スタートブックはみんPyの著者が関わってる本だよね
本読むために勉強してんのか? プログラム書けよ
自己用途でCodingすることがない人が本で勉強したがるね。 趣味なら適当にWebドキュメントを読みながらProject Eulerとかで慣れるのがいいよ。
本買った方がいいよ
基礎はなるべくきちんと本で勉強した方がいい、という気はするな。
お前の中ではな
つべこべいわずに買えよ
宣伝乙
図書館へgo
そんな事しても おっpyはどこにもないよ
pythonって書かずに pyてょんって書くとかわいいな
禿しく概出
ぱいぱい
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘
>>422 これいいですね。さっそくやってますよ。
↓読んで書いてるんだとしたら、コイツ頭おかしい(www
>>419 >
>>417 >>みんなのpython webアプリ編って本読んでるんだが
>
>あれは著者の趣味で自作ORMの紹介してるだけだからなぁ
2問目で挫折
プログラムが組める=数学ができるだよね? 数学ができないと地獄だねコレ
そんなことはない Project Eulerの話なら(特に後半の問題は)そうだけど
必ずしもそうでないよ、とりわけ有名なエンジニアは文系の人が多いと思うし。 Project Eulerはプログラム+数学を題材にしてるから仕方ない。 ググって公式拾って、プログラム組むというのは 実際に、ライブラリ等を使った際のプログラミングと似ていて そういった習慣や技術を身につけるのには最適。 もちろんどうしても解けない問題もあるからそこら辺は割愛して。
438は、数学ができる=プログラムが組めると思って自分を慰めているダメプログラマ。
どう読んだらそう読めるのか なんか病的なコンプレックスでもあるとしか思えない
労害っぽくもあるな.
何の学問するにしてもまずは国語。これが大事。
π体験だったら買ってた(キリッ
さすが老guy!
ひとりでPython勉強してたら、誰も批判や指摘してくれないから 変な癖がつきそうだよ… 例えば、pylintが警告してくるから for i in range(3): print('spam') を for i in ('spam')*3: print(i) って書いてるんだけどこれってどうなんだろう?
まずは警告メッセージの内容をですね
>>450 unused variable 'i'
って出て変数が使われていません的?な感じなんだけど、
これって無視してもいいのかな?
警告であって不具合に繋がることはない、 大した差もないしそれくらい自己判断 でも単純LoopでIndexを取るのはCの習慣だから可読性は顕著に違う
Python の場合文字列にも掛け算できますよ print('spam\n'*3)
>>451 「for文でiという名前にiterableの要素を入れてるけど、ブロックの中ではiにアクセスしていない。
これって平気なの?」と警告されてるだけで無問題だけど、私見では'spam'を三つ並べた
iterableを用意した方がきれいだと思う。
ただし、そのアプローチを採るなら('spam',) * 3よりitertools.repeat('spam', 3)の方が望ましい筈。
>>454 ステキなコード! ありがとう!
今度からitertools使うようにするよ!!
ひとりで勉強するなら、やっぱり標準モジュールやPyPlの
コードを眺めて書き方を学ぶしか方法はないのかな…
もうちょっとイバラの道でもいいからちゃんとしたコードが
書けるようになりたいよ…
>>416 クックブック3rdEditionって出る予定ありそうですか?
>>455 だから、クックブック嫁ってw
素敵なコードがいっぱい載ってるよ。
ちょっと何言ってるかわからないですね
ワロタ
質問です。 パイソン2.6をインストールして、IDLEというテキストエディタが使えると思うのですが 実行ファイルはどこにあるのでしょうか? .pyファイルを右クリックするとeditwithIDLEと出るときと出ないときがあるので困っています。 よろしくお願いします。
>>461 Python\Lib\idlelib\idle.pyw
これをダブルクリック
idle.pywに.pyファイルをドラッグ&ドロップしても立ち上がる
関連づけ外してる場合(とかPortableの場合)は
idle.pywをpythonw.exeにドラッグ&ドロップして立ち上げるとか
>>462 確認できました。ありがとうございました。(感謝)
Windowsでpdcurses(
http://pdcurses.sourceforge.net/ )を用いて
コンソールアプリケーションを作ろうとしています。
とりあえず日本語の文字列を出力したいのですが、文字化けしてうまくいきません。
文字化けせずに出力する方法はありませんか?
(cygwinならcursesモジュールが使えるようですが、今回は事情によりpdcursesを使いたいです)
環境:WindowsXP、python 2.6.6
以下、手元で試したコードです。
# -*- coding: utf-8 -*-
import ctypes, time
def main():
pdcurses = ctypes.cdll.LoadLibrary('pdcurses.dll')
pdcurses.initscr()
pdcurses.mvprintw(0, 0, 'abcde')
pdcurses.mvprintw(1, 0, u'あいうえお'.encode('shift_jis'))
pdcurses.refresh()
time.sleep(1)
pdcurses.endwin()
if __name__ == '__main__':
main()
動画(出来ればH.264)を再生したいんですが ライブラリとかありませんか?
pyjamas とか pystachio とか使ってる人いますか?
>>464 mvprintw に mbcs 渡したら駄目じゃないの?
470 :
464 :2010/10/01(金) 18:52:02
使用すべきpdcurses.dllのバージョンを間違えていたようで
上記のコードでちゃんと文字が表示されました。どうもすいません。
(pdc34dll.zipでなくpdc34dllw.zipをDLしていました)
>>468-469 回答ありがとうございました。
subprocess.PopenのPIDについての質問です 環境: Python 2.5.5 Debian Squeeze python内からPopenからコマンドでvlcを立ち上げ、その戻り値からPIDを取得 >>> import subprocess >>> import signal >>> import os >>> p = subprocess.Popen(['vlc'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) >>> print p.pid 6167 ここで問題なのは、psコマンドでvlcのPIDを見てみると 上で得たPIDより1加算された値、6168がvlcのPIDとなっています。 これではvlcがいらなくなったときに >>> os.kill(p.pid, signal.SIGKILL) でkillしようとしても、うまくkillできません。かと言って >>> os.kill(p.pid+1, signal.SIGKILL) では何かと不安が残ります。 この問題について何か解決方法な無いでしょうか?
subprocess.Popen のパラメータに noshell みたいなのなかったか
shell=False
>>472 ,473
回答ありがとうございます
おかげで解決しました
あと、ここで一つ疑問に思ったのが、shellをTrueにするとなぜ
>>471 のような結果になってしまうんでしょうか?
shell=Trueでシェルを介して実行したらPIDが+1される仕組みがよく理解できません。
できれば解説をおねがいします。
shell の pid と vlc の pid が出来る
shell=False の場合は、 Python が fork して新しいプロセスをつくる → その新しいプロセスが exec* して vcl になる shell=True の場合、 Python が fork して新しいプロセスをつくる → 新しいプロセスが exec* して sh になる → sh がまた fork して新しいプロセスをつくる → 新しいプロセスが exec* して vcl になる つまり shell=True の場合、Popen.pid で拾えるのは sh の pid ここらへんイミフだったら fork や exec* をかじらないといけない
>>475 ,
>>476 なるほど納得しました
どおりでvlcのPIDが+1されていた訳ですね
なにか暗黙的なお約束でPIDが+1されていたのかと思ったら、
shell=Trueと見たまんまshをかましてvlcを立ち上げていたんですね
どうもありがとうございました
初心者ってなんでドキュメント読まないんだろうな
初心者がドキュメント読みこなせたらこのスレいらんがな
まぁな
初心者スレじゃ無くなってるのか… ショボ━━(´・ω・`) (´・ω:;.:... (´:;...::;.:. ::;... .....━━ン…
このスレにもいるのか・・・
なぜか超初心者スレに常駐し、初心者を見下すことによって偉くなった気分に浸るという小物が・・。
お前だよ
>>478
どこにでもいるからほっとけ
m9
悔しいのぅ
486 :
デフォルトの名無しさん :2010/10/03(日) 19:57:14
初歩的な質問かもしれませんがお願いします :ABCD-EFGD-IJKL-M\nOP の内容をtext.txtの名前で保存 :f = open("text.txt","r") :for line in f.read().split("-"): : print line の内容をtest.pyの名前で保存 そしてtest.pyを実行したのですが、\nが改行にならずそのまま表示されてしまいます 解決したい問題としては「\n\tなどのバックスラッシュを有効にしたい」という点です 思いつく範囲で調べはしたのですが、結局分からないままです 何か示唆でもいただけるとありがたいです
その text.txt をどうやって作成したの? エディタから ABCD-EFGD-IJKL-M\nOP って入力して保存したら \n は \ と n 二文字って解釈されるよ 一方 Python の文字列リテラルで "\n" と書けば改行文字として認識される
488 :
デフォルトの名無しさん :2010/10/03(日) 20:10:37
お返事ありがとうございます text.txtは外部(linuxのvi)から入力しました 確かにpythonから文字列としてwriteすれば改行されていました この\nの二文字を文字リテラルとして認識することは出来るでしょうか?
text.txt の中身を s とすると s.replace('\\n', '\n') とかするしかないんじゃないかなあ もっとも s が Python のコードとして正しいものなら (たとえば 'ABCD-EFGD-IJKL-M\nOP' と引用符をつけてエディタで入力してある場合) eval(s) とかできる
'''のような文字列が入っていないと仮定できるのなら eval("'''" + s + "'''") でいいね
evalよりも、string_escapeの方が良いな。 >>> s='foo\\nbar' >>> print s foo\nbar >>> s.decode('string_escape') 'foo\nbar' >>> print s.decode('string_escape') foo bar
492 :
デフォルトの名無しさん :2010/10/03(日) 20:36:36
ありがとうございます! eval("'''" + s + "'''") で試したところ上手く動きました 前処理をすればこの方法でいけると思います 質問に答えてくださった方々、本当にありがとうございます 非常に参考になりました
493 :
デフォルトの名無しさん :2010/10/03(日) 20:45:21
>>491 なるほど
そういう方法もあるんですね
decode('string_escape') の方がevalより文字列に関する操作という認識でいいのかな
少し両者を調べてみたいと思います
>>491 勉強になった。そっちのほうが良いね
調べてみると、逆にエスケープシーケンスを \ でエスケープしたい場合は
>>> '---\n---\t---'.encode('string_escape')
'---\\n---\\t---'
>>486 スレタイに(ネタかもしれんが)そう明記されてるのに、しれっと
>>初歩的な質問かもしれませんがお願いします
こんな事書く奴って、死ねばいいのにって思う。
とっとと、2ちゃんから出ていって、Yahoo知恵遅に行って欲しい。
初歩的な質問かどうかを、初歩的な人が決められるワケが無いだろ。
〃∩ ∧_∧ ⊂⌒( ・ω・) はいはいわろすわろす `ヽ_っ⌒/⌒c ⌒ ⌒
池上彰「いい質問ですねぇ〜」
何に怒ってるのか本気で分からない
お前は何を言ってるんだ
悔しいのぅ
【478】デフォルトの名無しさん 2010/10/03 06:17:44
初心者ってなんでドキュメント読まないんだろうな
【495】デフォルトの名無しさん 2010/10/03 22:50:44
>>486 スレタイに(ネタかもしれんが)そう明記されてるのに、しれっと
>>初歩的な質問かもしれませんがお願いします
こんな事書く奴って、死ねばいいのにって思う。
とっとと、2ちゃんから出ていって、Yahoo知恵遅に行って欲しい。
初歩的な質問かどうかを、初歩的な人が決められるワケが無いだろ。
# -*- coding: utf-8 -*- from mod_python import apache def index(): return "Hello! index" def test1(): return "Hello! test1" def test2(req): req.write("Hello! test2") def test3(req, aaa, bbb): req.write("Hello! test3\n\n") req.write("aaa : "+ aaa + "\n") req.write("bbb : "+ bbb + "\n") mod_pythonのpublisherなのですが このサンプルコードのtest2とtest3をtest.py/test2みたいに呼び出すと ファイルダウンロードのダイアログが出てしまいます 呼び出し方や設定が悪いのでしょうか ページとして呼び出したいのですが…
>>502 Apacheとかよう知らんが、どこかでcontent-type: text/htmlとかしないといかんのでは。
504 :
デフォルトの名無しさん :2010/10/05(火) 13:21:20
pythonはどのような開発環境でコードを書くのが一般的でしょうか? PHPですとeclipse系や秀丸やサクラエディタやEmEditorなどのテキストエディタも使われてたりしますが
Pyscripterでも使っとけ
506 :
デフォルトの名無しさん :2010/10/05(火) 14:01:18
Python2系列とPython3系列ではprintの仕様が違うので サイト見て勉強するならpython2.7インストールし直すといいよ そのままでいくなら print("Hello World")
今時バージョンも明記してない糞サイト見るな。
pythonをインストールするのとポータブル版として使うのに違いは出ますか?
install/installとかいう糞重複URLをつけるような糞サイト見るな。
ダメサイトのサポート役が俺達の仕事
スクリプト言語にEclipseなんていちいち使ってられるかよwwwwwwwwwwwwwwwww
メモ帳さんマジパネェッス
>>507 つか、そこのサイトでコレ落とせって書いてあるのをスコーンと無視しちゃってるから、あんなバカなエラーで頭抱えてるんだろ?
ネタじゃん。かまって君の。
性格悪そうな人だね^^;
×悪そう ○悪い
>>493 文字列に関する操作ってのもあるけど、それ以上に安全性が優れている。
CGIやらに利用する気がないのなら、現時点では安全性ってどうでもいいけど、
将来そういうこともやりたいかもって思うのなら、そういうの考える癖をつけといた方がいい。
>>504 別にどれが一般的とかない。
PHPと同じのでできるけど、インデントをタブとスペース混在させるエディタだけは使うな。
なんで、Pythonの虚数部はjで表すんですか? iで良いじゃないですか! Integerと紛らわしいから? いや、俺が混乱してます。
電気回路ではよくjを使うよ
はぁ?
iだと電流と混同しちゃうから
おっさん乙
>>510 インストーラで.pyファイルとかが関連づけがされないからファイルがダブルクリックで開かない
くらい
プログラム書ける人は尊敬するわ。 絵や音楽はアホでもなんとかなるけどプログラムはそうはいかない。 習得も難しい。
完全に逆だと思います
絵や音楽はバグがあっても下手な絵とか音痴とかで済まされるが プログラムは馬鹿だと動くところまで辿り着かない
プログラムは真似れば誰でも作れる 芸術は真似ても完全に同じものは作れない
ま、どっちも、完全コピーはタイ━━━━||Φ|(|´|D|`|)|Φ||━━━━ホ!!!ですけどねー。w
完全コピーは芸術じゃなく技術 卓越した技術は芸術に昇華するけどな・・・ってなんの話だ
プログラムは最低限動きさえすればどんなにクソでも使いようがあるが、 絵や音楽はクソだと何の価値もない。
一昔前の需要だと
音楽>グラフィッカー>プログラマー
>>527 >なんとかなるけど
趣味としてなら別にいいが、生きてはいけないだろw
音楽や絵で飯食ってる人の音楽や絵は本物じゃないって言われてるね
エンターテインメントとしては本物
謙遜してる人が多いがとにかくプログラマという人種は頭脳の次元が違うようだ。 本当に頭がいい。 俺などは初心者本すら理解するのが難しい。 プログラミングの敷居の高さは半端無い。いったいどれくらいの人間が挫折していったのだろうか。 バカにはプログラムは無理と煽られても悔しいが認めざるを得ない。 あんたら本当にすごいわ。 自分の思い通りのスクリプト作れたら楽しいだろうな。でもそこまでがつらすぎる。
Python始めたばかりです。 入力待ちになってるスレッドってどうやって止めればいいのでしょうか? 例えば↓で10秒入力がなかったら終了してほしいんですが、戻ってきません。 import time import sys from threading import Thread def reader(): try: while True: print raw_input() except: pass def stopper(): time.sleep(10) sys.stdin.close() #ココをどうすればいいのだろう? threads=[Thread(target=reader),Thread(target=stopper)] for t in threads: t.start() for t in threads: t.join()
実行中のスレッドを強制的にkillするのは良いやりかたではないし Pythonはそういう手段を提供していない Cのレイヤでド汚い手段を使えば可能だろうけど、そんなことをやると インタプリタの実行状態やリソースがどうなるか分かったもんじゃない なので、実行を中断したければ、永遠にブロックする可能性のあるI/Oリクエストを 発行してはいけない、ということになる Unix系のOSなら、read()する前にselect()すればよい select()にはタイムアウトを指定できるから 一方、Windowsではコンソールからcookedモードのままで タイムアウトつきで読み取る良い方法はないと思う
540 :
538 :2010/10/07(木) 19:17:35
>>537 Python始めたばかりとか、当てつけたわけじゃないから落ち込まないでね。
オレはもともと数年C/C++やってて、Pythonも必要性を感じて新たに勉強してるだけだから。
541 :
538 :2010/10/07(木) 19:22:12
>>539 ありがとう。
やっぱりブロッキングI/Oに別スレッドから割り込みをかけるような方法はないのか。
よくわかりました。
join で timeout するのか
いやいやjoin()でブロッキングI/Oを中断はできんだろ alarm()使うのはUnixでは古典的なトリックだが マルチスレッドアプリケーションでalarm()もどうかと思うし いずれにせよWindowsでは使えない
フラッシュゲームとかで、ASDWで移動とかしてるのが有るけど、あーいった仕掛けはPythonでは出来ないと言う事なのかな? マイコン時代なら、どのキーが押されたかは、或るアドレスを監視しまくるとかでやってたんだけど。
>>545 そういうのは、ちょっと上のとは違う話だね
もしかしたら
>>538 はそういうものを本当は求めていたのかもしれないけど
ゲームなどで想定されるキー入力は、一文字で即時反応・エコーバックなし
バックスペースなどの行編集は出来ない
つまり普通の端末入力とは全くモード/やりかたが違うわけよ
Unixなら端末をRawモードにして読み取りを行うんだが、普通はcursesのような
高レベルのライブラリを使う(Pythonにもある)
WindowsではWin32 Console APIというのを使う
>>538 は(文字通りに読めば)行編集ありの普通のモードで一行入力を
読みたいわけだろう
Unixでは端末を通常のCookedモードのままで標準入力にselect()をかけると、
行入力が完了した時点でselect()がリターンして、read()で入力行を読み取れる
WindowsではWaitFor〜系のAPIを一応標準入力を待つのにも使えるんだが、
キー入力された時点でトリガーがかかって即時リターンしてしまうので
行入力を待つ上手い方法がないんだ
548 :
538 :2010/10/08(金) 19:32:22
すみません。昨日はお礼を言ってから見てませんでした。
キーストロークとか端末の入力まで見るのは行入力に比較してちょっと大変なので
意図としては
>>546 さんの言う通りでした。またLinux(Ubuntu Pythonは2.6)で
動かしていますが最終的にはWindowsでも動かそうとしています。alarmというか
signalはLinuxで使用できますが、メインスレッドでしか使えなかったので諦めて
いました。いずれにしても初心者でも使える典型的なやり方はなさそうなので
しばらく放置することにしています。
今日は別の似たような質問をさせてください。
複数のスレッドから子プロセスを生成してパイプで簡単なやりとり(エコー)をします。
するとスレッド数がある程度以上になるとどうもデッドロックするようになります。
これはなぜなのでしょうか?(調べていたのですが、現状ではお手上げです)
# 環境: Linux(Ubuntu 10.04 64bit) Python 2.6.5
from subprocess import *
from threading import *
THREAD_COUNT=50
def worker():
p = Popen(["cat"], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
out = p.communicate("hoge")[0]
print "%s %s" % (current_thread().name, out)
threads = []
for i in range(THREAD_COUNT):
threads.append(Thread(target=worker, name=str(i)))
for t in threads: t.start()
for t in threads: t.join()
# 文字コードの確認 >>> " " '\xe3\x80\x80' >>> "あ" '\xe3\x81\x82' # 本当は'\xe3\x81\x82'になるはず?? >>> body = " あ" >>> body.strip(" ") '\x81\x82' 文字列の先頭にある全角スペースをstrip()メソッドで除去したいのですが、 上のように"あ"の"\xe3"まで除去されてしまいます。。これはバグでしょうか? 環境はPython 2.5.5です。
>>549 strは1byte単位の処理だから、
'ABCBabc'.strip('ABC')の結果が'abc'になるのと同じ話。
unicodeに変換しても差し支えないなら(ていうか、UTF-8っぽいから当然差し支えないわな)
str.stripじゃなくてunicode.strip使うといいと思う。
>>549 Python2.Xではuをつけないと文字列はただのバイト列なので
全角スペースは1文字ではなく(UTF-8で)3文字扱いになる。
よって、その例では'\xe3', '\x80', '\x80'を文字集合として与えていることになる。
(\x80が重複しているので、実際には\xe3, \x80を指定したのと同じ)
同様にbodyも2文字ではなく6文字扱いになっていて、単純に1byte単位で
\xe3, \x80にマッチする文字が削除されているだけ。
なので、意図した動作にしたいのなら単にuをつけるといい。
u' あ'.strip(u' ')
unicode.strip()はデフォルトで全角空白も認識するので、実は
u' あ'.strip()でも同じ結果になる。
>>550-551 バイト列!!ありがとうございます。そういうことだったんですね。
「なんかunicodeだと大丈夫っぽいな・・・」までは偶然にも到達してたんですが
モヤモヤしてよくわかってなかったので本当に助かりました。
>>548 少し重いが私の環境ではうまく動いてるようだけど
554 :
548 :2010/10/08(金) 23:34:34
>>553 確認ありがとうございます。
すみませんが、何回やって動いているという感じなのでしょうか?
あとPythonのバージョンとOS(WindowsかUn*xライクOSか)なども教えていただけないでしょうか?
私の環境でも100%再現するというわけではなく、10回やって9回再現
PCのスペックはCore2Duo 2.4GHz 2GBメモリ
OSはUbuntu 10.04 amd64でPythonは2.6.5という感じです。
555 :
553 :2010/10/09(土) 00:43:50
Athlon64 3000+ メモリ1GB Archlinux amd64 Python2.6.5 失敗は見られず。THREAD_COUNT=500にしても問題なし マルチコアで起こる問題かもね
556 :
548 :2010/10/09(土) 00:59:08
>>555 ありがとうございます。でもまったく再現しないとは…
とりあえずVMにArch入れてみたり他のPCで試してみたりしてみます。
Windows VistaでPython 2.5を以前入れたものですが、このたび再度学習しようと 2.66を入れようとしています。 Python自体の一式のアップデートの方法というのは特にありますでしょうか? 2.5と別ディレクトリにインストールした方がよいでしょうか?上書きではまずいでしょうか? 個別スクリプトの最新版への追従ではなく、Pythonそのものの話です。
2.5を消してからインストールか、別のディレクトリにインストールするのが無難。 2.5になにか追加のライブラリをインストールしていた場合、上書きインストールではその 古い追加ライブラリが残ってしまって、中途半端に動く可能性がある。 変なエラーに悩むよりは、ライブラリがimportできないというメッセージをもとに ライブラリをインストールし直す方が楽。
Pythonは複数のバージョンを同居させることを考慮しているので、 基本的に古いバージョンを消す、というようなことはしないんだわ。 これはPythonの伝統。
560 :
548 :2010/10/09(土) 02:56:13
>>556 の結果です。
(A)core2duo(コア2) Ubuntu 10.04 64bit Python 2.6.5 → 再現
(B)core2duo(コア2) Ubuntu 10.04 64bit Python 2.6.5 → 再現
(C)atom Z520(コア1 HT) Ubuntu 10.04 32bit Python 2.6.5 → 再現
(D)Athron 64 X2(コア2) Ubuntu 9.10 64bit Python 2.6.4 → 再現
(E)(A)上のVirtualBox上でArch Linux(コア?) 64bit Python 2.6.5 → 再現
topが認識するCPU数は(A)-(D)が2、(E)が1でした。
(topを起動して1を押下→Cpu0/Cpu1のように表示される)
全て2回以内で再現したのでもうよくわかりません。とりあえず寝ます。
C:\Python24 C:\Python25 C:\Python26 何も考えないで複数インストールするとこうなるはず。 人間がどのバージョンを使っているか混乱することはあるだろうが、 システム上は何も問題ない。
>>561 だから、2.5がいらないなら、2.5をアンインストールしてから、
2.6をインストールするのがいい。
2.5で動くけど、2.6で動かないというスクリプトはまずないだろうから、
それで特に問題ないと思う。
2.5をなんらかの理由で置いておきたい、と考えるなら、
そのまま2.6をインストールすればいい。
>>562-563 ありがとう。
2.5のときにPythonってディレクトリほってインスコしてしまったので、Python2.6として並行して入れると
後で混乱しそうなので、適当に前のをアンインスコして入れてみます
Pythonではバッチ処理みたいなの走らせてなかったと思うので大丈夫だと思う・・・
至る所に付いて回るselfが気持ち悪い。。。吐き気がする。。。
ここはお前の日記帳じゃねーぞ
567 :
デフォルトの名無しさん :2010/10/10(日) 03:35:53
どこにも宣言されていないthisを使ってるのが気持ち悪い...吐き気がする...
頭が悪いとしか言いようがない
selfが嫌ならクラス作らなきゃいいじゃない
2.7から2.6にダウングレードしたいのですが、そのままインスコするだけで大丈夫ですかね?
少し亀ですがありがとうございました
>>565 じゃないのですが、selfをあえて宣言させる理由というか経緯みたいなものってどこかで見られないでしょうか?
Pythonですし、冗長性よりも利点をとっているだろうし必ず理由があると思うので
OOPをサポートした言語でこのような言語をあまりしらないだけかもしれないですが、
こういうのって珍しくないのですかね
冗長でも明示するってのが理由じゃなかろうか。いyまあ第六感じゃがの
何度も同じ質問があるかもなんですが今からPython2.6始めてから3.0に移行で良いでしょうか?
属性にアクセスするときに毎回selfを書くのを問題にしているのか、メソッドの宣言時に 第一引数にselfを書くのを問題にしているのか、どっちだろう? 前者については、静的言語と違ってあるシンボルが属性かどうかをコンパイル時に決定 できないので、「このシンボルは属性から探してね♪」というマークを付けないと探索範囲が 広くて遅くなったり、ローカル変数と名前が被った時に混乱する元になる。 他のLLでも $this-> だったり @ だったり何かマークを付けてる。 関数の第一引数にしているのは、Pythonは関数を後からクラスのメソッドとして追加できるから、 関数のルールと別にメソッドのルールを作るのではなくて、全部関数で統一しちゃっただけ。 どうせメソッド定義するときに "self, " の6タイプ長くなるだけだから、「言語自体はなるべく シンプルに」なるように設計しているPythonとしてはメソッドの為に専用のルールを追加したくなかった。 「暗黙より明示」っていうPythonのZen(禅)にも一致するしね。
>>573 あえて宣言させてるってより、普通の引数だから。
class Foo:
def bar(self):
pass
a = Foo()
a.bar()
で、
a.bar()っていうのは
Foo.bar(a)
と同じ意味を持つ。
C++とかJavaに慣れてたらとっつきにくいかもしれないけど、
そういう意味なんだと受け入れたら、あえて宣言させてるとは思わなくなるよ。
>>575 3.0 はお勧めしない。せめて3.1を。
単純に勉強とかスクリプト言語としてPythonを使いたいなら、3.1から始めても良いけど、
ネット上に書かれている情報は前置きが無い限りは2用だから気を付けないといけない。
Django使いたいとかGAE使いたいとか考えているならそもそも2しか選べない。
今は2.7か2.6.6で初めて、来年後半、Python3.2とかdistutils2とかその他ライブラリが
出そろってから移行でも良いと思うよ。言語の仕組み自体はほとんど変わってないから
移行してもすんなり覚えられるはず。
>>578 取り敢えずみんなのPythonで勉強してから3.1に移行するようにします。
詳しい解説ありがとう。
>>577 >>573 とは別な人ですが。
うーん。
やはり、そういう部分だけピックされても、なんでって疑問は払拭されないんですよね。
なんてのかな?必要性を感じ無いというか?
なんだろう…
Cで、なんかトリッキーなコーディングするのが流行った(もちろん、論理的に練られてるんだろうけどさ。)流れでなんかしてる感しか無いかな。
いや、まぁ、素数求めるのに、偶数排除して偶数以外で割るかテストしていくアルゴリズムは、知的では無いけど、じゃあ、それ以上のアルゴリズムでコーディングしたからって、どうよ?って感じなのよね。
だって、もう一台パソコン組んで放置してればイイじゃん?って思っちゃうワケ。
まぁ、スーパーコンピュータの性能が世界一じゃ無いと、ボクも悔しいと思うけどさ。
なんか、俺つえぇぇぇ!!だけな感じしかしないんだよね。
答えだけでれば良いんだって事を無視してる感じしかしない。
お前は何を言っているんだ
3行でおk
>>581 インスタンスへの参照を第一引数に受け取る素朴でわかりやすい仕様なので
(それだけに外野から野暮とか言われる)
俺TUEEEとは正反対だ
お前は何を言っているんだ
>>573 Cで言うと
FILE *fp = fopen("hoge", "rb");
fgets(buf, sizeof(buf), fp); ← この fp が self に相当する
fclose(fp);
C++でも、メンバ関数内での自身のメンバアクセスとかにわざわざthis->をつける ってコーディングする人もいるよな。 つまり、メンバ変数(関数)と別の変数(関数)と、明示的に区別したい、という要請 そのために、例えばMFCとかでは、メンバ変数にはm_なんてプレフィックスつけるとか、 UNIX系のC++ではメンバ変数には_をつけるとか、 そんなコーディングルールのようなものがあったりする。 で、Pythonの場合は、そんなプレフィックスより、selfを渡して、全部そこからアクセス させれば、明示的でいいじゃん、ってなことなんだよ。 俺はセンスある選択だと思うし、Pythonicだとも思う。
589 :
548 :2010/10/11(月) 13:32:05
お前にはPythonを語る支度もないし,能力もないよ
σ(゚∀゚ )
支度?
どれにレスが欲しいのよ
>>548 10回ぐらい実行してみたけど、俺の環境でも特にデッドロックは起きないな
ロートルマシン上のcoLinuxだけどね
Pentium M 1.7GHz
Windows XP SP3 / coLinux 2.6.22.18-co-0.7.5 / Debian squeeze
Python 2.6.5
>>594-595 ありがとうございます。レスがほしいのは
>>548 でした。
起きないとどうしようもありませんね。現状うちの環境でパイプは諦めるしかないかもしれません。
# にしてもcoLinuxとは。
# カーネルバージョンが気になって最近はとんと使ってませんでしたが良いですよね。
これで起きてるの?THREAD_COUNT=50
>>597 はい。
>>554 の環境でTHREAD_COUNT=20くらいからポツポツと起き始めます。
599 :
598 :2010/10/12(火) 02:07:50
超初心者の俺がcぽいトリッキーなコーディングは嫌いだと書き込んだのに、相変わらずな話題。 結局、初心者相手に、俺つぇぇぇしたい奴が、ネタ質問してネタレスしてるだけなスレだよね。 超初心者すら、猫またぎな言語だと言うのがよく判っただけでも感謝すべきかな。 ( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \
>>600 いや、どこがトリッキーなのか全く不明なんだが?
メソッドを書くときだけ暗黙の変数が宣言される方がトリッキーじゃない?
>>599 Ubuntu 10.10 で再現確認。確かにデッドロックしてるな。
Pythonのデバッグ環境が揃ってないのでどのロックがデッドロックしているのかすぐには判らないや。
Ubuntu 10.10 の問題なのかLinux用Python全般の問題なのかも不明。
602 :
573 :2010/10/12(火) 03:59:23
selfについてみなさんありがとう。
今までは何でselfが必要なんだろう?単に冗長性があるからおかしいのでは?と思っていたので、
今回かなり理解できてきて驚きです。
>>576 両方のことでした。
前者ですが、属性アクセスにselfが必要というのは、他の言語でselfが省略できることでわかっていてもけっこうハマることがあり、
selfが必要という仕様はPython的には必然ではないのか、という気がしてきました。
この辺は言語によってかなり動作が異なりますよね。
ある言語ではselfを省略しても、同じ名前のローカル変数スコープがなければ属性にアクセスできたり、
ある言語では属性にアクセスするつもりでも、self相当をつけ忘れてローカル変数に代入してしまっていたり(これは属性にみせかけたメソッドのせいなのですが)、
言語によってはかなり異なる動作をし、時には動作が仕様通りとはいえあいまいに見えるものです。
型宣言の要不要、あるなし、でも相当振る舞いが違いますよね。
この点は、Pythonは属性の場合はselfが必要という点で「わかりやすい」と思いました。
603 :
573 :2010/10/12(火) 04:17:30
>>576 の後者と
>>580 のGuidoの話ですが、
> もう一つの論拠は,"self"を明示的に引数として記述することで,
> 関数を追加して,クラスを動的に書き換えることができるようになる,というものである。
他の言語ではそうしなくてもできているので、明示する理由にはならないですが、
その後のメソッドと関数は同じものである点はかなりシンプルでわかりやすい仕様かと思います。
OOPな言語では、メソッドと関数が全くの別物で互換性がなかったり(メソッドは参照として扱うときはselfが隠れているわけですから)、
そもそも全てがメソッドだったりしますが、
実は全部関数なんだ(というように見える)Pythonもありだと思います。それはとてもシンプルでわかりやすい。
それにしても、他言語でも「この仕様は(その言語名)らしいか?」というのは当たり前のように言われますが、
「Pythonicであるかどうか?」というのは面白いものに感じられます。
よくRubyとPythonどちらがいいか?という質問に対し「どちらでもいい」「似たようなものだ」
「PythonもわかればRubyも使えるようになる(逆もしかり)」という答えがちらほらでますが、
「Pythonicであるかどうか?」と「Rubyらしいか」は全く異なり対極に位置するように感じますね。
# そもそもこの答えの真意は、いいから(それを聞くような初心者は)さっさとプログラミング始めろやボケ、というくらいのものかもしれませんが
selfの話は、どっちでも言語として成立するし、どちらかが明らかに優れているという事は無い問題です。 self の方が若干タイプ数が大きく、 @ の方が多言語開発者が推測しにくい魔法に見えて可読性を落とす、 くらいの違いでしかありません。 可読性を選んで魔法に見える記号や暗黙ルールよりも若干の冗長性を受け入れるのがPythonic、 冗長性も記号や暗黙ルールを使って排除しDRYを最優先するのがRubyらしさ、という気がします。
Rubyは別にDRY最優先じゃないだろ。もしそうなら真っ先に end に記号を割り当てるよ。
>>599 各スレッドはselect待ちの部分で止まっているっぽいんですが、Ctrl-Cしたらちゃんとselectから帰って来てるし、
メインスレッドでjoinの代わりにsleepしても再現するからメインスレッドが子スレッドを邪魔してるんでもない…
すぐには解決できそうになかったんンで、 comp.lang.python に投げてみました。
>>604 > self の方が若干タイプ数が大きく、 @ の方が多言語開発者が推測しにくい魔法に見えて可読性を落とす、
> くらいの違いでしかありません。
@はRubyの話だと思いますが、@はselfなしで使い分けられます。
問題は、組み込みにもあるattr_accessor :hoge やattr_writer :hoge、def hoge= を利用した属性のアクセサを定義する場合です。
obj.hoge = 1234 や self.hoge = 1234 のようにレシーバーありの場合は問題ないのですが、
うっかりhoge = 1234 とアクセスした日にはローカル変数への代入になってしまいます。
そんなのはdef hoge=の仕様でattr_accessorもメタプログラミングで省略しているだけだし、
他の言語に慣れているだけだろう、RubyはRubyだと言われればそうかもしれないです。
>>604-605 DRY優先はRubyというよりもRailsのポリシーかと。
# 最近はRubyプログラマにも影響あたえていて、after rails時代の・・・というように言われているような
>>607 を書いていて思ったのですが、
もしかしてPythonは、属性に近い形でアクセス出来るアクセサみたいなもの(プロパティやRubyのdef hoge=のようなもの)
は使わないんですかね?
初心者じゃないんだから少しはマニュアル嫁
>>601 >>606 ありがとうございます。寝てしまっていてすみません。
勉強不足でデバッグが出来るとは知りませんでした(まだ方法も調査中ですが)。
投げたところは書き方が分からなかったのでとりあえず見ておきます。
スレッドじゃなく直呼び出し版
http://codepad.org/a3tUizvI 10回やって再現せずでした。
# 出かけてしまうので夜までここは見れません。
611 :
610 :2010/10/12(火) 08:18:46
補足です。 THREAD_COUNTを10000にしたものを10プロセス並列で呼び出しました。 1回やって再現せずです。ほんとに出かけます。
>>609 プロパティデコレータってのみつけた。サンクス
613 :
610 :2010/10/12(火) 22:32:45
>>601 >>606 帰宅しました。いろいろとありがとうございます。
一応書き込めるようにはなったはずです。が、正直怖くて仕方がないので
できれば引き続き対応をお願いしたいです。
IDLEでデバッグする方法はなんとなく分かりましたが、デバッグとおっしゃって
いたのはpythonバイナリをgdbでという話なんですね。正直お手上げです。
可能なことはしますのでお申し付けください。
ココから先は有料です
# オナニーをするので15分間ここは見れません。
ワッフル ワッフル
自分でgdbを追ってみても判りませんでした。。。
で、Pythonのバグトラッカを当たってみたところ、subprocessは現在のところスレッドセーフではないようです。
次のコードのように、プロセスの起動はシングルスレッド、プロセスとのやり取りはマルチスレッドにすれば、
ちゃんと最後まで実行できるようになりました。
http://pastebin.ubuntu.com/511839/
>>617 じゃあ、multiprocessingを使ってみるとか
2.6以降だけど
>>618 確かに、threading + popen の代わりに、 multiprocessing + os.exec も行けそうですね。
>>620 pythonのこういうとこってちょっと鬱陶しいよねw
optionがあって、optparserがあってとかw
いや、下位互換性を確保するのもpythonのいいとこなんだが…
>>617-621 そこだったのですか。さすがです。
IssueとやらもPopenで検索してサラっと流し読みしたけど思いっきり通過してました。
原因を読む限り再現しなかったケースがよくわかりませんがその他の要因に基づく
タイミングの違いなのでしょうね。
子プロセスの生成とスレッドの終了待ちは同一スレッド(メインスレッド)でということで
これで気兼ねなくパイプが使えそうです。ありがとうございました。
> 子プロセスの生成とスレッドの終了待ちは同一スレッド(メインスレッド)で あ、join関係なかったです。すみません。
>>617-621 結局実際に使う段においては、worker部分にロジックが入り、スレッド
生成前に生成する生成する子プロセスが未定だったため件の方法は
使用できず、泣きながらIssueとsubprocess.pyを見てから
http://pastebin.ubuntu.com/512307/ のようにcommunicate()を展開してPopen()とwait()をグローバルな
ロックで挟むことにしました(とりあえず動きますが正しいのか自信はあり
ません)。
multiprocessingも検討したのですが、書いたコードが実際どうなるのか
よく分からなかった(共有メモリ/PIPE/引数などの授受)のでexecしていい
ものかどうか分からず、とりあえずパスしました。
fromってなんだよ from A import B と import A.B って違うの?importに統一して
伝えとくわ
>>625 from A import B だと、現在の名前空間の中に B だけを import します。
import A.B だと、現在の名前空間の中に A だけを import します。
後者とただの import A の違いは、後者の書き方は A という名前空間の中に B を import しておくという違いがあります。
A/__init__.py と A/B.py があった場合、 import A は __init__.py だけを "A" というモジュール名でロードし、
import A.B だと B.py も "A.B" というモジュール名でロードし、Aの中に "B" という名前で追加します。
結果、 A.B というアクセスが可能になるかどうかという違いがあります。
ただし、 A/__init__.py が中で import B していた場合、 import A しただけでも A の中に B が import されるので、
A.B というアクセスが可能です。
import os
os.path.exists('/')
で import os.path と書かなくていいのはそのためです。
きちんと理解するには、一回パッケージとモジュールを作って見ることをお勧めします。
630 :
624 :2010/10/14(木) 07:48:29
>>625 調べたサンプルがそうなっていたので使いました。
fromを使うと、subprocess.PIPEがPIPEと書くだけで済むので便利です。
とりあえず今回のコードで
import subprocess.Popen
とかしてみましたが、そんなモジュールありませんと怒られました。よく分かりません。
from hoge import * は名前空間を壊すから出来る限り避けたほうがいい from hoge import fuga と明示した方がいい
632 :
624 :2010/10/14(木) 08:23:40
>>631 了解しました。
fromは長くなりすぎるときだけに限定し、またfromで*は使わないようにします。
633 :
625 :2010/10/14(木) 09:59:07
>>628 レスさんくすです
わかったような、わからないような・・・
>>629 ちがうのか?正解を3行でよろ
>>630 fromの件は私が勉強中、気になって書いたつぶやきで、
君の質問に難癖つけてるわけではないよ。お気になさらずに。
大ざっぱ from Aライブラリの中の import Bクラスなどを指定してインポ(アクセスするのにBだけでいい) from Aライブラリの中の import *全部をインポ(定数書いたファイルに使うと便利) import A.B Aライブラリの中のBクラスなどを指定してインポ(アクセスするのにA.Bと指定する) fromと書いた所の名前を省くイメージ importは省けない
ライブラリAとBがあって、両方とも名前の衝突はないとして、 AとB両方を名前空間Xに置こうと思ったら、どうすればいいの? import A as X import B as X じゃ、XはBで上書きされてしまう。
オシッコがしたくなったときはどうすればいいの? このままじゃ漏れちゃう///
>>635 ファイルをを噛ませて両方from A import *しておくぐらいしか思いつかないな
ま、そんなしょぼい方法聞いてるんじゃないんだろうけど
>>635 普通のasは新しい名前空間(=モジュールオブジェクト)は作らずに、なんと言う名前でimportするかを指定するだけだけど、
それは新しいモジュールオブジェクトを作りたいの?
試してないけどこんな感じじゃないかな。
def get_merged_modules(name, mods):
import types
X = types.ModuleType(name)
for mod in mods:
mod = __import__(mod)
for n in dir(mod):
setattr(X, n, getattr(mod, n))
return X
なるほど。そういう感じになるのですね。 PyQt4でQtCoreとQtGui両方importするときに そのまんまの名前だと長いし、QtCoreとQtGuiの違いなんて意識したくないし、 グローバル汚すにしては量が多すぎて気が進まないし、 どっちもQtって名前でimportできたらいいなーと思ったのですが。 可読性が高くて気軽な方法ではできなさそうですね。
で?
で?
ど?
技術書ってそんなに力んで読むものじゃないと思うんだけどな
世の中には ・隅々までむしゃぶりつくように読み尽くすべき本 ・必要なときに必要な場所だけ読めばよい本 ・読まずに捨てたほうが良い本 がある
>>640 ワラタ(www
現実的な計画も立てられないダメな子は、無駄に分厚い糞本を選ぶんだな(ww
つか、1週間でって言っても、まるまる暇な人とほとんど時間取れない人がいるのに。 その差を考えずに1週間でできるとか書かれてもねぇ。 Pythonを使えるようになりたいのなら、どの章も1日で、とか考えなくていいから、 ・ mutableとimmutableの違い ・ iterableなオブジェクトとその使い方 ・ Pythonにおいて、classがいかに仕事してないか あたりは理解できるまでコード書け。
はじぱいは漬け物付けるのに使った方がいいな。 おいしい漬け物を食べるとモチベーションが上がる。 あの無駄な重量は鈍器としても活用可能。 自分を殴って眠気を吹っ飛ばすのに最適。
4版は1200ページくらいあるからな。日本語化が楽しみだ
最低でも2分冊だろ。
今なら電子版4edが$39.99だよ
>>640 1週間でとか、はてなブックマークのためのタイトル釣りみたいなものだろw
1200ページもあったらマニュアルより詳しく書いてあるの?
オライリーもいいけど好きな事しながらWebドキュメント読んでりゃ自然学習できるでしょ 俺は土方的な学習より、哲学本やエッセイ読んでる方が10倍は充実すると思うなあ・・
一行目は同意だけど 二行目は意味が分からない
具体的にプログラム組むつもりじゃ無いのにプログラミング言語学習しようったって_。 でも、求人票には出来る人とか書いてある。 辛いねぇ。w
仕事は選ばれるな、ここは日本だ
実際プログラミングして開発してるより、プログラミング系読み物読んでるほうがおもしろい
ttp://blog.livedoor.jp/kikwai/archives/51563628.html >■恥知らずな「練習問題」
>
>1.Pythonを使うメリットを6つあげてください。
>2.Pythonを利用している有名な企業、団体を4つあげてください
>3.Pythonに欠点があるとすれば何ですか?
>4.Pythonを使うとどんなことができますか?
>5.import this は何のためのコマンドですか?
>6.この本のコード例に"spam"という言葉が出てくるのはなぜですか?
>『初めてのPython 第3版』P.20 『1章の練習問題』より
>
> 正直、コレを見たときには、目の前が真っ暗になった。
> 1.2.は、まるでPythonの『いやらしい』宣伝ではないか。
> 全く以て、著者の品性を疑うしかない。
> さらにこんなモノをど初っ端から見せられたら、Pythonを知らない人に「なんて下品な言語/コミュニティーなんだろう」と誤解かねない。
これって本当なの?
まあ本が云々の時点で、土方屋さんとしか取れないけど
こんな練習問題必要ないだろ、ってならわかるけど 品性がどうとかは意味が分からない
初めてのPython aka 恥パイって意味がやっと分かった
ちなみにそれには7問目もあって問題は 7. What is your favorite color? 答えはもちろん Blue. No, yellow!
Pythonジョークが分からない
>>662 モンティ・パイソンファンじゃない限りこっちの方が意味わからないよなw
読者の反応どうこう言うならこっちを取り上げるべきだ
それとも日本語訳には訳注が付いてるのかな
はじめてのPython いいタイトルだよねwww
それなら「はじめてのC」に勝てるプログラミング言語は無いと思うけど。
>>662 気になって調べてみた。
結局谷底行きじゃねーか!
もう「はじめて」も「初めて」も恥パイでいいじゃん
さすがにその二つを一緒にするのはないな
はじパイはオライリーだし、永らくPythonの由緒正しい入門書として認知されているしな。 かくいう俺は、”Python入門”、”Pythonプログラミング”で入ったので、 恥ずかしいことにはじパイ読んだことがないw
>>659 その本のこれPython流のジョークなんじゃないのか
言語名もモンティ・パイソンからとったなんて自体が軽いジョークなのになんというか
はじpy=はじめてのPython 恥py=初めてのPython、オライリー(w
くだらないことが気になって投げ出しておりましたが、このたび出戻りさせていただきました。 お答えいただければ嬉しいです。 PythonにおいてGUIアプリを製作して配布するとします。 この際に相手方にPython実行環境がない場合、何らかの方法を用いてパッケージにする必要があると思うのですが、 どのようなGUIライブラリを用いてそれを行うのが最適でしょうか? OSはWindowsに限定しても構いません。 もしよろしければ「ゲーム」「ユーティリティ」それぞれの観点からご意見いただければ幸いです。 手軽に組めるということに重点を置いておりますので、速度面に関してはそれほど気にしません。
wxPython+py2exe PyQt4でもたぶん出来る
うん、wxかqtだね。 py2exeは、WindowsのMSVCRTのWinSxSでハマってマニフェストとかで苦労したくなければ、 まだPython2.5を使うべき。 マニフェストは本当にもっと使いやすくなって欲しい。。。
>>676 ,677
回答ありがとうございます。
軽く覗いただけですがwxPythonの方が洗練されているかな?
Python本体は何も考えず2.7を入れてしまいましたが、ちょっといじくってみます。
Pygameみたいなゲームライクに特化したものも、用途的にあれば嬉しいと思ったのですが、
こちらはwx/qtほど安定していたり評判がいいものはないのでしょうか?
2DゲームライブラリならSDLのPygameしかないよ それとその言い回しが不愉快
ゲームならVPythonも良いらしい
PyObjC(2.2)で質問。というかもしかしたらCocoaの方で聞いたほうがいいのかもしれないが... マウスオペレーションをPython側から操作したいんだけど、以下のコードを実行しても座標0,0に飛んでしまう import objc bndl = objc.loadBundle('CoreGraphics', globals(), '/System/Library/Frameworks/ApplicationServices.framework') objc.loadBundleFunctions(bndl, globals(), [('CGWarpMouseCursorPosition', 'v{CGPoint=ff}')]) CGWarpMouseCursorPosition(( 500 , 500 )) 本当は500,500に飛びたいが上手くいかない このプログラムのおかしい点or 代替できる手段はないだろうか
683 :
681 :2010/10/18(月) 17:34:37
自己解決 適当にサンプルコードググって、v{CGPoint=ff} を v{CGPoint=dd} にしたら動いた 意味はわかってないのだけど... まあ動くしいいか
>>679 ,680
検索してみましたが2D=Pygame, 3D=VPythonがベター?
言い回しはなんか慇懃無礼に感じたってことかな、失礼
普段2ちゃんでも大人しいスレにばかりいるのでちょっと感覚が……
ノベルゲームを作りたいんですけどPygameがいいんでしょうか・・・?
>>686 ノベルゲームだったら、無理にPythonを使うより、
差し障りなければ吉里吉里なんかの方が手軽で高性能な気も
tkinterが便利だと思う
>>689 pythonに慣れて、後で作りこんでいくと言う野望があるので。作るだけだったらキリキリの方を選ぶかもしれません。
>>691 同士がいるのですね!活用させて頂きます。
本当にくだらない質問なんだが、 joinが文字列に属するべきかリストに属するべきかみたいな議論はよく聞くのに、 len,min,max,int……あたりがグローバル関数状態なのはどうしてなんだ? だから悪いって訳じゃなくて、事情とか経緯とかあるん? それが許されるんなら join(list, str) とかでもいいじゃんと、新参的には思うんだけど(希望はしない)
まあintは関数っつーよりコンストラクタ(type型)だけどね。 > join(list, str) とかでもいいじゃんと from string import joinしてみ。
>>693 厳密に言うなら、str.joinやstring.joinはあくまでも「文字列の」連結だから、文字列のメソッドor関数なのにたいして、
lenは任意のコンテナ型に対する操作だし、min、maxは任意のイテレータに対する操作なので、
具体的な型に直接ヒモづかない。
intはそもそもただの関数じゃなくて型だから。
Python3.1 で PostgreSQL とのインターフェースで何かモジュールないでしょうか? いまpy-postgresqlってのを使ってるんですが、日本語ドキュメントがまったくなく、接続はできた感じなんだけど、 どうやって1行づつ読み取ればいいのか困ってます。
>>696 psycopg2を使うのが良いと思う
Djangoでも推奨されてるから
Django PostgreSQLなんてググレば色々でる
ただそうなると3.1っていうのは今のところ・・・
じゃんご厨ウザイ
文句あるなら代替案を示せよヽ(`Д´)ノプンプン
2でおk
>>693 >join(list, str) とかでもいいじゃん
おれもそう思う。こっちのほうが自然だよな。
>>703 strのメソッドにしたほうが書くのが楽。
「○○の方が自然」と思うのはただの先入観。 sep.join(seq) と join(seq, sep) のどちらでも良いなら、楽な後者が良い。
あえて理由を挙げるとすれば、ユーザー定義文字列型で join を実装することができるので、
sepが組み込み型かユーザー定義かにかかわらず sep.join() という書き方で統一できる。
一方、 join(seq, sep) は、 sep と seq の組み合わせごとの挙動を全て把握しないといけない。
事前に全ての文字列のjoin方法を知ることはできないから、len()と__len__()の関係に習って
文字列型のほうに __join__() を実装しないといけない。
(string.join はこれを行っていないので、事前に知っている組み込み型にしか対応できない)
__xxx__ メソッドを用意させるか、それとも定型的な名前を採用するかは、
その操作がどれくらい一般的な型に対して適用できるかに依存する。
たとえば、イテレータはすごく汎用的だから iter()/__iter__() だけど、
list.sort() とか dict.items() とかはmutable sequence型とかmapping型に限定されるから
ただのメソッドになってる。 str.join() はこちら側。
705 :
704 :2010/10/20(水) 12:05:52
s/楽な後者が良い/楽な前者が良い/ s/定型的な名前/(__で囲わない)普通の名前/
なんだけど、その一般性って曖昧だよね。 例えばイテレータに対して使うnext()は、2.xではタダのメソッドで、3.xでは__next__ こうなるのは、正直どっちがいいかってすごく微妙だから。 readメソッドは、file.read()、StringIO.read()やらurllib.open().read()やら、 ファイル関係の抽象化に広く使われてるけど、__read__とはなってない。 いっそのこと、__len__もやめて、str.len()では駄目なのか?
引数に名称で「str」とか使えないのもちょっとね
使えるよ、弊害はあるけど
>>707-708 def func(str, str_t=str)
とでもしとけば「str」を変数,「str_t」をstrクラスとして使えるんじゃない?
__builtins__.__dict__['str']
SDKはすでに入れてるんだよな?
>>711 "appcfg.py update"はGoogle App Engine LauncherのDeployボタンでも同じことが出来る
それ以外はコマンドプロンプトで
python "C:\Program Files\Google\google_appengine\appcfg.py" ほげほげ
C:\Prog...は自分がSDKをインストールしたディレクトリに置き換えてね
>>712 入ってます
>>713 ありがとうございました
なるほど基本はコマンドプロンプトですね? わかりました
ところで その他のコマンドコンソールって何に使うものなんですか?
GoogleAppEngineLauncher でいいよ それに GAE スレあるからそっち行こうよ
>>714 こういう説明って他の言語でも使うからcmd.exeで説明されてる場合が多い
応用が利くっていうか、まぁ基本になってる
そのぶん「みんな知ってるだろ?」的に説明が省かれてて初心者殺しだったりするw
コマンドプロンプト 環境変数 カレントディレクトリ
とかで検索してみればいいんじゃない?
やってる事はどれもめちゃくちゃは変わらなくて
それぞれ専用ソフトとして作ってるからちょっと工程が省けるってイメージ
>>717 なるほど、だいぶ整理できてきました。あっちこっちにコマンドコンソールがあってどれもがエラー出すので困ってましたが
うまく行くときはどれでやってもうまく行くわけですね。
とりあえずbatファイルでいつでも環境変数読み込んで起動できるようにしておきます。ありがとうございました。
>>718 自分が書く.batは↓こんな感じ
set path=%Path%;C:\Program Files\Google\google_appengine\;C:\python25
cd /d C:\Documents and Settings\〜とかロードしたいファイルが入ってるフォルダまでのフルパス
cls
cmd.exe
まぁ他にも見てる人がいるだろうから詳しく書くと
set path=%Path%;は環境変数を追加で;記号を間にはさんでパス繋いでいく
cd /dはカレントディレクトリをフルパス一発でセット
clsはちょっと表示がうるさいから画面のクリア
最後のcmd.exeは画面即消え対策として子プロセス立ち上げ
これをテキストに書いて.bat拡張子に変更してダブルクリック
考えてみたらPythonもスクリプトだったので.pyでやってみた # -*- coding: utf-8 -*- import os os.chdir("C:\Documents and Settings") os.environ["PATH"] = "C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Google\google_appengine\;C:\python25" arg = ["/k"] os.execvp("cmd", arg)
c:\pythonXX\scripts もいれといて
>>721 ブートストラップという言葉を思い出した
質問です。 Linuxである商用ソフト(hogeと以下呼びます)を使っています。 hogeを使うために、hogeがインストールされているディレクトリにパスをとおす必要があります。 コマンドライン上で source /opt/hoge/hoge_path と実行してやると、hogeの実行形式hoge_execにパスがとおります。 今、pythonからhoge_execを呼び出して処理をしてやる必要があり、そのスクリプトを書いています。 パスを通すという操作もpythonスクリプトの中で行っておきたいのですが、どのようにすればいいのでしょうか。 コマンドラインから実行するコマンド(lsなど)は commands.getoutput("ls") などすればよいことがわかりましたが、 commands.getoutput("source /opt/hoge/hoge_path") とスクリプトの中に書いても それ以下の行で commands.getoutput("hoge_exec") としてもhoge_execが実行されません。 hoge_execへのパスが通っていないようなのですが、どのようにすればよいのか教えていただけませんか? よろしくお願いします。
import sys sys.path.append() sys.path.insert()
>>725 >>> import commands
>>> commands.getoutput("echo $$")
'16619'
>>> commands.getoutput("echo $$")
'16620'
……ってことだ。わかるな?
725じゃないけどそういう実装になってるんだ。へぇ
1行に複数のコマンド書けばいいじゃない linuxならセミコロン windowsのコマンドプロンプトなら& コマンド1 ; コマンド2 ; コマンド3 コマンド1 & コマンド2 & コマンド3
2ch は心の荒んだ人の溜り場だな
LLバトルロワイヤルスレなくなったの?pythonスレに変なのいるけど
>>726 >>727 試してみたのですが、
sys.path.append()
sys.path.insert()
の場合、カッコの中に直接パスを指定してやる必要があるように思います。
sys.path.append()
sys.path.insert()
では無理ではないでしょうか。
hoge_pathは、これ自体がスクリプトになっていて、
source /opt/hoge/hoge_path
とやると、hoge_pathの中でLinuxかUNIXか、やCPUの種類などを判定するなどして
最終的なパスを決定し、反映するようになっているようです。
このような場合、
うんこ
どうすればよいか教えていただけませんか。
>>735 sys.path = commands.getoutput("source /opt/hoge/hoge_path ; echo $PATH").split(':')
とか思ったけど、ダメかなぁ?
sys.pathはPythonのモジュール検索パスで、
>>725 が言っているのは環境変数PATHだから、
sys.path に対する操作は無意味。
パスを通す操作はPythonより前でやるのが無難。
どうしても中でやりたいなら、 getoutput("source /opt/hoge/hoge_path; hoge_exec") と毎回やるとか、
>>738 みたいにして source 後の $PATH を取得して、それを os.environ['PATH'] に格納してから
getoutput("hoge_exec") しないと。
getoutputはシェルにコマンドを送ってそっちでやってもらうという命令なわけだけど
>>727 で指摘されたようにgetoutput命令ごとに別のプロセスになるんで、
一つ目のgetoutput(スクリプトを読むプロセス)で設定したパスは
二つ目のgetoutput(起動プロセス)ではスクリプトの内容がキレイさっぱり消えてしまってる
だったらgetoutput一つの中でコマンドをセミコロンで繋げて
スクリプト読みと起動を一行でやったらいいじゃない、と
>>729 で書かれている
ここで聞くべきかどうかわからないんですが質問させてください 学校のpythonの課題を家でやろうとしているんですが windows上でpythonからMySQLはどのように使えばいいのでしょうか すこし調べたところwindows上でできそうな方法がなかなか見つかりませんでした… OSはwin7でpythonは2.7です
まったくこれっぽっちもオススメできないが、俺はPopenでmysqlコマンドを叩いた(←バカ)。 ODBCでも専用のモジュールでもいろいろありそうなもんだけど、調べたことないな。
まず仮想マシンを立ち上げます
744 :
727 :2010/10/27(水) 21:26:21
>>735 試してみますとかレスしてるから「もしかして解ってないか?」と危惧してたんだが、
解ってなかったか……。
「commands.getoutput("echo $$")を実行すると毎回違う文字列(シェルのプロセスID)が
得られる。つまりgetoutput()は呼び出す度に新しくシェルを起動している」ってのが、
オレが
>>727 で指摘したかったことだ。
もっと噛み砕いて説明すると
>>725 のコードでは、最初のgetoutput()に起動されて
hoge_pathスクリプトを実行しているシェルと、次のgetoutput()で起動されて
hoge_execを実行しようとしているシェルが「別のプロセス(=別の環境)」になっているから、
前者でパスを通したって後者には影響が及ばないのがうまく行かない原因ってことだ。
だから「どうにかして一つのシェルに環境設定と実行をやってもらう」コードを書けば解決。
他の人が提案しているようにセミコロンでつなげてgetoutput()してもいいし、
ちょいと捻って↓みたいなやり方もできる。
from subprocess import *
p = Popen(["/bin/bash"], shell = False, stdin = PIPE, stdout = PIPE)
p.stdin.write("source /opt/hoge/hoge_path\n")
p.stdin.write("hoge_exec\n")
p.stdin.write("exit\n")
output = p.stdout.read()
Pythonで課題出すならMySQLじゃなくてsqlite3使えよと思った とりあえずWindows MySQL Python でぐぐればごろごろ出てくるぞ
python用のMySQLdbを教えてもMySQLがインストール出来ませんとか言い出しそうだし面倒だから関わりたくない
mysqlの最初の設定はすっげー手間取った
748 :
741 :2010/10/27(水) 23:19:11
いろいろありがとうございます
>>745 一応一通り見たんですがpython2.7のものだと.tar.gzのやつしか見つからず…
それで何とかインストールしてみようともしたんですがうまくいきませんでした
バージョン落としてやったほうがいいんでしょうか
VirtualBoxとかでUbuntu使えば?まあこれもホストとのフォルダ共有とか設定が面倒か
>>748 落として動くならそうする
動作報告がある組み合わせでやってみたほうが良いよ
752 :
741 :2010/10/28(木) 00:31:29
>>750 >>751 ありがとうございます
>>751 さんのやり方だとどうしてもsetup.py buildってところでエラーをはいてしまってできませんでした…
いまpythonを32bit版の2.5に落としてインストーラーでやってみたら接続できたのでこれでやってみようと思います.
ありがとうございました
>>741 学校と互換性のある環境つくらないと意味ないと思うけど。
パスワードはMUMBLEだろ?知ってるぞ
PythonでGUIを勉強しようとなると どんな本やWebを参考にしたらいいのかなぁ… はじPyとみんPyとPythonスタートブックは持っています 仕事上でロガーで収集したCSVファイルを料理して吐き出す程度のレベルしかありません
Tkinterを勉強し始めました
とりあえずTkinterでいいんじゃない? 標準で付いてるし とりあえず対話モードで import Tkinter Tkintet.Tk() って書くだけでもウインドウ出る
>>758 ありがとうございます。了解です。
あともう一つすみません…
Tkinterの専門誌みたいなのあれば教えていただきたいのですが…
きっかけ作りに何がいいかお願いします。
あ間違えてる import Tkinter Tkinter.Tk()
Tkinter専門本はないと思う サイトはそのまんまググったらすぐ出てくるよ
これだから土方は・・Tkinterに本なんていらん 必要になったらググって脳内コピープログラミングしてれば済む 本格的なGUIならTkinterは覚えるだけ無駄、WxかQtでいいよ
スレタイとテンプレ読めない人キター
Tkinterについてのすばらしいサイトがあるから困らない。お気楽なところ。
初心者にはwxがオススメ 本格的に使いたいならQt Tkは古い
Tkinter は初心者向けじゃないし本格的な用途にも向かないね 中途半端すぎる
WxPythonは強いオブジェクト指向で好きだわ。 PyQtは関数型言語臭くて中途半端なイメージ
PyGtkってダメなの?あんまり聞かないのですけれど…
>>769 ほぼ同意だけど wxPython はイベントの扱い方がちょっと不満
>>769 PyQt++
WxPython はうんこ。
pysideってのがライセンス的にもいい鴨
PyQtが嫌われる理由は第一に汚染ライセンスと Pythonにあまり馴染みのないgrammeの事 PyGTKは使ったことないがライセンスも問題なく自由らしいな。 Wxはほぼ自由でPythonicな文法をたくさん使うことになるので コーディングも面白いが大規模だとそれが作業となり疲れてくる
GUIは出来るだけやりたくない
PyGtkは知らんがGTKは糞
>>774 じゃあPySideは?
Qtの開発元がライセンスを緩めてもらうようPyQtの開発元に交渉したけど決裂して作り始めた
LGPLなPyQt互換ライブラリ。
文法は、最近のはconnectの気持ち悪さはマシになってる。
C++的になんでもかんでもsetXXXが必要なところとか、
obj.getFoo().bar()
みたいなところとかは、変わってない。
tkinterの何が悪い!
お、GUIの話題が 結構まともに動いているPythonのGUIソフトと言えば、 TortoiseHgやDropboxのクライアントが思い浮かぶけど何のライブラリつかってるんでしょ。 BazaarはQtだっけ?
DropboxはwxPythonみたいだな
bzrのwindosパッケージに入ってるのはqbzrっていうPyQt製のGUIツール TortoiseHGはGTKだったけど、Windowsでは問題が多くてQtに乗り換え中。 Dropboxはwxだけど、GUIはそもそもすごく簡単な設定画面だけで、シェル拡張とかは別。
標準で付いてくるからtkinter使ってるわ
>>776 参考までに教えて頂けたらと思うのだけど
どういうところが?
何と比べて?
できれば具体的に
>>781 ナイス
・Bazaar qbzr: PyQt
・TortoiseHG: GTK->Qt
・Dropbox: ws (シェル拡張は別)
エラーメッセージを全部取得するにはどうすればいいんでしょうか? f = open('testfile', 'r') 上のコードで存在しないファイルをopenしようとすると、以下のようなエラーがでます。 Traceback (most recent call last): File "./test/test.py", line 15, in <module> f = open('testfile', 'r') IOError: [Errno 2] No such file or directory: 'testfile' 今、以下のようにtry文で分岐させてエラーメッセージの各項目を取得しようとしてるのですが… try: f = open('testfile', 'r') except Exception, inst: print inst x = inst[0] y = inst[1] print 'x =', x print 'y =', y # z = inst[2] # print inst[2] 上のコードの実行結果は、以下のようになってしまいます。 [Errno 2] No such file or directory: 'testfile' x = 2 y = No such file or directory 変数instには「[Errno 2] No such file or directory: 'testfile'」がセットされているのに、 どうして個別の項目を取り出そうとすると「2」と「No such file or directory」の2つだけになってしまうんだろう? 「: 'testfile'」の部分は、変数instのどこに含まれているんでしょうか? inst[2]を取り出そうとすると「IndexError: tuple index out of range」とエラーになります… python-2.5.2をbash上で使っています。
print inst.filename
787 :
785 :2010/10/30(土) 00:18:54
help(inst)もあるか
help(IOError)
791 :
785 :2010/10/30(土) 00:50:51
>>785 print inst したときは、 str(inst) で取り出した文字列を表示してる。
inst.__str__() が、instの中身を文字列に変換するメソッドで、 str() はそれを呼び出しているだけ。
793 :
785 :2010/10/30(土) 04:04:44
関数の中で自身の関数名を参照できないでしょうか?
エラーメッセージの頭に関数名を表示しようとしています。
def myopen(path):
try:
f = open(path, 'r')
except Exception, inst:
sys.stderr.write('%s: open failed: %s %s\n' % (
'関数名', inst.__class__.__name__, inst))
path = 'testpath'
myopen(path)
以上のコードを実行したときに、'testpath'は存在しないファイルパスでエラーになるとして、
myopen: open failed: IOError [Errno 2] No such file or directory: 'testpath'
とエラーメッセージの頭に関数名「myopen」つけて表示したい。
これをどんな名前の関数でもそうなるようにしようとしています。
C言語のプリプロセッサでいう__FUNCTION__に相当するようなものがあればいいんですがpythonにはないでしょうか?
クラスの名前ならself.__class__.__name__で取り出せたのですが、これの関数版やメソッド版はないでしょうか…
関数の外でならmyopen.__name__で「myopen」とう名前を取得できたんですが、これを関数の中でどんな名前の関数ででも自身の名前を取得したい…
785と同じですがpython-2.5.2をbash上で使っています。
>>792 遅くなりました、ありがとうございます。調べる際の取っ掛かりにできて本当にありがたいです。
traceback見れば自分がいまどの関数の中で例外吐いたかは判る
>>> import sys >>> import traceback >>> def fun(): ... try: ... hoge=fuga() ... except Exception, e: ... print traceback.extract_tb(sys.exc_info()[2], limit=None)[-1][2] ... >>> def abc(): ... fun() ... >>> abc() fun
796 :
785 :2010/10/30(土) 05:25:30
>>795 すごい…こちらでも関数名取得できました
ありがとおおおおおおおおおおおおおお!
このスレで聞いて見て良かったです。
797 :
785 :2010/10/30(土) 06:09:49
traceback.extract_tb(sys.exc_info()[2], limit=None) の部分なんですが、例外を発生させた最初の関数が最後の要素に入るみたいです。 なので、関数の呼び出しが深いときは別の名前が出力されてしまう… fuga()をつくってその中でraiseしてみました。 def fuga(): raise def fun(): try: hoge = fuga() except Exception, e: print traceback.extract_tb(sys.exc_info()[2], limit=None)[-1][2] def abc(): fun() abc() 上のコードの実行結果は「fuga」になりました。自分の環境だけかもしれません… 添字の-1を0にして最初の要素を参照するように、 traceback.extract_tb(sys.exc_info()[2], limit=None)[0][2] とすれば関数の呼び出しがいくら深くても「fun」が出力されました。 もしかすると、こちらを意図されていたのでしょうか? 自分の説明不足+考えすぎかもしれません、すみません。 python-2.5.2を使っています。
>>> import sys, traceback >>> def fuga(): ... raise Exception('fugafuga') ... >>> def fun(): ... try: ... hoge = fuga() ... except Exception, e: ... l = traceback.extract_stack(f=None, limit=None) ... for t in reversed(l): ... print t[2], ... >>> def abc(): ... fun() ... >>> abc() fun abc <module>
こうすると良い感じ >>> import sys, traceback >>> def fuga(): ... raise Exception('fugafugafuga') ... >>> def hoge(): ... fuga() ... >>> def fun(): ... try: ... h = hoge() ... except Exception, e: ... for t in reversed(traceback.extract_tb(sys.exc_info()[2], limit=None)): ... print t[2], ... print ... for t in reversed(traceback.extract_stack(f=None, limit=None)): ... print t[2], ... print ... >>> def abc(): ... fun() ... >>> def de(): ... abc() ... >>> de() fuga hoge fun fun abc de <module>
>>797 >添字の-1を0にして最初の要素を参照するように、
>traceback.extract_tb(sys.exc_info()[2], limit=None)[0][2]
>とすれば関数の呼び出しがいくら深くても「fun」が出力されました。
>もしかすると、こちらを意図されていたのでしょうか?
>自分の説明不足+考えすぎかもしれません、すみません。
>>793 のケースだとエラーになったファイル名だけ判ればいいからそれでもいいけど
>>797 では実際に例外を出しているのは fuga() の中だから
現実には fun の位置じゃなくて fuga の位置を得たい状況になる場合もあるよ
(例外処理を上書きして握りつぶしてしまうとバグ取りがやりにくくなる)
なので
>>799 みたいに上からも下からも追いかけられるようにした方が良いかもね
801 :
797 :2010/10/30(土) 07:40:22
>>798 −800
逆もたどれるのか…勉強になります。
ご指摘頂いた点、慎重に考え実装してみます。
ありがとうございました!
キチガイのいる本スレより役に立つな
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘
>>804 django のデバッガはよくできてる
>>805 django のデバッガはよくできてる
>>806 django のデバッガはよくできてる
おまえらおれの質問に答えろや
おまえは誰や?
俺や
http://twitter.com/yukihiro_matz/statuses/29317109670 yukihiro_matz: 英語圏でRubyとPythonを比較する記事を見ることが少なくなってきた
のは、RubyとPythonでクラスタが分離してきたからか。逆に日本語でRubyとPythonを
比較 する記事を見かけるのは国内でのPythonの地位が向上したからか。
∩_
〈〈〈 ヽ
____ 〈⊃ }
/⌒ ⌒\ | |
/( ●) (●)\ ! !
/ :::::⌒(__人__)⌒:::::\| l
| |r┬-| | / <こいつ最高にアホだお
\ ` ー'´ //
/ __ /
(___) /
∩_ 〈〈〈 ヽ ____ 〈⊃ } /⌒ ⌒\ | | /( ●) (●)\ ! ! / :::::⌒(__人__)⌒:::::\| l | |r┬-| | / <こいつ最高にアホだお \ ` ー'´ // / __ / (___) /
winXP(C:)と7(Q:)をデュアルブートしてて、7でPython使いたい Python プログラミングをする上で、ルートがC:ドライブじゃない場合不具合とかってある?
なんで、金持ちのクセにデュエルしたがるのかなぁ… 別々に2台のPCを使った方が、ラクチンだと思うんだけどなぁ… あ、キーボード・マウス共用はするべきか。
用語が無茶苦茶だな
海馬社長AA禁止
デュアルとデュエルをかけてるのかガチで勘違いしたのかどっちだ インストーラがCと決め打ちしていて動かないことはよくある 他にも多少の手間が生じる可能性は否定できないけど そもそもWindowsの単一のルートを持たないファイルシステムが終わってるので そんな気にしなくてもいいんじゃないかとも思う
> インストーラがCと決め打ちしていて動かないことはよくある そんなことあるのか。 業務用のライブラリとか?
???
ディストリビュータがシステムパスを動的に取得できない場合は直指定つってんだろ
Cじゃないとダメなインストーラは、要はレジストリのPythonPathの設定を 見ていないのだろうから、Cじゃないとダメどころか、フォルダも想定してる 場所じゃないとダメだろう 俺はDの適当な場所に入れてるけど、そういうひどいのに当たったことは一度も無い もっともいつもsetup.pyで、インストーラ使ったことはほとんど無いのだがw
それはdistutils固有の話じゃないのか
>>823 Pure Python なライブラリーなら気にすることない。
>>825 ああいや、Python本体も自分でビルドしてるし拡張も大抵は
自分でsetup.pyでビルドしてるんだ
だいたい、パスまで決めうちされたら、複数バージョン(2.xと3.xなど)は
共存できないよね
そういう糞は無視でいいんじゃないの
>>824 Win32 API に依存するライブラリーを作って、
Wix とかのディストリビュータで Windows インストーラを作って配布する時の話。
>>827 そうね。パス決め打ちでインストールされても、site-package に突っ込めば動くのが多い。
windows だと easy_install で foo.msi とかでインストールするやつとかもある。 Windows Installer のバージョンが古いと MSI は動かない。 だから古い OS でも動作するようなインストーラを作るとなると、 ディストリビュータは限られる。 古いディストリビュータはシステムパスを動的に取得できないのもある。 だから c: 決め打ちになっちゃう。 Windows 2000 移行対応ってのが多いのはそのせい。
>>813 7で立ち上げたときのpythonパスをC:にすればそのまま使えるだろう
下のような感じで、Cythonで作ったクラスのオブジェクトの変数を、Pythonのソースからソートしたいのですが どうしたらいいですか? #ball.pyx cdef class ball: cdef: object R def __init__(self,r): self.R = r def get_R(self,): return self.R #main.py import random,ball,operator ball_list = [ball.ball(random.random()) for i in range(100)] ball_list.sort( key = operator.attrgetter("R") ) ### エラー文 AttributeError: 'ball.ball' object has no attribute 'R'
ググれかす
>>835 ググった結果
#ball.pyx
def __getattr__(self,name):
return self.R
これで、とりあえず実行は出来ました
で、変数増えたらどうすればいいんだろ…?って状況でした
>>836 ありがとうございます
無事出来ました
OK PIL
841 :
デフォルトの名無しさん :2010/11/03(水) 15:25:28
なぜ関数名の先頭に数字を使えないんだろう… なんか積極的な理由があるのかな?
バーサーの実装がややこしいから
843 :
デフォルトの名無しさん :2010/11/03(水) 15:46:47
モジュール名も先頭数字だめなのかな?くだらない質問で本当にごめん
あと数値リテラルと混ざったら可読性が下がるからじゃないかな?
>>841 0x1234 なんて関数を定義されたらややこしいだろ?
846 :
841 :2010/11/03(水) 16:52:37
http://www.python.jp/Zope/intro/instant_python_jpの インスタントパイソンを読んでみたりしてるけど
そもそもプログラムがクラッシュしたかどうか
どうやってわかりますか?
x = input("Please enter a number: ")
print "The square of that number is", x*x
をtest.pyにコピペして保存してダブルクリックしてみたけど
何か入力したら一瞬で黒い画面が閉じる
その後どうしたらいいですか??
コマンドラインからやれば分かるよ PythonのPath通してから python test.py
最後にinput("Please press Enter")とか付け足せばいいんじゃない
>>848 Pythonのpathを通すというのは具体的にはどういう作業ですか・・・?
パイソンの場所をどうこうするって事ですよね・・・?
コマンドラインというのは
インストールしてあるpython(command line)でいいんですよね?
>>853 普通のコマンドプロンプトを使う
python(command line)ってやつじゃなくて
ファイル名を指定して実行 -> cmd cd C:\XXXX\XXXX # test.pyのあるディレクトリ・フォルダを指定 python XXXX.py
>>854 ありがとうございます!!出来ました!!
ありがと〜♪~♪ d(⌒o⌒)b♪~♪やった〜! ボク以下の能力の人類がやって来たじゃなイカ!
海に帰れ
859 :
デフォルトの名無しさん :2010/11/05(金) 00:07:48
Pygameのページがリンク切れしてるんだけど、手に入らない?
www.pygame.orgなら見えるけど?
Pygameのページとは何ですか?
859じゃないが俺も見えない。経路障害かもね。
863 :
859 :2010/11/05(金) 00:18:00
Pythonでゲーム作るときに便利なモジュールらしい。
使ってみたいんだがどうやってもダウンロードできない。
>>860 ダウンロードできそう?
経路障害じゃなくて名前解決が出来ないみたい。IPアドレス直打なら行けるんじゃ。
866 :
859 :2010/11/05(金) 00:22:43
>>864 ごめん。詳しくないからちょっとわからない;
>>865 だったらリンク切れってわけではないのか。
急に本スレ並みにレベル下がったな
869 :
859 :2010/11/05(金) 00:45:47
870 :
838 :2010/11/05(金) 21:33:49
874 :
838 :2010/11/05(金) 22:33:40
ありがとうございます。無事いんすとーるできました!
>>870 このダウンロードページ、さっさと消せばいいのに
トップを見に行ったら案の定壊れてたw
まあ問題の日本語環境用インストーラは今となっては老害みたいなものだからな 消しても無問題
python.jp からはダウンロードするなとおじいちゃんが言ってた
俺なんて予備知識もなく 日本ユーザー会的なデザインのサイトからはインストーラを拾うなと感が働いて その当時最新版でおすすめのPython 2.6を選ばずに2.5でライブラリマンセーしてたんだぞ
まあ必要とする人もいるかもしれないから 本家のドキュメントみたいに"Deprecated"とか"廃止"とかって 大きく表示しとけばいいんじゃないかな
たしかどっかのページに 現在は日本語対応出来ているので わざわざ日本語環境用インストーラとか 日本語CODECとかダウンする必要ありません って書いてあったページを見たことがある
こういうところにも日本でpythonが流行らない原因があるのか
ドジャンゴ臭がしてきたなこのスレ
ダンジョーは他のサイトのことdisってないで自分のこと心配しろよ(wWwwWWwwWWWwww 温泉でケツマンコボルってる場合じゃないだろ(wWWwWWWwww
どうぞ本スレで俎上にのせて好きなだけやってください ここは電池の本数を競うスレではありません
日本のドジャンゴはサーバのメンテする人もいないし 翻訳も古くて役に立たないから塩まいて近寄るなってばっちゃんが言ってた
自分がダメなことの理由を他者に求めるのはクソ
python.jp は django 温泉じゃなくて Zope 温泉でそ
風俗用語か!
風俗用語か!
効用パラダイスですねわかります
なんで django 嫌いなの? 俺あれすごい好きなんだけど。
今のdjangoは昔のZopeの匂いがする。
895 :
デフォルトの名無しさん :2010/11/06(土) 05:05:26
もっと具体的に言うと? ↓
せっけんの香りがします Zopeだけに
897 :
デフォルトの名無しさん :2010/11/06(土) 05:55:19
zopeland
エクストリームバカの香りがする
>>898 いじるなよ、また沸いて出るだろ(wwww
class Foo: a = '' b = '' foo = Foo() foo.a = u'あいうけお' foo.b = u'かきくけこ' この後、JSON形式で {"a":"あいうえお","b":"かきくけこ"} というような形でファイルに書き出したいのですが、 どうする方法がスマートでしょうか。(python2.6系です)
foo.__dict__
{'a': u'\u3042\u3044\u3046\u3048\u304a', 'b': u'\u304b\u304d\u304f\u3051\u3053'} になります… {"a":"あいうえお","b":"かきくけこ"} とファイルに出すにはどうすれば良いでしょうか?
>>> import json >>> print json.dumps(foo.__dict__, ensure_ascii=False) {"a": "あいうえお", "b": "かきくけこ"} >>>
import json class Foo(object): a='' b='' foo = Foo() foo.a = u'あい' foo.b = u'か\'"き' foo.__dict__ {'a': u'\u3042\u3044', 'b': u'\u304b\'"\u304d'} json.write(foo.__dict__) u'{"a":"\u3042\u3044","b":"\u304b\'\\"\u304d"}'
905 :
デフォルトの名無しさん :2010/11/06(土) 14:13:07
ありがとうございました
>>903 有難うございます。出来ました。
ちなみに、
Fooクラスのインスタンスのリストfoolistを持つクラスBar、
というような、少し複雑な構造のものも同様にJSON形式で出力することは出来ないでしょうか?
そのままだと、
print bar.__dict__
すると、
{'foolist': [<__main__.Foo object at 0x100449f10>]}
と出力されてしまいますし、
json.dump(bar.__dict__)しようとしても
TypeError: <__main__.Foo object at 0x100449f10> is not JSON serializable
と言われてしまいます…。
>>906 def fook(obj):
isinstance(obj, Foo) or isinstance(obj, Bar):
return obj.__dict__
return obj
json.dump(bar, default=obj)
ってやってみて。
908 :
907 :2010/11/06(土) 14:44:43
間違えた、 print json.dumps(bar, default=hook) ね。
おいおい1から10まで全部他人から聞く気かよ。自分で勉強して分からない部分だけ聞けって。
910 :
838 :2010/11/06(土) 15:08:43
>>910 vi .cshrc
は、「viというエディタを使って.cshrcを編集しろ」ってこと。
で、.cshrcファイルの中で
setenv PYTHONPATH :/usr/local/lib/python2.5/site-packages/PIL
と書けということ。
つまりWindows+サクラエディタでその2行を丸写しにしても まったく意味ないということ
>>910 インストーラでPILを入れたならPYTHONPATHの設定は必要ない
914 :
デフォルトの名無しさん :2010/11/06(土) 17:16:53
おまえら基地外相手にすんなよ
>>915 そのサイト糞だから参考にしない方がいいよ
917 :
838 :2010/11/06(土) 22:29:44
えっ・・・ じゃ・・・他に参考になるサイト教えて頂けませんか?
>>918 なんでwxなの?mypaintってPyGTKだよ?
>>918 ありがとうございます。やってみます!!
>919
リロ忘れ・・・
>>918 じゃだめってこと??
922 :
838 :2010/11/06(土) 23:01:50
ああああ >920=>921=>838です
924 :
838 :2010/11/07(日) 10:12:57
pygtkを使えるようにしたいんですが
http://www.pygtk.org/downloads.html このページのPyGTK→2.6→pygtk-2.6.3-1.win32-py2.4.exe
でいいですか?
翻訳ソフトの和訳
Windows(あなたは、パイソン・ダウンロードでそれを得ることができる)ページのためのパイソン通訳。
GTK+実行時。我々は、あなたが公式GTK+包み(gtk+-bundle*.zipファイル)を用いたそれをインストールすることをおすすめする。
ちょっと利用できる最新版を選びなさい。
完全にこの束をインストールするために、あなたはフォルダでuncompressにその内容を必要として、手でごみ箱サブフォルダをシステム経路に加える。
PyGTK、PyCairoとPyGObjectモジュール(このサイトから利用できる、ちょうど関連続く、そして、一番最後のバージョン選ぶ)。
彼らをダウンロードするとき、あなたはPyCairo、PyGObjectとPyGTK版が対応するパイソン通訳版に合ったことを確認しなければならない、
そして、あなたには比較的最近のGTK+実行時がある。それらの拡張を構築するのに用いられるパイソン版は、インストーラー名で書かれる(例えばパイソン2.6のための『py2.6』)。
あなたがあなたのPyGTKアプリケーションを開発するのを援助するための偉大な仲間は、空地ユーザ・インタフェース・デザイナーである。
926 :
838 :2010/11/07(日) 10:28:59
>925 ごめんなさい インストールしようとしたら インストールできない、パイソン2.4が必要である みたいな事言われたので いまのパイソン2.6を2.4でインストールし直して きます
>>926 Python2.6とPython2.7用のPyGTKインストーラがあるよ
そのページに書いてあることをよく読んで自分で探せ
928 :
838 :2010/11/07(日) 10:56:05
>>927 うわあああありがとうございます!!
よく読んだらGTK+ runtimeが必要って分かりました。
さらにGTK+をインストールする前にcygwinなるものも必要でした・・・
本当にすいません出直してきますOTL
>>928 Cygwinはいらないよ
もう一度落ち着いて辞書引きながら
>>924 のURLを嫁
PyGTKを動かすのに必要なものが書いてある
930 :
838 :2010/11/07(日) 13:03:54
↓手持ちの翻訳ソフト+超意訳だけど訳してみた。 PyGTKダウンロード PyGTKをインストールしよう! マイクロソフトウィンドウズ用PyGTK PyGTKをWindows上にインストールするために、必要なもの: ・ウィンドウズ用パイソンインタプリタ(パンソンダウンロードページから取得できる) ・GTK+runtime 公式GTK+バンドル(gtk+-bundle*.zipファイル)を用いたものをインストールすること推奨する。 すぐに利用できる最新版を選びなさい。 完全にこのバンドルをインストールするために、フォルダを解凍して、 手動でbinサブフォルダをシステムパスに加える必要がある。 ・PyGTK、PyCairoとPyGObjectモジュール (このサイトから利用できる、このリンクの一番新しいバージョンを選ぶ)。 これらをダウンロードするとき、PyCairo、PyGObjectとPyGTK版が対応するパイソンインタプリタの バージョンに合ったことを確認しなければならない。 比較的最近のGTK+runtimeがある。それらの拡張を構築するのに用いられるパイソンのバージョンは、 インストーラー名で書かれる(例えばパイソン2.6のための『py2.6』)。 PyGTKアプリケーションを開発するのを援助するための偉大な仲間は、 Gladeユーザ・インタフェース・デザイナーである。 より詳細な方法はPyGTK FAQを参照。
>>929 ありがとう、先走ってCygwinインストールしてしまったOTL
と言うわけで、必要なもの
Python2.6(インストール済み)とgtk+-bundle*.zip(解凍済み)と
2.6用のPyGTK、PyCairoとPyGObjectモジュールを見つける事が出来たけど
gtk+-bundle*.zipの「手動でbinサブフォルダをシステムパスに加える必要がある。」の部分は
何をすればいいのでしょうか?
解凍した中にbinというフォルダーがあったので
それをどうのこうのということなんでしょうか?
だからまずは自分で調べろよ このスレでもちょっと前にパスの設定の仕方の話が出てただろ 死ね
>>930 そんな程度の翻訳わざわざ貼らなくたって。
934 :
838 :2010/11/07(日) 13:28:23
>>932 正直、何をどう調べたらいいのか皆目見当もつかないという・・・r(y
>>851 の環境設定の事ですか?
ヒントありがとうございます!!
935 :
838 :2010/11/07(日) 13:41:01
はっきり言おう GTKは糞 もう一度言う GTKは糞
938 :
838 :2010/11/07(日) 14:52:15
>>915 の何が悪いんだろうかと思って
最初は画像の場所の書き方が悪いんだろうかと思いましたが
パイソンコマンドラインで
import Image
im = Image.new( "RGB", ( 480, 360 ), ( 0, 0, 0 ) )
im.show()
を一行づつ手入力しても
同じくwindowsフォトギャラリーが開くだけで
「画像またはビデオが選択されていません」とでます。
てっきりPILのインストールが出来ていないのかと思いましたが
パイソンコマンドラインでimport PILをやっても
エラーメッセージが出ませんでした。
すいません、ヒントだけでも教えて下さいませんでしょうか???
>>935 は口先だけかと小一時間
頑張って読んでどうしても分かんなかったら質問しる
>>938 環境は?
64bitだと色々問題があるみたいだけど
pythonから使えるGUIの決定版がそろそろ決定したはず おしえろ
python関係ないからスレ違い
>>938 http://www.pythonware.com/library/pil/handbook/index.htm >show
>im.show()
>Displays an image. This method is mainly intended for debugging purposes.
>On Unix platforms, this method saves the image to a temporary PPM file, and calls the xv utility.
>On Windows, it saves the image to a temporary BMP file, and uses the standard BMP display utility to show it.
>This method returns None.
im.show() 使う香具師は馬鹿
>>942 逆に考えるんだ。wxWidgets, Qt, gtk といったGUIプラットフォームにまだ決定版が無いけど、
そのGUIを使う言語は C++/Python が決定版になったんだ。
pyside
HTML + JavaScript
>>940 windows vista 32bit
python2.6
PILfor2.6
>>941 最初の質問者の解決法
import Image,os
img = Image.open(r"D:\FLundhNoNude.jpg")
os.startfile(img.filename)
だと確かに動きましたが
根本的にwindowsフォトギャラリーが待たないってところから先がまったく意味が分からないです・・・
>>944 和訳してみたけど殆ど意味がわかりませんOTL
もしかしてWindowsではBMP表示用に設定されているソフトが起動するよって事ですか?
windowsフォトギャラリー以外のソフトを設定しておけばいいってことですか?
show
im.show()
イメージを表示する。
この方法は、主に目的をデバッグすることを意図とする。
Unixプラットホームで、この方法は当面のPPMファイルにイメージを保存して、
xvユーティリティーを呼ぶ。
Windows上で、それは当面(テンポラリ)のBMPファイルにイメージを保存して、
それを示すために、標準的なBMP表示ユーティリティーを利用する。
この方法は、何も返さない。
OSの知識が足りないと何をしようと思っても苦労するよね
>>949 動かない理由なら
>>941 の下の方に書いてあるが
>>949 を理解することが
>>838 を解決する上でなんか意味あるの?
Vista以上ではImage.show()はうまく動かない。それだけのことじゃないか?
952 :
838 :2010/11/07(日) 23:16:40
>951 アドバイスありがとう! 動かない、でいいですよね! ていうか、Pythonをやろうと決めてから数日たっても まだろくにプログラム作れないとっつきの悪さ (英語のみしか参照できるところが無いせい?) が日本でなかなか広まらない原因だろうか???
数日でプログラムがスラスラ作れるようになる言語があるなら 教えて欲しいわ
>>942 ライセンスに問題さえなければ、PyQt4で何も悪いことはない気がする。
>953 例えばvbsやバッチファイルはすぐコピペでなんとかできるよね。 まあ、インストール不要っていうのもあるし 解説サイトも多いからすぐ書けるようになるよね。 こういうレベルの話でごめんね。
>>955 それは"書けるようになる" と言えないんじゃwwwww
コードが読めた上でコピペするのと、
何も読めないでコピペするのって、全然違う。
>>952 im.show('mspaint')とかim.show('iexplore')とかでもダメだった?
vista持ってないから知らないけど。
> ていうか、Pythonをやろうと決めてから数日たっても
> まだろくにプログラム作れないとっつきの悪さ
> (英語のみしか参照できるところが無いせい?)
> が日本でなかなか広まらない原因だろうか???
自分の能力不足を、言語のせいにしないでくれ。
WxかQt、ほかよりはTkでいい WxとQtはぜんぜん違うから好みでいいよ 俺はWxが大好き、Qtはライセンス以前の問題で大嫌い
>>957 だめでした。
>956
まあ、解説サイトに説明があるから
全て理解しなくとも
すぐに理解して改造とか欲しい機能だけ
組み合わせる事も簡単だよねって程度の意味なんだwww
Windows7使ってるけど普通にShowメソッドで画像でますが?
961 :
838 :2010/11/08(月) 00:07:18
そのShowは環境によっては動かない あくまで簡易なデバッグ用の手段として用意されてるだけなので 動作しなかったらしなかったで仕方ない程度の代物 どうしてもShowしたければ自分で適当に似たものをでっちあげたらいい Imageインスタンスをファイルに書き出して そのファイルを好きなイメージビューアに読ませるだけの簡単なお仕事だ
フォトビューアーはDLLで実装されてるのか。 そりゃすぐに処理が戻るはずだわ。
おれ Tkinter はあまり好きじゃないけど GTK 使うくらいなら Tkinter 使う方がまし
>>951 うち Vista で Fireworks デフォにしてるけど
im.show() でちゃんと Fireworks 開いて表示されるお
>>961 >>838 のアホさ加減から言うと
やみくもにごちゃごちゃいじって
OSの設定壊してるんだろうな
>>962 ありがとう!インスタンス出来るようになったよー!!
ファイルビューアーに読み込ませる方法はまだわかんないけど
朝に比べたら格段に進歩した!!
971 :
838 :2010/11/08(月) 01:57:54
>>968 =
>>838 インスタンスじゃなかった・・・IdentifyだったOTL
今度こそじっくり勉強する・・・おやすみ
おまえら 1 日 1 レスを絶やすなよ! もっと本気だせよ!
oltu.py 72,6824,5600,2400 byte 02/08/04
つーかね、次スレ建てるの早すぎ
980超えるとdat落ちする
だから970ぐらいで次スレ建てればいいだろ
ここでまた誘導か、すまんね。
あと21レスくらい埋めなさい
980 :
デフォルトの名無しさん :2010/11/11(木) 20:58:42
( ゚∀゚)o彡°おっぱい!おっぱい!
なんでpyてょんには++が使えないの
983 :
838 :2010/11/11(木) 23:08:32
>>981 昨日、本屋でpythonの本買ってきて読んでるところ。
ププッ
なんか838さんは行動の人っぽいね 俺なんかぱいてよnインスコするのに随分色々サイト見てからインスコした気がする IDE使うのか使わないのかとかTKにすんのかとかQTにすんのかとか その辺は俺よか全然パイソニックってことなんだろうな ここくだすれなのに騒ぐ奴多いね せめて黙ってることは出来んのか
何を基準に言ってるのか、そもそもそういうのは 匿名でないコミュニティでやって欲しいわけだが 本スレでもこのスレでもPythonの本なんてネタ扱いされるし IDEなんて過半数が使ってないしTkとQTを迷うって どういう思考回路と知識を持ったらそんな事が言えるのか理解し難い つまり長文書いてないで埋めなさい
長文には長文で返すとインテリジェンスに満ちてるように見えるわけですね埋まります
>>986 随分と凝り固まった頭してんのな
ツールの選択なんて状況によるだろ
Pythonの本で悩むのがloo.py GUItoolkitを悩むのがPythonic IDEかエディタか悩むのはDOSer
くだらない質問は匿名でないコミュニティでやれってことでFA?
まぁ、ネタ質問にマジレスするバカ(ジエンだろうけどさ)が居る事が問題なんだけどね。
ここはおまえらの込み入った事情を抜きにして 質疑応答される場だから質問側が配慮しろって事だろ どうしてもならメイン州に住む天才サイキックのジョンスミスさんに聞いてね
ここの無能に質問しても仕方ないよ
今日の夕食: 梅茶漬け
まず朝食を決めた方がいい
ここのつまらん質問にイラッとすることはないが ここのつまらん返しにイラッとすることは多い
埋めてることすら気づかないどんぱい
金曜って国会ある? APECは土曜から連日見れるみたいだけど 11日の予算委は温すぎて途中で見るの嫌になったけど 今回は10日の小泉孝太郎自民党議員の質問が最大の山場だったなあ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。