現在実行中のモジュール名は__file__で取得できますが、 メソッド名を取得する方法があれば教えて下さい。
self.__class__.__name__,traceback.extract_stack()[-1][2]
>>397 ありがとうございます。
オブジェクトではないので、
import traceback
traceback.extract_stack()[-1][2]
でいけました。
行番号は traceback の方が精確だな
>>396 便乗。
log(__file__,traceback.extract_stack()[-1][2],self.__class__.__name__ )
みたいに使って、クラス名を入れたいんだけど、
class宣言していない場所で使うとエラーになるので、
そういった箇所でもエラーにならない方法があれば教えてください。
log(__file__,traceback.extract_stack()[-1][2],self.__class__.__name__ if dict().has_key('self') else None)
dict() じゃなかった log(__file__,traceback.extract_stack()[-1][2],self.__class__.__name__ if locals().has_key('self') else None)
>>403 サンクス!
引数の中でifが使えるのね。
>>397 log()を埋め込むメソッド毎にimport tracebackを入れないといけないようですが、
これを省略する方法がないでしょうか?
そのifはステートメントじゃなく演算子だから勘違いすんなよ
実行時情報からクラス名を所得する *完全な* 方法はなかったはず、
loggingモジュールでもサポートされてないし。
基本的なクラス・メソッドでは期待通りでも、その他の細かな状況で期待通りにならない。
例えば、メソッド内で作った内部関数では期待しない表示になる。
http://ideone.com/j41yD # 3.3だと qualname 導入で、ネストした場合の名前表示にも対応できるかもしれない。
>405 log()の中の方で import traceback traceback.extract_stack()[-2][2]
>>408 流れを知りたいモジュールA〜K.pyと
log表示用モジュールZ.pyは別ファイルです。
なのでAのメソッドaaaに入れるには
import traceback
import Z
log(__file__,traceback.extract_stack()[-1][2],self.__class__.__name__ if dict().has_key('self') else None)
と3行必要ですよね。
その他のメソッドbbb等沢山あるので、これを一行にできないでしょうか?
Cythonで関数をインライン展開する場合ってどうすればいいんですか?
413 :
デフォルトの名無しさん :2012/08/22(水) 14:51:34.97
先日よりPythonの勉強をしております。 Pythonの前はPHPの勉強をしていたのですが、その時にPHPにあった便利な機能と同様なものがPythonにないか調べていたのですが、わからなかったので質問させて頂きます。 PHPではHTMLのformの値を受け取る際に、 <input type="text" name="ckdata[]"> のようにすると、ckdataを配列として受け取れるのですが、Pythonではそのようなことはできないでしょうか? <input type="file" name="file[1]"> <input type="text" name="text[1]"> <input type="file" name="file[2]"> <input type="text" name="text[2]"> <input type="file" name="file[3]"> <input type="text" name="text[3]"> のように、ファイルとファイルの説明文をユーザが自由な数追加して送信できるようにしているのですが、それをどのように処理すればいいか悩んでおります。 宜しくおねがいします。
datetimeとdateを比較する方法って、どうするのがいいんですかね。 now = datetime.now() today = date.today() now.year == today.year and now.month == today.month and now.day == today.day やっぱりこんな方法しかない?
>409 log()の中の方で ^^^^^^^^ import traceback traceback.extract_stack()[-2][2] ^^^^
>>414 now.date() == today
事故れす
>>414 datetime型にdate()というメソッドがありました。
now.date() == today
これだけ。
419 :
デフォルトの名無しさん :2012/08/22(水) 18:57:32.37
パイソンはマジでオワコン 初心者は別の言語を習得することをオススメする PHP辺りがオススメだ 今からパイソンやるのは時間を無駄にするようなもんだ
saltだけでどうやってセキュリティ確保するんですか? リリース前にテストすらしてない馬鹿作者さん。
421 :
413 :2012/08/23(木) 12:48:56.53
そういった機能がないときはどのように処理をしようかと自分で考えてみて以下のようなコードを書いて見ました。 import re di = { "file_file[0]": "file0", "file_file[1]": "file1", "file_file[2]": "file2", "file_title[0]": "title0", "file_title[1]": "title1", "file_body[2]": "body2", "file_file[41]": "file41", "file_body[1]": "body1"} file_property = {} for key, value in di.items(): key_match = re.search( "file_([^\[]+)\[(\d+)\]", key) if not file_property.has_key( int(key_match.group(2))): file_property[int(key_match.group(2))] = {} file_property[int(key_match.group(2))][key_match.group(1)] = value print file_property ディクショナリの値にディクショナリを持たせたい場合、上のように一々ディクショナリを代入する必要があるのでしょうか? もっと効率のいい方法や、よく使うやり方などあれば教えていただけると助かります。
馬鹿には無理
も
firefox ってメモリリーク多すぎてたまらんな
>>413 Web系の話題なのでWebプログラミング板へどうぞ
CGIかなとは思うけど、どのフレームワーク/ライブラリ利用してるのか等、
環境を詳しく書かないとレス着き難いと思うよ。
>>421 のケースでは、一般的には collections.defaultdict が使えるけど、
CGIの話題だとしたら、標準ライブラリの cgi モジュールでもパラメータをリストで受けるのはサポートしてる。
>>421 collections.defaultdictをもうちょっと工夫するとお望みのものに。
from collections import defaultdict
def newdict(): return defaultdict(newdict)
d = newdict()
d['a']['b']['c'] = 1
print d['a']['b']['c']
427 :
デフォルトの名無しさん :2012/08/24(金) 02:26:52.30
help()で出力されるものと同じ文字列を取得したいのですがどうすればよいでしょうか
help(re) re.__doc__
なんやこれ?
pydoc.plain(pydoc.render_doc(obj, 'Help on %s:'))
すみません。横からですが、 どのように考えていくと正しい解答に辿りつけるのでしょう? 私も興味があったのでhelp(help)で調べると This is a wrapper around pydoc.help (with a twist). とありpydoc.pyのhelpメソッドが出てくる箇所を読んでいたのですが、 見当外れだったようです。 help(pydoc)でFUNCTIONSを読んで関係ありそうなものを見る…?? ものの調べ方が分からないというアホな質問ですが、ご教示いただけると幸いです。
OS X 10.8、python2.7.2の環境でtkinterのEntryを使っているのですが、日本語入力が出来ません。 コピペすれば日本語をEntryのテキストボックスに入れることが出来るのですが、 どうやってキーボードから日本語を入力するのでしょうか。
ファイルの読み込みに関する質問です。 text.txtというファイルがあり、その内容は以下のように単純なものです abc def ghi そこで、次のようなコードを書きました testfile = open("test.txt", "r") testdict1 = {} for t in testfile: print t testdict1[t] = 1 print testdict1 すると、forループ内のprint結果は、それぞれabc, def, ghiと正しく出力されたのですが print testdict1の出力結果が {'def\n': 1, '\xef\xbb\xbfabc\n': 1, 'ghi': 1} となり、abcの文字列の前に不要なものがついてしまいました。 これはなぜでしょうか。
434 :
433 :2012/08/24(金) 16:24:24.72
インデントがおかしくなりました コード最終行の print testdict1 はforループ外です
>>433 エディタでBOMなしのUTF-8で保存するように設定して
UTF-8NとかUTF-8(BOMなし)みたいに名前が付いてると思う
なお"\xef\xbb\xbf" はこのファイルはUTF-8ですよっていう印(UTF-8 BOM)
でもこういう問題が起こるから大抵は使わないほうがいい
別に変な質問じゃないだろ
つかutf-8は規格上は無いんだけどな どこかの技術力が足りない毎月パッチ出してる企業の人間がやり始めたんで迷惑極まりない
規格上はBOMは無い、ね 少し抜けた
馬鹿には無理
>>431 Pythonの初心者向けの解説にdocumentをきちんと書きましょうね、
>>> re.search.__doc__
'Scan through string looking for a match to the pattern, returning
a match object, or None if no match was found.'
こんな感じでmethod毎のdocumentを参照することもできますよ。
みたいなことが初心者に示されてた。
Pythonはこういう便利なことに対してきちんと誘導しているよ。
初心者用の説明をきちんと読みましょう。
>>439 > どこかの技術力が足りない毎月パッチ出してる企業
それなりのソフト売ってる大抵の企業に当てはまりそうだ (w
>>430 ありがとうございました。無事取得できました。
>>435 返事が遅くなり申し訳ありません
BOM無しで保存すると、正常に動作するようになりました。
文字コードや使われ方について再度勉強しなおします。有難うございました。
馬鹿にとってはBOMB
.. ''';;';';;'';;;,., おっぱい!おっぱい! ''';;';'';';''';;'';;;,., おっぱい!おっぱい! ;;''';;';'';';';;;'';;'';;; ;;'';';';;'';;';'';';';;;'';;'';;; _ vnm_yvwnym_vynmyn_vy、 _ ∩(゚∀゚)彡(゚∀゚)彡(゚∀゚)彡_ミ(゚∀゚)っ ⊂(゚∀゚ )彡と(゚∀゚ ) ⊂ミ (゚∀゚ )っ (゚∀゚ )つ ゝ⊂彡(゚∀゚ )っ _ ∩ (゚∀゚ ) .(ミ⊃ r し u ミ⊃ r⊂(゚∀゚ )彡 ⊂彡 i_ノ┘ . i_ノ┘ ヽ ⊂彡 しu (⌒) .| 三`J
449 :
デフォルトの名無しさん :2012/08/29(水) 07:03:06.39
おっぱい〜〜〜〜! おっぱいおっぱい! おっぱいおっぱいおっぱい! 二二二二l \ │ / | | ∧ ∧ / ̄\ ∧∧ | | ( ゚∀゚ )つ─◎ ─( ゚ ∀ ゚ )─◎ ( ゚∀゚)つ─◎ | | /´ ̄し' ̄し' \ /// /´ ̄し' ̄し' \ ///. /´ ̄し' ̄し' \ ///  ̄ ̄| 、_人_ / 彡 ◎  ̄ | 、_人_ / 彡 ◎ ̄ ̄ ̄| 、_人_ / 彡 ◎ ̄ | _) ◎彡| | バン | _) ◎彡.| | バン | _) ◎彡.| | パン | ´`Y´ | | バン | ´`Y´ .| | バン | #`Y´ .| | パン t______t,,ノ t_______t,ノ t_____#t,ノ _______________________________
おっぱい! おっぱい! おっぱい おっぱい! おっぱい! おっぱい! ∩ ∩ ノ) おっぱい! おっぱい! 川 ∩ 川彡'三つ おっぱい! おっぱい! ⊂ミ∩、⊂ミ∩彡⊃ おっぱい! おっぱい!⊂三ミ( ゚∀゚)彡三彡三⊃ おっぱい! おっぱい! ⊂彡川⊂彡川ミ⊃ おっぱい! おっぱい!⊂彡川∪⊃ U川彡⊃ おっぱい! おっぱい! (ノ ∪ 川 ∪ミ) おっぱい! おっぱい! ∪ おっぱい! おっぱい! おっぱい! おっぱい! おっぱい! おっぱい!
...┏┓ .┏┓┏┓┏━┓ ┏┓ ┏┓ ┏┓┏┓┏━┓ ..┏┓ __ i⌒i ┏┛┗┓ ┃┣┛┗┫□┣┓ ┃┃ ┏┛┗┓ ┃┣┛┗┫□┣┓ .┃┃ ./ O Oヽ | ┗┓┏╋┳━━┫┣┓┏┻━┫┃ ┏┓┃┃ ┗┓┏╋┳━━┫┣┓┏┻━┫┃ ┏┓┃┃ 〈 |―/ | ノノ┏┛┗┻╋━┓┃┣┛┗┓ ┃┃ ┃┃┗┛ ┏┛┗┻╋━┓┃┣┛┗┓ ┃┃ ┃┃┗┛ ヽ. V ノ ...┃┃┏┓┃┏┛┃┃□┏┛ ┃┗┓┗┛┏┓ ┃┃┏┓┃┏┛┃┃□┏┛ ┃┗┓┗┛┏┓ ( ̄ ̄ ノノ ┗━┛┗┛┗━┻┻━┛ ┗━┛ ┗┛ ┗━┛┗┛┗━┻┻━┛ ...┗━┛ ┗┛
multiprocessingでプロセス間で状態を共有したいのですが managerで作ったオブジェクトを可変にすることってできますか? 例えば l = manager.list([0])とつくってたものを 他のプロセスで、状況に応じて l = [[1,1],[2,2]] みたいにしたいのですが
455 :
452 :2012/09/01(土) 00:57:47.94
すいません 書き方が悪かったので書き直します from multiprocessing import Process, Manager class TestClass(Process): def __init__(self, l): super(TestClass, self).__init__() self.l = l def run(self): count = 0 while count < 20: self.l = [2] count += 1 if __name__ == '__main__': manager = Manager() l = manager.list([0]) ss = TestClass(l) ss.start() print l ss.join() print l これで最後のlが[2]にならない理由がわからないのですが どうすればいいのでしょうか
class Shape(object): pass shape1 = Shape() shape2 = Shape() shape1.position = 1 shape2.position = 2 の状態で shape1やshape2またpositionという名前を(一括)取得する方法はないのでしょうか? あれば教えて下さい。
その「名前」を使って実際にどういうコードが書きたいのか示してみてくれ
>>455 while の所、 self.l[:] = [2] じゃない?
Pythonのfor文のinは、比較演算子のinと何か関係があるのでしょうか。演算子のオーバーロードなのか、疑問です。教えてください。よろしくお願いします。
for文の奴はステートメントの一部であって演算子でもオーバーロードでもない x in sequenceは演算子
462 :
デフォルトの名無しさん :2012/09/02(日) 16:24:43.20
ライブラリの見方で質問があります。 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]]) ってあった場合、hostとtimeoutを指定したい時はどう書くのですか? server = smtplib.SMTP("localhost", 120)とかしたら120がポートかなにかわからないですよね?
キーワード引数
蛇足ぎみだけど念のため SMTP("localhost", 120) # hostは"localhost", portが120 SMTP("localhost", timeout=120) # hostは"localhost", timeoutが120
465 :
デフォルトの名無しさん :2012/09/02(日) 23:50:29.20
ユニットテスト内でHTML5のバリデーションしたいんだけど、どうするのがベスト?
newf = x.index('e', f) list型の変数xでインデックスを取得する場合、 こうやって引数を二つ指定するとどうなるのでしょうか
>>466 マニュアル読もう
index(...)
S.index(sub [,start [,end]]) -> int
というわけでstartが探索の開始位置でendが終了位置
例えば "abcabcabc".index("c", 3) は 5 を返す
>>458 ありがとうございます!
l[:]にしたらできました
ところで
l =xとl[:]=xは何が違うんでしょうか?
>>468 それぞれのパターンでリストを変更してみれば分かる
>>470 >>> l = [1,2,3]
>>> l[:] = [2]
>>> l
[2]
>>> l = [1,2,3]
>>> l = [2]
>>> l
[2]
で変わらないと思ったのですが
それともmultiprocessingでの話でしょうか
変数の共有の話? >>> a = [1,2,3] >>> b = a >>> a[:] = [2] >>> a, b ([2], [2]) >>> a = [1,2,3] >>> b = [2] >>> a [1, 2, 3]
>>472 >>473 ありがとうございます
l[:]だと同じアドレスを指してくれるんですね
勉強になりました
476 :
デフォルトの名無しさん :2012/09/06(木) 08:32:46.57
Pythonを勉強していて不明なことがあり質問させて頂きます。 現在日記帳のような、テキストを保存していくプログラムの制作をしています。 データの保存形式をSQLiteのようなRDBで行うか、ShelveやPickleのようなPythonオブジェクトで行うか、CSVのようなテキストで行うか悩んだ結果、現在はShelvで行うようにしました。 そこで疑問なのですが、現在は1日に1件追加するかどうかなので、Shelveのファイル容量も大きくないので気にならないのですが、ShelveやPickleのようなPythonオブジェクトとして保存する場合は、プログラムでのロード時に全てメモリに読み込まれるのでしょうか?
馬鹿には無理
>>476 pickleはその通り。
shelveでは、バックエンドで選択されるdbmとプログラムの組み方次第。
データ取り出しは1件毎だけど、一旦読み込まれたデータはキャッシュされるので、
例えば、常駐型のプログラムでshelve.openしたまま開きっぱなしの様な使い方をすると、利用メモリは増加するはず。
wxpythonについて教えてください xrcで作ったダイアログの、あるコントロールの前にpythonから画像を追加したいのですが、どうやればいいでしょうか? xrcにあるtextCtrlやpanelは取得出来ています sizerが取得出来なくて、panelにはAddが無いしで困っています 的外れな質問だったらすみません
日本語で
馬鹿には無理
>>481 レスありがとうございます
まだ出来てません…
出来たらまた報告に来ます
ありがとうございました
>>412 ありがとうございます
やってみましたが、残念なことに実行速度は変わらなかったというか、微妙に遅くなった気がします
Python2.7で from test import pystone print pystone.pystones() という中身のhoge.pyをコマンドプロンプトで実行すると >python hoge.py (1.9339092849094406, 25854.36679484237) Pydevで実行すると (0.9808881658798508, 50974.210658511) となります。ロースペックなのは置いといて、2倍くらい差が出るのはなぜでしょうか
Pydevの方のコマンドラインは?
設定したのはPythonインタープリタだけですが…
お前が設定したのがインタプリタだけでも IDEは気の利いたオプション付けて実行してくれたりするんだよ そこをまず確認しろ
デフォルトですよ。どんなオプションが付けられてるんですか
話にならねえな
オプションは、どこで確認出来るんですか
デフォルトなんだろ そのまま死ね
実に、不快だ
デフォルトでは、オプションは付けられてないんですか? 2倍くらい差が出るのはなぜですか?
何怒ってんだよ pdbのせいだったりしない?
私の声がデムパになって 波になってあなたへ向かってく 私の歌がデムパになって 波になってあなたへ響いてく 私の愛がデムパになって 波になってあなたへ届いてく 私の電子回路が短絡する前に Electric LOVE Electric LOVE (∩ ゚д゚) アーアー この気持ちあなたに届くかな
djangoの質問もここでいいと信じてる アプリケーションを機能ごとに分割するのはわかる アプリケーションのディレクトリ内にmodels.py views,pyとかがあるわけだが 例えばWebAPIのラッパークラスを作るとき、models.pyに書くのが正しいのか?新しい.pyファイルを作ってしまうのが正しい? そもそもviews.pyなんて不要なんだからアプリケーションにするのが間違ってるのか
新しい.pyファイルを作ってmodels.pyからimport
┌──────────────────┐ | | │ _ ∩ | │ ( ゚∀゚)彡 おっぱい! | │ ( ⊂彡 おっぱい! .| │ | | | │ し ⌒J | │ | │ Now Oppaing. .... .| │ そのままおっぱいでお待ちください。 | └──────────────────┘
500 :
デフォルトの名無しさん :2012/09/11(火) 22:55:53.73
名前空間のことで質問させてください(python2.7系) 2つのディレクトリにmy名前空間があるとして次のように読み込むもうとしています。 sys.path[:0] = ['mylib','mylib2'] from my.config import MyConfig from my.log.parser import MyLogParser しかし、例えばmylib2にmy/config.pyがある場合、 mylibを探索した時点でImportErrorになってしまいます(mylib以下にはmy/config.pyは存在しない) 名前空間の名前(my)を変えれば問題ないことは確認したのですが、この挙動は変更できるんでしょうか? つまり、1つめのディレクトリにmy名前空間があってファイルが見つからなくとも 次のディレクトリのmy名前空間を探索するように。
501 :
デフォルトの名無しさん :2012/09/12(水) 02:58:23.04
SciPyのインストール方法について教えてください。 windows XPで python2.7.3を使っています。 SciPyをインストールしたのですが、ファイルにプログラムを書きだして、実行すると from scipy import * ImportError: No module named scipy とエラーが出ます。 一方で、対話型インタプリタで from scipy import * をするとちゃんと通ります。 原因がわかる方がいましたら、教えてください。
>501 SciPyはよく分からないけど、 前者の「実行」と後者の「対話型インタプリタ」は、それぞれどう起動したの? Pythonの環境が2つ入っているかも。 前者をファイルのダブルクリックで起動してるようなら、ファイルの関連付け確認。(CygwinやMinGWのシェルから起動してるなら、ファイル先頭行の#!の指定を確認) 後者を、単純にコマンドプロンプトからの>pythonで起動してるのでなければ、SciPyのインストール時に何か設定が入ったのかもしれない
馬鹿には無理
504 :
500 :2012/09/12(水) 10:32:41.37
>>500 の挙動ってたぶん、Pythonの仕様なんですよね?
けどインポートディレクトリ直下のディレクトリ(
>>500 ではmy)が同名っていうのは
それほど特別ではないと思うけど、どうなんでしょうか。
Pythonではなく、こちらの配置かなにか問題があるのかな?
./mylib/__init__.py
>>501 >>> import sys
>>> print('\n'.join(sys.path))
>>> sys.modules['scipy']
とやって実行結果の違いを比べるよろし。
507 :
500 :2012/09/12(水) 12:40:17.03
>>505 ありがとうです。PATHをとおしているmylibディレクトリには__init__.pyは不要と思うのですが
それぞれのmy/__init__.pyに以下の記述をして解消できました(python2.7)
※
>>500 のケースではmylib/my/__init__.pyのみでも大丈夫
try: __import__('pkg_resources').declare_namespace(__name__)
except ImportError: __path__ = __import__('pkgutil').extend_path(__path__, __name__)
お決まりのイディオムのようなので、今はよくわからないまま放置してますが
何をしてるのか後で読み込んでみますm(_ _)m
508 :
501 :2012/09/12(水) 16:23:42.20
ありがとうございます。
原因はPython2.7と3.2が入っていることでした。
>>502 ファイルをプログラムに書きだして実行するときは、コマンドプロンプトから、
cd "ファイルとあるディレクトリ"
python ファイル名.py
で実行するか、コマンドプロンプトにファイルをドラッグ&ドロップして実行していました。
対話型インタプリタはコマンドプロンプトから、pythonとうって起動していました。
おっしゃる通り、Pythonの環境が2つはいっており、Scipyを入れていないPython3.2が邪魔しているようでした。
Python3.2のフォルダを削除したら、エラーが無くなり、プログラムが通るようになりました。
ありがとうございます。
>>506 教えていただいた
>>> import sys
>>> print('\n'.join(sys.path))
>>> sys.modules['scipy']
をやって見たところ、
対話型インタプリタでは
C:\Python27
が出てきたのに対し、
コマンドプロンプトにファイルをドラッグ&ドロップで実行して場合は
C:\Python32
が出て、問題に気づけました。
ありがとうございます。
thread つくって、戻り値をちゃんと受け取るコードの書き方教えて。 分かりづらいかもしれないけど、下のような感じで。 th = thread(function=hoge) th.start() while not th.end(): time.sleep(1) result = th.result()
馬鹿には無理
自虐はやめろ
thread つくって while not th.end(): time.sleep(1) とか あほやろ
どう見てもサンプルだから time.sleep(1) なんだろ。
>>510 import threading
def hoge(result): result['foo'] = 123
result = {}
th = threading.Thread(target=hoge, args=(result,))
th.start()
th.join()
print result
戻り値はdictにしたけど、スカラー値じゃなければ単純にこれでいける。
どうしてもポーリングしたけりゃth.isAlive()がある。
つ Queue
クェゥェ
エキPyで、マルチスレッディングの話があったけど、あの部分はちょっと分からなかったな 確かにQueueの話も出てきた気がするけど
519 :
デフォルトの名無しさん :2012/09/14(金) 20:11:08.93
Pythonスタートブックの後には何を読めばいいですか?
>>519 読まずにプログラムを書き始めたほうがいい
実際に書いてみてわからないことが出てきたら何読めばいいですかって質問して
521 :
デフォルトの名無しさん :2012/09/15(土) 11:46:38.42
python って単一のバイナリーオブジェクトみたいのものって作れませんか スタティックリンクした C のバイナリ見たくライブラリ全部くっついてる感じ
>>521 .pyc/.pyo の事だったら .zip や .egg に纏めることが出来るよ。
実行ファイルだとしたら、外部ツールの領分。もしくは自分で実行ファイル作ってリソースを埋め込む。
一応作れるけど、ライブラリの構成によっては簡単には出来ないものもある。
.pyoがあるなら、.piyo.piyo なんてのもありますか?
>>522 ありがとう, 調べてみる
組み込み装置相手だと標準ライブラリ展開できないのが辛い
つか, 考えてみたら ldd みたく, 「このライブラリに依存しているよ」
情報を教えてくれるアプリでもいいのか
UPX
組み込み装置って言われると途端に怪しい スタンドアローン環境でとか言われると困る
py2exeとかのこと?
py2exeは1個にはならんのじゃないか ライブラリ名.zipの中にpyc固められるし
>>529 オプションで1個 (zipped) できる
PyCon JP 2012そこそこ盛り上がってるみたい
具体的には?
2日分の飯+おやつ+Tシャツつきで3千円はよかった 余った飯も貰って2人分食べた 講演はけっこう寝てましたすんまそんw
何しに行ったんだって感じだな 断ってよかった
まあでも品川だしな Rubyみたいに松江とかでされてもコマル
pyglet の質問していい?
原発銀座松江の空中放射線量はどれくらいあるんだ
>>536 どうぞー。ちなみに自分は使ってないからたぶん答えられない
(3, 9) + (4, 4) で、 (7, 13) を期待しているのですが、 (3, 9, 4, 4) になってしまいます。 正しくはどう書けば良いですか?
map(sum, zip(a, b)) とは書けるけど、 そういう演算がいっぱいあるならNumPyつかった方がいい。
!=と<>と、どっちがいつから廃止になったんだっけ? こんなところまでダイエットするとかすげえな、と聞いた当時思った
pythonのコードで<>なんて見たことないけど
numpy形式の配列をたくさん生成しているのですが,以前と同じものがあった場合は除去したいです 普通ならsetに追加していけばいいと思うのですが,numpyの配列はsetにいれることができませんでした. listに追加していき, in listで評価していってもいいのですが,とても遅くなってしまいます. なにかいい方法ありませんか?
numpy.unique
545 :
544 :2012/09/16(日) 23:57:52.09
そういう質問なの?
すいません 質問の仕方が悪かったです. やりたいことはこんな感じです numpySet = set() numpyList = [] while 1: a = numpy.array([random.randint(1,999)]) if not(a in numpySet): numpyList.append(a)
>>547 どう?
import random
d = {}
s = set()
for i in range(10):
r = random.randint(0, 10)
print(r)
d[r] = None
s.add(r)
print(d.keys())
print(s)
こっちの方がいいかな? import random d = {} s = set() for i in range(10): L = [] for j in range(2): r = random.randint(0, 3) L.append(r) print(L) t = tuple(L) d[t] = None s.add(t) print(d.keys()) print(s) nL = [list(x) for x in d.keys()] print('nL =', nL) print('len(nL) =', len(nL))
TypeError: unhashable type: 'numpy.ndarray' ____ / \ / _ノ ヽ、_ \ / o゚⌒ ⌒゚o \ ごめんね、ごめんね、ごめんね | (__人__) | いつもいつも迷惑かけて \ ` ⌒´ / ごめんね、ごめんね、ごめんね。 ____ /⌒ ⌒\ /( ●) (●)\ /::::::⌒(__人__)⌒::::: \ もう謝ったから気にしないお! | |r┬-| | \ `ー'´ / sqlite3使うのかなー、と思ったり。
>>550 ありがとうございます
numpyもtuple形式にするとsetとかdictに入れられたのですが
x in dicのように比較するとUse a.any() or a.all()と怒られます
== のような比較ならnumpy.all(x == a)でできますが,inのときはどうすればいいでしょう?
同じ数字を選んじゃうかもしれないrandomintの処理に無駄があるので、 全ての数字をシャッフルして、そこから必要数取れば処理も早くなるのでは? >>> import random >>> import numpy >>> numList = range(1,999) >>> random.shuffle(numList) >>> numpyList = [] >>> for num in numList[:20]: numpyList.append(numpy.array(num))
554 :
い :2012/09/17(月) 01:56:41.88
>>553 説明ではrandom使ったのですが,実際はnumpyの配列がある処理によって生成されていき,
まだ出てきていない配列だけをtxtに保存したいと思ってます
>>543 色々やってみたけど駄目だった。
根本的な問題は hash 化できないことだけど、
list()はしょうがないので、一旦tuple()で逃げることにした。
これでどう?
import numpy as np
import random
s = set()
for i in range(10):
L = []
for j in range(2):
r = random.randint(0, 3)
L.append(r)
print 'L =', L
na = np.array(L)
print 'na =', na
t = tuple(na)
print 't =', t
s.add(t)
print
na = None
print s
print 'len(s) =', len(s)
print
na2 = [np.array(x) for x in s]
print na2
print 'len(na2) =', len(na2)
pyglet のサンプルを参考にプログラムを書いているのですが from pyglet.gl import * としているものと from OpenGL.GL import * としているものがあり 特にその中でどちらのモジュールにも glBitmap という関数が存在するのですが 7 番目の引数について OpenGL.GL の場合は str を渡すと正常に動作します ところが pyglet.gl の方では str を渡すと「型が違う」エラーが出ます PL_C_ubyte とか言う型が要求されているようです 元々 pyglet.gl の方を良く使っていて glBitmap 以外の関数 glTexImage2D なんかだと str 渡しても問題なかったので pyglet.gl の glBitmap で正常に動作させる方法が知りたいです ctypes で c_char_p とかに変換して渡してもだめでした
訂正 LP_C_ubyte でした すみません
LP_c_ubyte は ctypes.c_char_p じゃなくて ctypes.c_ubyte の方らしいけど。
それがどうかしましたか?
すべてはわたしがつくったモノなのです とか続けたくなる
hoge = (ctypes.c_ubyte * size)() glBitmap(p1, p2, p3, p4, p5, p6, hoge) で逝けるみたいだけど?
>>563 bmplen = (width / 8) * height
bmpdata = (ctypes.c_ubyte * bmplen)(*([255] * bmplen))
glBitmap(w, h, w / 2, h / 2, 0.0, 0.0, bmpdata)
で上手く逝きました
ほんとうにありがとうございました
PyPyくっそ速いなー
私が学長です。
>>556 ここが通らなくて詰んだわ。
def test_simple_rule(self):
self.assertEquals(str(SimpleBars(" i ").next()), " iTi ")
'i ' と 'i' の優先度は左が高いんだから、'T'に変換できないでしょ。
あとね、hintってhintじゃないし。
条件じゃない。知らなかったら絶対解けない。
条件を知っても解けない。出題者出てこい。
ヒント1 付せんには next() での変更のルールの分析結果がメモされているみたい。 ええっと、上の付せんは、iTi という並びがあると真ん中の文字が i になる、ということを示しているのかな? 下の付せんについては、同じ行のルールは左のほうが優先度高いんだ、ってメモした本人が言ってた。 ここの読み解き方が分からんよ、分からん。
>>556 人によって問題違うン?sys.argv[1] とか渡されないと分からん
print の結果を答えるんじゃないんかね
m を入力して次の問題に池ってことか
>>569 def lets_take_tea_break(m, e, n, c):
if pow(m, e) % n == c:
return str(m)
return ""
lets_take_tea_break(*[int(i) for i in (sys.argv[1], 17, 3569, 915)])
こんなのでしょ?
同じだと思うよ。
*[int(i) for i in (sys.argv[1], 17, 3569, 915)] この文法わからんちん どっか解説してるサイト無い? for i in (sys.argv[1], 17, 3569, 915) これはリストから変数iとして取り出す、分かる forの前についてるint(i)ってなんぞ? *[]はなんぞ?
[for ...] はリストの内包表記。*は関数に渡すときにリストやタプルが展開される。 Python のチュートリアル見ればおk 二番mんd
lets_take_tea_break(int(sys.argv[1]), int(17), int(3569), int(915)) をややこしく書いただけってこと?
3次元のvertexを X軸で-π/4回転してからY軸で-π/4回転した場合と Y軸で-π/4回転してからX軸で-π/4回転した場合とで 同じ場所になりますか? またこれらで与えられる角度が変わった場合でも X-Y軸の回転順序が違っても常に同じことが期待出来ますか? あとZ軸が加わった場合でも同じですか?
>>574 の用途なら
lets_take_tea_break(*map(int, (sys.argv[1], 17, 3569, 915)))
でいいんじゃないかな
>>575 結果は一緒にはならないけど、python関係なくね?
ヒント1 付せんには next() での変更のルールの分析結果がメモされているみたい。 ええっと、上の付せんは、iTi という並びがあると真ん中の文字が i になる、ということを示しているのかな? 下の付せんについては、同じ行のルールは左のほうが優先度高いんだ、ってメモした本人が言ってた。 ヒント2 出力をよく見て! 途中で左端から出ていった文字が右端から回り込んでる……? ヒント3 SimpleBars のソースコードはどこ?って聞いたら、代わりにテストコードをあげる、だって。 SimpleBarsTest.py 覚え書き: ・list を継承する→ class SimpleBars(list): ・list("abc") == ["a", "b", "c"]; "".join(["a", "b", "c"]) == "abc" ・str() のカスタマイズ→ def __str__(self): ヒント4 SimpleBars を実装したら、あとは問題後半のコードを何も考えずに実行すれば答えが出そう。 このややこしいコードを読み解く必要はないみたい。 これ、ヒントじゃないから。 条件だから。この条件がないと絶対解けない。 この条件があっても解けない。 ヒント1が曲者で困ってござる。
class SimpleBars(list): def __str__(self): return "".join(self) str(simplebarsTest)が文字列で帰ってこない・・・ わけわからん
お前頭おかしいんじゃねぇ?
SPOJもpythonのコードが受け付けられるが、そういうのをいちいち質問するのはウザがられる パズルを解けという依頼は他所でやった方が良い アルゴリズムの実装においてpythonのことで分からないことがあればそこだけ質問しろ
SimpleBarsの出力が画像とか任天堂のボケナスっぷりに失笑 やってられるか
解けなくて困ってるんだお。。。 どうやって解いたらいいんだお。。。
悪い。俺は困ってない。
俺様が困っていると言っているんだ。 お前が困っていようと、いまいと関係ない。 どうやって解いたらいいんだお。。。
ヒント: htmlのソースを表示
仕方が無いからこのアホをあらぬ方向に誘導して遊ぶか
>>579 子供は帰れよ
自分のテストを他人の力で突破してなんになる
自己満足できる
スクリプトキディ的な考え方で…
pass
ここまで原典どおりで純正な厨房って久々だなー
意図してやったからな いまいち盛り上がらないでやんの
はい後釣り貰いましたー^^
速度気にするならtea(int(sys.argv[1]), 1, 2, 3)でいい
“Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。 “Code Puzzle”を解かれた方々に対して、景品をお渡ししたり採用におけるメリットを提供することはありません。
時間の無駄以外の何物でもないな
>>> a = [2, 3, 1] >>> print '%d,%d,%d' % (a[0], a[1], a[2]) 2,3,1 >>> print '%d,%d,%d' % a TypeError: int argument required >>> print '%d,%d,%d' % (*a) SyntaxError: invalid syntax 何がいけないんでしょう?><
print '%d,%d,%d' % tuple(a)
ありです!
ネタやってる奴は訓練されたuy 任天堂がPython使ったことに嫉妬して暴れ出した。
L=[ 'val1', { '1a': 1, '1b': 1, '1g':0 }, 'val2', { '1c': 1, '1d': 2}, 'val3', { '1e': 1, '1f': 3}] を L=[ 'val3', { '1e': 1, '1f': 3}, 'val2', { '1c': 1, '1d': 2}, 'val1', { '1a': 1, '1b': 1, '1g':0 } ] のように{}内の値の合計(1+3,1+2,1+1+0)でsortする方法を教えて下さい。
見るだけでアホらしいデータと感じるので嫌です まだvalXと対応するdictが纏まってればいいけど 一緒にリストに突っ込んでるなんて醜い醜い醜い プログラマに全角半角入り混じった文章を見せ続けると死ぬに近い不快感
アルゴリズムを考える前にクレイジーなデータ構造を何とかしろよ…
L=[ ('val1', { '1a': 1, '1b': 1, '1g':0 }), ('val2', { '1c': 1, '1d': 2}), ('val3', { '1e': 1, '1f': 3})] せめてこうだったらな
脳みそが爆発した
仮に609なら若干無駄はあるが1行で済む L.sort(lambda x,y:sum(y[1].values())-sum(x[1].values()))
613 :
デフォルトの名無しさん :2012/09/19(水) 09:33:34.03
>>607 全角半角入り混じった文章ではなくて
全角英数が入り混じった文章ではないのかな
614 :
デフォルトの名無しさん :2012/09/19(水) 09:36:16.53
>606 は L={'val1': { '1a': 1, '1b': 1, '1g':0 }, 'val2': { '1c': 1, '1d': 2}, 'val3': { '1e': 1, '1f': 3}} のつもりだったんじゃないのかな
失敗から学ぶのが技術者 失敗したら他人のせいにするのが経営者 失敗しても安全と言い張るのが御用学者 失敗しても気にしないのが東電 失敗したらデータを捏造するのが韓国人 失敗したら隠すのが中国人 失敗したらもみ消すのが警察 失敗したら有耶無耶にするのが官僚 失敗したらルールを変えるのが政治家 失敗したら喜ぶのがマスゴミ
そして失敗しない俺
Windows 7 64bit Cython0.17 Visual Studio9.0 x86 Python3.1, 3.2 64bitは問題ないのに 3.3rc2 64bitだけエラーが起きる Microsoft Visual C++ Runtime Library Runtime Error! Program: C\Python33\python.exe R6034 An application has made an attempt to load the C runtime library incorrectly. Please contact the application's support team for more information. ImportError: DLL load failed: ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。
x86
>>618 > Visual Studio9.0 x86
Python3.3から32bit版では使えなくなったの?
だいぶ前にpython2.xで使おうとしたら挙動がおかしかったからPydev使ってるけど 今はまともになったの?
なにを?
突然すいません。 PythonMagickでアニメーションGIFのフレーム毎の処理を行う場合、PILでいうseek()のようなのって無いんでしょうか?
>>624 Pydevって言ってんだから文脈からvisual studioのpython開発プラグインって気づけよ
分かるわけねぇw
無茶言うなワロタ
脈…?
Python Tools for Visual Studioの存在を知らない人が殆どだから仕方ないか
いや、使ってるけどこの発想は無理
じゃあ質問に答えろよ
開発環境つってもいろいろあるからなー
Visual Studioの話題が出たから質問しただけだが
ここで画像処理の質問は畑違いか、、
PythonMagick全然更新されてないから使う気にならなかったんだ ごめんねー
C:\Windows\System32\cmd.exe \E:ON \V:ON \T:0E \K "C:\Program Files\Microsoft SDKs\Windos\v7.0\Bin\Setenv.cmd \x64 \release" Python setup.py build_ext --inplace でコンパイルすると c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\Bin\amd64\cl.exeとlink.exeが使われて その後 C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\x64\mt.exeが行われます これで完成した.pydをimportするとPython3.3だけエラーが起こります
>>622 ありがとうございます
解決しました
Python3.3だけmt.exeが実行されずに終わってました
setup.pyは同じなのに…
とりあえず、手動で実行したら解決しました
641 :
デフォルトの名無しさん :2012/09/21(金) 20:23:15.35
>>491 引数と環境変数と記録するようなwrapper書くとか、
Pythonスクリプトに一時停止するコードを追加してProcess Exploererで引数と環境変数を見るとか、
PyDevのソースコードを見るとか。
642 :
デフォルトの名無しさん :2012/09/21(金) 22:02:06.87
pythonってニシキヘビだろ? 名前が好きになれないし、FORTRAN95みたいにインデント でブロック構成だなんて。PHPの方がまだましだわ。
pythonを使ったことない人は皆そう言うが、その批判には何の意味もない
644 :
デフォルトの名無しさん :2012/09/21(金) 22:07:00.24
645 :
デフォルトの名無しさん :2012/09/21(金) 22:07:25.73
elseじゃなくてelifかよ! 紛らわしい…
>>642 > pythonってニシキヘビだろ?
しばしばそのような指摘がなされますが、pythonの成り立ちと実在の蛇とはまったく関係がありません
elifとelseは違うだろ
else if, elif, elseif, elsif
SPAMでも食っとけ
SPAMが入ってないのは!?(グレアム)
switch無いのに突っ込む人はあまりいない
SimpleHTTPServerを使ってみたくて test() を実行したところ以下のようなエラーになりました Windowsではできたのですが、Ubuntu(Linux)ではできませんでした >>> import SimpleHTTPServer >>> SimpleHTTPServer.test() Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> SimpleHTTPServer.test() File "/usr/lib/python2.7/SimpleHTTPServer.py", line 216, in test BaseHTTPServer.test(HandlerClass, ServerClass) File "/usr/lib/python2.7/BaseHTTPServer.py", line 589, in test port = int(sys.argv[1]) ValueError: invalid literal for int() with base 10: '-n' どなたか解決策、または原因のみでもわかる方いませんか よろしくおねがいします
つ ValueError: invalid literal for int() with base 10: '-n'
654 :
652 :2012/09/22(土) 15:42:29.93
あ、すいませんバージョンをいい忘れました 2.73(32bit)を使ってます
655 :
652 :2012/09/22(土) 15:52:38.27
ちなみにシェルスクリプトではなく ファイルを読み込んでから「run module」でやると実行はできるのですが C+z C+cでも固まってしまって、×を押しても終了できなくなります
PyShellを使わずに端末からpython起動して同じことをやったらどうなる?
657 :
652 :2012/09/22(土) 16:02:53.67
>>656 端末からだと大丈夫でした
C+cで無事終了できました
原因はPyShellなんでしょうか
>>657 Pythonを起動してる環境が多分悪さしてる
どんな環境から実行してるのか詳しく書いてくれれば原因がわかるかも
(IDLEとかEclipseとかPyScripterとか)
659 :
652 :2012/09/22(土) 16:26:51.60
>>658 IDLE(Python 2.7版)と書いてあります。
OSはUbuntu(Linux) 12.04です
Pythonのバージョンは2.73です
>>659 idleの起動引数に"-n"が入ってるんじゃないか
idleを起動したら
>>> import sys
>>> sys.argv
ってやってみて
とりあえず今回はidle使わないのが手っ取り早いと思う
PythonShellとか使いにくいだけだからIPython使っとけってことだな
>>660 !!
ほんとに-nが入ってました。
['/usr/bin/idle-python2.7', '-n']
これってどういう意味なんでしょうか
私は変な設定とかした覚えはないんですが
>>660 >>661 idleはあまりよくないんですね
わかりました
別のやつを探してみます
lpythonというのから調べてみます
663 :
652 :2012/09/22(土) 17:02:52.24
あ、
>>662 は私です
WindowsのIDLE(Python 2.7版)
Linuxの「端末」上
それぞれで import sys ///sys.argv をやってみたところ
両方共
['']
という結果でした
やはりUbunt上のIDLEだけ特殊な設定になっているみたいですね
664 :
652 :2012/09/22(土) 17:04:07.14
おかげで助かりました 皆さん本当にありがとうございました
Ubuntuのパッケージャが気を利かせてidle -nとかしてるんだろう less /usr/bin/idle-python2.7 とかして中身を見てみるといいよ ライブラリ書く人はif __name__ == '__main__': _test() とかして ユーザが直接 _test() を呼ばないようにしといたほうがいいのかもと思った
AptanaとPython2.7の環境で、定期的にwebにアクセスして情報を引っ張ってくるプログラムを書きました。 しかし、どうも特定のページではキャッシュにアクセスしているようです。 そのページが更新されているのに、更新前のページソースが帰ってきます。 このような場合、どう対処すればよいのでしょうか。 よろしくお願いします Pythonのコードは、単純に urllib.urlopen(page_name) としているだけです。
667 :
666 :2012/09/22(土) 23:13:58.47
申し訳ありません。 追記となりましたが、Proxyサーバーを経由しています。 調べたところ、その影響があるかもしれません。
If-Modified-Since: Thu, 01 Jun 1970 00:00:00 GMT
python2です。 >>> abc = {'alpha':u'α', 'beta':u'β', 'gamma':u'γ', 'delta':u'δ', 'epsilon':u'ε'} >>> print repr([abc[k] for k in sorted(abc)]).decode('unicode-escape') [u'α', u'β', u'δ', u'ε', u'γ'] これを、 [u'α', u'β', u'γ', u'δ', u'ε'] と表示されるようにしたいのですが、 どのような方法がスマートでしょうか? 例はεまでですが、それ以降のギリシャ文字もあると看做してください。
print repr(sorted(abc.values())).decode('unicode-escape')
すみません、訂正です。 >>> print repr([(k, abc[k]) for k in sorted(abc)]).decode('unicode-escape') [('alpha', u'α'), ('beta', u'β'), ('delta', u'δ'), ('epsilon', u'ε'), ('gamma', u'γ')] を [('alpha', u'α'), ('beta', u'β'), ('gamma', u'γ'), ('delta', u'δ'), ('epsilon', u'ε')] で、おながいします。
>>672 さん、ありがとうございます。
行き違いになってしまいました。すみません。
>>673 で引き続きおながいします。
>>> abc = {'alpha':u'α', 'beta':u'β', 'gamma':u'γ', 'delta':u'δ', 'epsilon':u'ε'} >>> print repr([(k, abc[k]) for k in sorted(abc, cmp=lambda a, b: -1 if abc[a] < abc[b] else 0 if abc[a] == abc[b] else 1)]).decode('unicode-escape') [('alpha', u'α'), ('beta', u'β'), ('gamma', u'γ'), ('delta', u'δ'), ('epsilon', u'ε')]
こっちの方が良いかな >>> abc = {'alpha':u'α', 'beta':u'β', 'gamma':u'γ', 'delta':u'δ', 'epsilon':u'ε'} >>> print repr([(k, abc[k]) for k in sorted(abc, cmp=lambda a, b: cmp(abc[a], abc[b]))]).decode('unicode-escape') [('alpha', u'α'), ('beta', u'β'), ('gamma', u'γ'), ('delta', u'δ'), ('epsilon', u'ε')]
sorted(abc.items(), key=lambda x: x[1])
678 :
デフォルトの名無しさん :2012/09/24(月) 11:52:32.49
yahooから株価情報を取得したいのですが、 いろいろ調べているとBeautifulsoupというモジュールが良さそうなのですが、 他に良いモジュールなどありますでしょうか?
itemgetterが組み込み関数じゃない理由が分からないが それを読んだ人が何やってるか分からないからだろうな
decode使っての文字コードの変換って文字列が長かったりしたら失敗する?
実装によってはなるかも知れんが、生憎俺は遭遇したことがない
ループでデコードしまくったら、文字化けしたことがあるな for val in list: print val.decode('shift_jis') みたいにしたら、時々文字化けするっていう Aptana、Python2.7
686 :
679 :2012/09/25(火) 23:01:09.75
>>680 教えていただいてありがとうございます。
よさそうですね。参考にさせていただきます。
リストに入った文字列をすべてテキストに保存したいのですが b = '' for line in listA: b += line + '\n' というように取りだしてから保存しようとすると,40万件くらいのデータだとbに入れる時点ですごく遅くなってしまいます. なにか他にいい方法ありませんか?
'\n'.join(listA)
with open(..., "w") as f: f.writelines("\n".join(listA)) with open(..., "w") as f: for line in listA: f.write(line + "\n") どっちが早いかな。下と予想してみる
一度、長大な文字列作成してからdiskに書き込むよりも、 いきなりdiskに書き込んでいった方が高速なのか。 そうかそうか、一度、長大な文字列作成する必要ないもんね。 勉強になった。ありがとう。
>683-685 errors='ignore'
693 :
デフォルトの名無しさん :2012/09/26(水) 09:48:13.72
pythonでCGIプログラムを作っているのですが、そのCGIのURLに飛ぶたびに test.pyというCGIファイルがダウンロードされてしまいます OSはLinuxで、chmod 0755 test.py はすでに実行済みです test.pyをダブルクリックすると、「端末」で実行できるようになっており test.pyの内部処理の結果が表示されます サーバーはCGIHTTPServer.test()で実行しています。 特にエラーも出ておりません。 自分なりに調べてみたのですが、わかりませんでした。 どなたか原因が分かる方いたらご教授ください。
追記 test.pyというCGIファイルはindex.htmlと同じフォルダに作った cgi-binというフォルダに入っています
申し訳ありません 自己解決しました 知人にアクセスしてもらっところ、CGIが表示できました。 どうやら最初にミスした時のキャッシュファイル(?)がずっと残っていたみたいです お騒がせしました
自己解決はいいけど、キャッシュしないように設定したりはしないの?
py2pl トランスレータ、誰か作って。
何で敵将に献上しなきゃいけないんだ。 むしろお前がpl2py作れ。 もちろんPython3に変換してくれるんだろうな。
正論 個人的には過去の豚真珠プログラムは蛇に置き換えたのでどうでもいい
700 :
デフォルトの名無しさん :2012/09/30(日) 12:19:51.60
疑問なのですが、どうしてPythonの文字数や配列数はlen()関数で数えるのでしょうか? Javascriptなどのように、.lengthプロパティではない理由はあるのでしょうか? スライスのことを考えると、内部的に数を持っているかと思うので.lengthのほうがスムーズかと思うのですが。
.__len__()
あるよ 歴史的経緯だとどこかに書いてあったはず
>>700 max(map(len, xs))
max(x.__len__() for x in xs)
鏡音レングス
np.vectorizeを使うとこのようになるのですが、どうしたら正常に処理できますか? vectorizeではなく文字列用の関数があるのでしょうか? import numpy as np print np.vectorize(lambda x: x, otypes=[np.dtype('S24')])(np.array(['P'*20])) 出力:['PPPP'] 期待する出力:['PPPPPPPPPPPPPPPPPPPP'] やりたいこと listへのmapのように、np.arrayの各要素に対して処理をしたい 環境 python2.7.3 numpy1.6.2
出力はlistなの
出力はarrayがいいです import numpy as np print np.array(map(lambda x: x, np.array(['P'*20]))) 出力:['PPPPPPPPPPPPPPPPPPPP'] こうしてみたら動作は期待通りなんですが、なんか釈然としないというか…numpyを使った意味が無いような…
ざっと言語仕様を見てみたところ、 Cの構造体に相当する機能がないようですが レコードをフィールドに区切って扱う概念がないと つらくないですか?
名前付きタプル
普通にクラス使っても良い
Python Tools for Visual Studio使っている人いますか? 例えばiを何も定義せずに print i などとしたときに、実行するまで未定義なのかわからずに困っています なにか設定が必要なのでしょうか?
>>714 exec raw_input()
print i
みたいなコードがあったら
i が未定義かどうか実行するまでわからない。
if some_func(): i = 0 print i の方がわかりやすいかも
それはバグだよw
ともかくPydevでは教えてくれるような
>>714 のようなエラーを
VSが教えてくれないから困っているという話だろう
>>716 はまた別の話。俺はVSのそれを使ったことがないから質問には答えられないが
lint しても無駄 実行してみないと判らないことはいくらでもある
だからー、今回の質問者の問題は分かるんだって
722 :
714 :2012/10/04(木) 10:33:56.00
皆様ありがとうございます pydevでは実行しなくても'Undefined variable'と警告してくれるので Python Tools for Visual Studioでも教えてくれないのかなぁと思っていました どうやらPTVSでは教えてくれなそうなので、しばらくはpydevの方を使っていようと思います
馬鹿には無理
724 :
デフォルトの名無しさん :2012/10/04(木) 20:59:09.46
python3.3です。質問です。 ipアドレスのリストを読み込みwhoisを実行する。結果をhtmlファイルに書き出す。 というプログラムを書いています。 あらかたのアドレスは上手くいっているのですが、一部でUnicodeDecodeErrorがでて書きだせません。 結果自体はbytes.decode(subprocess.check_output(["whois", ip_address]))でとって、fp.writeで書いています 175.119.227.235あたりのアドレスでエラーがでます。 これを回避する方法はないでしょうか? 参考になるかわからないですが、試したことを書いておきます。 >>> bytes.decode(b'\xe3\x81\x82') 'あ' >>> bytes.decode(b'\xc1\xb6\xc8\xb8\xc7\xcf\xbd\xc5') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc1 in position 0: invalid start byte >>> locale.getpreferredencoding(False) 'UTF-8'
無視したらいけました。」
>>> bytes.decode(b'\xc1\xb6\xc8\xb8\xc7\xcf\xbd\xc5', errors='ignore') としたらいけました。って書こうぜ。 encodingを指定してもよく分からんかった。 >>> bytes.decode(b'\xc1\xb6\xc8\xb8\xc7\xcf\xbd\xc5', encoding='sjis') 'チカネクヌマスナ' >>> bytes.decode(b'\xc1\xb6\xc8\xb8\xc7\xcf\xbd\xc5', encoding='euc-jp') '繕噺馬重'
韓国語(euc-kr ?)っぽいね。ブラウザでwhois引いても文字化けしてた。
>>> '\xc1\xb6\xc8\xb8\xc7\xcf\xbd\xc5'.decode('euc-kr') u'\uc870\ud68c\ud558\uc2e0'
조회하신
猥褻用語か
「照会されたIPv4アドレスは、韓国インターネット振興院から下の管理代行者に割り当てられており、割り当て情報は、次のとおりです。」 と書いてある。
3.3.0 で確認 pip install chardet2 で python3用のchardetをインストール >>> import chardet >>> chardet.detect(b'\xc1\xb6\xc8\xb8\xc7\xcf\xbd\xc5') {'encoding': 'EUC-KR', 'confidence': 0.99}
HTMLParser を使って HTML 内の文字列を取り出すスクリプトを作っています。 feed() で読み込ませ、目的の文字列を取り出し終えたら、残りはもう見る必要ないので そこで中断させたいのですが、どうしたらいいんでしょうか? Python3.3です。
>>733 feedの後に目的の文字が見付かったかどうかをチェックし、
見付かってたらfeedで読み込みしてるループを抜ける。
あんまり綺麗じゃないけどdef handle_*の中で例外投げるとか iterparse()のあるlxmlを使ったほうが直感的でいいかも
736 :
733 :2012/10/06(土) 09:21:43.01
>>734 feed() を呼んだ時、HTMLParserインスタンスの処理が終わる前にfeed()の後のコードが
実行されるという事ですか?
>>735 大したスクリプトじゃないんで外部モジュール使うのもどうかなと思っていたのですが、
ちょっと勉強してみます。
レスありがとうございました。
例外投げるのが綺麗じゃないと思う理由を知りたい
言語によってはフロー制御に例外使うのをアンチパターンとしているからかな 俺は733じゃないのであくまで想像だが
>>737 パーサにparser.stop()みたいなメソッドがあればそっち使いたいのが一点
あとStopIterationみたいにfor文で暗黙的に例外が処理されるならともかく
今回のはパーサ作ってfeed()する側が明示的に例外を処理しなきゃいけないのがもう一点
740 :
デフォルトの名無しさん :2012/10/06(土) 15:46:49.80
>>738 漏れは733じゃなくて735に聞いたのに何でおまえが答えてんの?
>738 >言語によってはフロー制御に例外使うのをアンチパターン どの言語のことでしょう
pass
インタプリタじゃない言語の類でしょ C++/C#/Javaとか 理由としては、上記の言語では例外のコストが通常の制御に比べて高すぎるので 例外的状態にだけ例外を使用する(=予測可能なエラーに対して例外を使用しない)という了解がある 軽量言語でも例外のコストは通常の制御より高いが、 上記の言語に比べれば大したことがないので許される まあ一言で言えば「Pythonには関係ない」よ
Java の parseInt はその主張と矛盾すると思うのですが
EffectiveXXXや達人プログラマー、CodeCompleteなどの いわゆる良書と言われる本には必ず(大抵ではない)書いてあることなので 興味があるなら読んでみてもいいかもね
いやJavaは例外投げまくりでしょ
>>745 その通りです
上記の本を読んだ人が真っ先に考えるのはそのメソッドの存在でしょう
EffectiveJavaの中でも無駄に例外を投げているJDKの設計について、一部苦言が呈されています
要するに、Javaの開発者がアホだったのです
Javaは糞 はいおしまい
へぇーC#はTryParseあるのにJavaは無いんだ
スレチだと伸びるな
exit(1)
insert(角電池)
例外処理をリスト内包表記で作っていく辞書の値について行いたいのですが、 三項演算子みたいに1行でやることはできますか? 具体的には[{ 'foo': ? } for x in bar]の?の部分で, 例外が発生するかしないかでfooの値を変えたいです。
出来ないし、なんでも一行でやろうとするな
スマァァァァトに書きたいんですぅぅぅぅぅ ワンライナーはとてもSmaaaat!!!!!((c) MOTHER2・任天堂・糸井重里)だと思うんですぅぅぅぅ
それはコーダーの自己満足だろ
こうですか? def proc(x): try: return hogehoge(x) except (Hoge, Hage), e: return fugafuga(x) [setattr(jisho, 'foo', proc(x)) for x in bar]
yahooから株価を取得してDBに放り込むプログラムを作成しました。
今までずっとCを利用してましたが、pythonでの初めてプログラムなので修正点などありましたら教えていただけると幸いです。
def get_historical_price_latest_from_yahoo_co_jp(stock_code):
import urllib2, lxml.html, pgdb
from time import strftime, strptime
url_header = "
http://stocks.finance.yahoo.co.jp/stocks/history/?code= "
get_url = url_header + stock_code + ".T"
html = urllib2.urlopen(get_url).read()
root = lxml.html.fromstring(html)
tr_elements = root.xpath("//tr")
connector = pgdb.connect(host="****", database="****", user="****", password="****")
cursor = connector.cursor()
for count1, tr_element in enumerate(tr_elements):
if count1 >= 2 and len(tr_element) == 7:
val = [stock_code]
for count2, price in enumerate(tr_element):
if count2 == 0:
price_date = strftime("%Y-%m-%d", strptime(price.text, u"%Y年%m月%d日"))
val.append(price_date)
else:
price_data = float(price.text.replace(",",""))
val.append(price_data)
sql = "insert into yahoo_jpn_price values" + str(tuple(val))
cursor.execute(sql)
connector.commit()
cursor.close()
connector.close()
まずインデントを直せ
sql = "insert into yahoo_jpn_price values" + str(tuple(val)) injectionですねわかります
val = [stock_code]って 既存の変数を[]で囲むことにどういう意味があるんだろ。 まさかCと同じで配列の先頭アドレスへの参照を代入しているのか。 Pythonは変数に型がないので、代入データの型を右辺から いちいち推測しないといけないのが面倒だね。
リストじゃねーの
リストリテラル以外に何があるというのか
馬鹿すぎて言葉がでない
なるほどリストかあ。 でも見慣れない処理だよね。 既存のリストでない変数をカッコで囲んでリスト化するのは。
え?
物を知らなすぎて笑えない
大人しく自分がマスターした言語だけ使ってろよ… 読んでて疲れるから
別に君らの疲れを癒すスレじゃないし Python初心者なんだから好きなこと言わせてもらうよ。 嫌なら出て行け。
>>764 はさあ、まずリストと配列の区別がついてないと思うんだよね
>>764 はこれまでリストリテラルの無い静的型言語、
例えばJavaのようなウンコ言語しか使った事が無いんだよ
馬鹿過ぎて簡単なPythonすら使いこなせないだろうけど、
生暖かく見守ってあげようじゃないか
>764 気になるなら val = [stock_code, ] で
[777] はリストになるけど (777) はタプルにならない不思議
タプルタプルした二の腕
(1 + 2) * 3 とかの式で第一項がタプルになったら困るでしょ? 実はタプルは括弧ではなくカンマで作られる(空タプル除く) 777,
いつまで初心者気取りなんプークスクス
初心者が超初心者を偉そうに叩くスレ に改名すべきだな
>>775 逆にいえば
pythonよりもはるかにムズい(もといめんどくさい)javaを
使えてたということか〜
jsonやらなにやらもあるんだから、元々何を使ってたかの前に見識が狭いだけやねん
えっ?
いや普通に日本語で言いたいこともよくわかる
JSONというと13日の金曜日だけど今月13日は
>>788 >>784 を
>>783 へのレスと考えるとたしかに日本語でおkになるわな
流れからすれば唐突にjsonなんてワードは出てこないはずだからな
jythonをjsonと間違えたと考えるのが妥当では?
ぜんぜん妥当じゃない。Jythonでは意味が通らない リスト(配列)リテラルがあって誰でも知ってるJSONだから意味が通る
↑なぜ必死?
無知がどこまで恥曝しつづけるか見物だね
Jythonが妥当!
誰でも知ってること知らねーの?だせえって 人小馬鹿にしといてよく言うよ
json知ってることを自慢したい消防が紛れ込んだ模様
>>799 いじられて悔しかったんでちゅねいい子いい子
801 :
760 :2012/10/07(日) 17:14:47.35
なんか荒れてますが。。。
>>763 ありがとうございます。
SQLインジェクション攻撃に対してに脆弱になるんですね。
cursor.execute('insert into yahoo_jpn_price values(%s,%s,%s,%s,%s,%s,%s,%s)', val)
に変更したいと思います。
それじゃ変わらんよ
803 :
801 :2012/10/07(日) 17:26:10.94
ネタですけど何か
SQLインジェクション知ってることを自慢したい消防が紛れ込んだ模様 なお間に合う模様
それがどうかしましたか?
807 :
760 :2012/10/07(日) 17:31:53.92
808 :
802 :2012/10/07(日) 17:33:47.67
>>807 知ったかぶりしただけだから対処法など知らんよ
>>806 さっきから粘着して下さっているのはあなたですか!?
>>807 そのページに書いてあるとおり %s じゃなくて ? を使う
811 :
809 :2012/10/07(日) 17:43:16.37
(他のデータ ベースモジュールでは変数の場所を示すのに"%s" や ":1" などの 異なった表記を用いることがあります。)
813 :
デフォルトの名無しさん :2012/10/07(日) 18:33:30.78
色々板を回ってみたが ID表示の無い板はゴミ
荒らせばID付くんじゃね?
10年荒らされてる板で何言ってるか分かってる?
816 :
デフォルトの名無しさん :2012/10/08(月) 01:26:12.96
テスト
★修学旅行、韓国から国内に変更…宮崎・日南高
日本と韓国の関係悪化を受けて、宮崎県立日南高は2年生27人が12月に予定していた韓国への
修学旅行を国内に変更した。
日南高によると、同校の修学旅行は韓国と国内の二つから選べることになっており、今年は2年生
170人のうち、143人が東京や群馬などの国内を選択。27人が同校の姉妹校・冠陽高があるソウル
などへの旅行を希望していた。
竹島問題などを巡って、日韓関係が悪化していることから、韓国への修学旅行について慎重に検討した
結果、「韓国の情勢が不透明で、生徒の安全などを考慮した」として、行き先を国内に一本化したという。
県内の別の高校も来年3月に計画している韓国への修学旅行について、変更を検討しているという。
http://www.yomiuri.co.jp/kyoiku/news/20121006-OYT8T00695.htm
>>760 * 文字列の連結は大抵 "".join や 書式付文字列 を使う。
* html = urllib2.urlopen(get_url).read()
書き捨てのコード以外では、推奨しない。404 の場合に エラーページのHTMLを所得してしまう。
* lxml.html.parse は引数にurlを取れる。404 の場合は IOError 例外が投げられます。
* xpathで所得する要素を指定できる。件数がそれ程多くなければ pythonのリストのスライスでもいい。
count1,count2 と enumerate はコードから全部排除できるはずです。
for tr_element in root.xpath("//tr[position() > 1]"):
if len(tr_element) != 7: # pythonに慣れてくると、内包表記やフィルターを使うようになる。
continue # インデントを深くしたくないので continue。
...
for price in tr_element[1:]:
...
* データベースへ入れる処理とデータの所得部分は分離する。
(混ざってると、エラー処理後の後始末が面倒になったりする。ネストが深くなる傾向がある)
データ所得部分はジェネレータにしておくと便利。
819 :
デフォルトの名無しさん :2012/10/08(月) 09:29:36.09
820 :
デフォルトの名無しさん :2012/10/08(月) 09:32:39.56
>818 * html = urllib2.urlopen(get_url).read() 書き捨てのコード以外では、推奨しない。404 の場合に エラーページのHTMLを所得してしまう。 * lxml.html.parse は引数にurlを取れる。404 の場合は IOError 例外が投げられます。 喫茶店のWiFiとかで繋ぐと、(そこのアカウントに)ログインする前は、 IPアドレスだけ振られて、404じゃなくてログイン画面が返ってくることがあるんだよね。 そういうの検出するにはどうすれば良い?
// / / バカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ 馬鹿には無理 / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
レスポンスの内容見て判断するっきゃないじゃないですか 他に判断要素ないんだし
結局そうなるなら * html = urllib2.urlopen(get_url).read() でも充分ですね
そう思うなら、そうじゃね。 好きにすればいいと思うよ。
レスポンスコードを・・・Pythonの話じゃなかったか
826 :
818 :2012/10/08(月) 11:46:36.95
>>820 response = urlopen(url)
response.geturl() で目的のURLになってるかどうか確認する。
リダイレクトされてたらそのログインページのURLが入ってるはず。
827 :
デフォルトの名無しさん :2012/10/08(月) 12:42:49.58
ありがとうございます lxml.html.parse でも同じことは出来ますか?
出来ないなら出来ないって率直に言った方が良いですよ
じゃあ出来る
831 :
818 :2012/10/08(月) 13:31:45.41
urlで読み込めるのは libxml2 側の機能なのでPythonから拡張するのは難しいよ。 掛かる手間を考えると良いアプローチだとは思えないので、 たいして調べてないけど、出来たとしてもコード量が増えるのは確実だと思う。 代案: res = urlopen(url) if res.geturl() == url: # != login_url にすべきかな。その辺は状況に応じて doc = lxml.html.parse(res)
何気に良スレ
クソスレ
ローマ数字を整数に変換して計算するモジュールを作成しました importしたときに予め0から1000までのローマ数字を使えるように モジュール内でインスタンス化させたいのですが Z = MyClass(0) I = MyClass(1) II = MyClass(2) … と書いていくと1000行以上のコードになってしまうため for i in range(1000): インスタンス名 = MyClass[i] というようにループなどで短くまとめたいのですが、何か方法はないでしょうか インスタンス名は >>> print(VII+III) >>> X というような処理をさせたいので、ローマ数字にしておく必要があります
数字→文字の変換ができてるなら下記を応用すればいける _module_self = sys.modules[__name__] setattr(_module_self, 'ローマ数字文字列', 数字)
Dive Into Python 3 にまんまおんなじ事するコード例あるよね。
839 :
838 :2012/10/08(月) 21:17:10.10
まちがえた。なかったことにしてくれ。
ツイッターじゃないから、そんなことは出来ない
<●><●>
>>836 globals()["I"] = MyClass(1) が多分一番手軽。(スコープに注意。top-levelなら locals() でも可。関数内なら globals())
他には {types.ModuleType でモジュールのインスタンスを作って 辞書を追加 (module.__dict__.update(mapping))という方法もある。
疑問があるのだけど I += II したりすると困らない?
>>837 ありがとうございます
なんとかなりそうです
>>842 すみません、リロードしていませんでした
単純な計算しかできないので
I+=IIというような処理はできないです
アドバイスありがとうございます
845 :
760 :2012/10/08(月) 22:56:39.81
>>818 遅くなりましたが、丁寧なアドバイスありがとうございます。
参考に修正させていただきます。
なかなか内包表記なんかは慣れませんが精進したいと思います。
Pythonで初めてプログラミングを勉強しております。 Python 3.2とFlaskをサーバーに入れています。 ウェブページのフォームから辞書にkeyとvalueを登録したいと思い、 以下のような関数を作ってみたのですが、うまく登録できません。 ウェブページのフォームからkey=hoge&value=piyoをPOSTします。 確認のため、関数の戻り値をreturn dictionary['hoge']とするのですが、 HTTP/1.1 500 INTERNAL SERVER ERROR KeyError: 'hoge' と、一連のエラーコードが返ってしまいます。 関数の戻り値をdictionary['shortcut']とするとpiyoが表示されるので 'hoge'が辞書にkeyとして登録できず、変数に使った'shortcut'が そのまま辞書のkeyに登録されてしまっているようです。 どこを直せばよいのでしょうか。 それとも何か根本的に誤っているのでしょうか? @app.route("/add_dictionary", methods=['PUT', 'POST']) def add_dictionary(): shortcut = request.form.get('key') dictionary['shortcut'] = request.form.get('value') return dictionary['hoge']
よく見るんだ↓ dictionary['shortcut'] = request.form.get('value')
848 :
デフォルトの名無しさん :2012/10/09(火) 16:27:09.88
関数の処理の結果を戻り値ではなく渡した引数に入れるメリットってなんでしょう? (とある3DソフトのAPIの設計がそんな感じでした)
849 :
846 :2012/10/09(火) 17:12:22.44
>>847 dictionary[str(shortcut)] = request.form.get('value')
ですね!わかりました!!ありがとうございます!!!
>>849 【審議中】
♪ ∧,, ∧ ♪
♪ ∧,, ∧ ・ω・)
∧,, ∧ ・ω・) )
♪∧,, ∧ ・ω・) )っ__フ ♪ ∧,, ∧
∧,, ∧ ・ω・) )っ__フ(_/ 彡 .∧,, ∧ )
( ・ω・) )っ__フ(_/彡 ∧,, ∧ ) )
(っ )っ__フ(_/彡 .∧,, ∧ ) ) Οノ
( __フ(_/彡 ∧,, ∧ ) ) Οノ ヽ_)
(_/彡 ( ) ) Οノ 'ヽ_)
( ) Οノ 'ヽ_)
(ゝ. Οノ 'ヽ_) ♪
♪ ミ ヽ_
>>848 CでもJavaでもそんなのはごく当たり前に行われてるだろ
副作用恐怖症の関数言語馬鹿なのか?
>>844 定数にしたくなるんじゃないかなと思ったけど、杞憂だったみたいですね。
追記: 数字 -> 文字 を MyClass の __str__ に実装してれば、辞書内包で一括登録できそうです。
globals().update({str(x):x for x in map(MyClass,range(1000))})
# ※ モジュールのトップレベルで実行する場合、2.x では内包表記の一時変数が外に残ることに注意。
>>848 内部で使ってると思われるC言語のライブラリに合わせてるんじゃないかな。(予想)
成否判定を戻り値にしてデータは引数で与えたアドレスに渡して貰うという仕様のAPIは多い。
例外をサポートしてて多値も返せるPythonでは、メリットは思い当たらない。
今日もようやく脱超初心者したばかりの初心者が煽ってるな
>>853 いいんじゃないかな。
そうやって成長していけば。
おかしいところがあればあなたが指摘してあげて。
そうすることであなたも成長できるのだから。
うぜえ消えろ
856 :
848 :2012/10/10(水) 02:20:27.25
>>852 その通りでした
C++のAPIに合わせようとして色々無理が生じてきているので
最新版でPythonらしいAPIを新たに作っているとありました
>>855 怒らないで
そうすることであなたも成長できるのだから
黙れチョン工作員
pass
p
本はともかく公式のドキュメントに目を通さないのは大間違い
そうすることであなたも成長できるのだから
utf-8で流れてくるバイナリストリームデータを、cp932に変換するにはどうしたらいいですか? codecsモジュールを使うらしいまではわかったんですが。。。 Python2.7です。
// / / バカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ 馬鹿には無理 / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
>>863 凝ったことする必要がなければ
cp932buf = u8buf.decode('utf-8').encode('cp932')
>>865 unicodeやstrではなく、ストリームデータを扱っています。
>>863 ストリームが file-like なオブジェクトだったら
new_stream = codecs.EncodedFile(stream, "utf-8", "cp932")
出力先もストリームの場合は、
入出力双方のストリームでそれぞれdecode,encodeするようにすると、Python内ではunicodeで文字列処理できる。
# Python 内で cp932 の文字列に対して処理をする必要がなければ、encode,decodeを一緒にせず別けた方がいい。=> 他のencodingに対応しやすい
input_stream = codecs.getreader("utf8")(utf8_stream)
output_stream = codecs.getwriter("cp932")(sys.stdout)
対象がイテレータ系のオブジェクトの場合は iterencode,iterdecode が使えそうだけど・・・
encodeとdecode両方を同時に行いたいなら、一手間かけてwrapper関数か新たなジェネレータを作った方が良いかもしれない。
ストリームに対して codecs を使う利点は、
文字列のencode,decodeメソッドだと毎回codecsのlookupが発生するのに対し(一応キャッシュはされてる)
予めlookupしたcodecからencode,decodeの関数を準備しておけるので、多少の効率upが期待できます。
868 :
867 :2012/10/12(金) 08:32:44.98
>>866 ん?ストリームデータって?具体的にはPythonでは、どんな型?
ストリームから utf-8文字を読み出して decode/encode って出来るはずだけど。
>865の方法が無理なら codecs も使えないよ。最終的には文字列に変換出来ないとだめ。
ソケットの事を言ってるなら、普通に読み出しすれば文字列を得られるし、
socketのmakefileメソッド で file オブジェクトを得られる。
869 :
デフォルトの名無しさん :2012/10/12(金) 09:08:37.32
>ストリームから utf-8文字を読み出して decode/encode って出来るはずだけど。 例えば、まだ2バイトしか届いていないときはどうしますか?
>869 行読み込みやバッファ用意して処理する。 そういった理由だったら納得。何か特殊なデータ型かと思った。ストリームの中身のデータの型はstr だよね? codecs 使えば、内部の IncrementalDecoder/Encoder がマルチバイト文字の境界を考慮したバッファ管理を行ってくれます。
あ〜あ…
873 :
デフォルトの名無しさん :2012/10/12(金) 12:06:14.18
shelveで、「書き込みが完了するまで処理を待つ」ということはできないでしょうか? メモシステムのようなものを作っているのですが、メモの保存処理をしたあとにすぐにメモ一覧を出すと、直前に保存したメモが表示されないことがあります。 一覧の更新をすると表示されるようになるので、書き込みが完了する前に読み出しを行なってのかと思われます。 ですので、保存処理を行い、その保存処理の中で書き込みが完了するまで待ち、書き込みが完了すれば一覧に遷移するという処理ができないかと思っております。 現在はとりあえずsleep()で1秒待っているのですが、1秒で書き込まれる保証もないかと思うので、なにか確実な方法があればお教え頂ければと思います。
syncとかcloseとか試してみたぁ?
875 :
873 :2012/10/12(金) 13:52:31.00
>>874 はい。デフォルトの状態だと書き込みのされるタイミングが不定だったため、writebackをTrueにした状態で書き込み直後に意図的に.sync()をするようにしておりますが、同様の症状になります。
.close()は意図的には行なっていなかったのですが、意図的に.close()を試してみたのですが同様の症状でした。
>>868 >865の方法が無理なら codecs も使えないよ。最終的には文字列に変換出来ないとだめ。
865のコードはこうなっているんだけど、
>cp932buf = u8buf.decode('utf-8').encode('cp932')
ここでu8bufやcp932bufは何オブジェクトなの?
ぱっと見で、両方ともstr (python2系) だとおもったので、
>>866 で
>unicodeやstrではなく、ストリームデータを扱っています。
と書いた。
#知りたいのはストリームのときにどうするかなのに、strでのやり方を書かれても。
// / / バカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ 馬鹿には無理 / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
867が答えを書いてるじゃん。これじゃだめなの? あとはお前さんが言う「ストリーム」をfile-likeオブジェクトとしてラップしれやればいいだけ。
879 :
デフォルトの名無しさん :2012/10/14(日) 14:46:23.99
ぬーん
>>873 ロックを使わずに並列に読み出そうとしてない?
メモ一覧を読み出すのがマルチスレッドな場合(GUI等)だったら、
ロック(fctl.flock等, windoesの場合は知らない)を使って書き込みが完了するまで待たせるようにする。
スレッド間の同期のみでいいなら、mutexでも可。
>>875 プロセス内で単一のshelve のオブジェクトを使い回ししてるのと、
読み出される処理は別の関数で、別々にshelve.open して読み出されてるとで、状況が変わってきそう。
書き込み後、*その書き込みをしてる関数内で* 一覧を表示してみて、きちんと表示されてますか?
gdbmモジュールがWindowsでも使えたらすごく便利なんだけどねぇ。 単なるkey-valueの格納にSQLiteを使うのは嫌だし、効率も悪い。
883 :
デフォルトの名無しさん :2012/10/15(月) 00:28:04.39
memcached
dict
memcached ってデータ消えなかったっけ?ファイルに保存って出来るの?
numpy
memcachedはクラサバかつ揮発性だし、 pickleはオンメモリじゃないと使えないから大きなデータは格納できない。
へ?
ほ?
>>882 どれくらいの大きさのkey-valueになるの?
SQLiteで十分じゃないの?って思う
性能の要件とかあるの?
dict and pickleで良いとも思うし
memcachedもクラサバ両方を書き出せばいいし
numpyでいいじゃん
NumPyは関係ないだろ。
>>882 2系ならbsddbがWindowsでもつかえたと思うけど
>>895 > バージョン 2.6 で撤廃: bsddb モジュールは、 Python 3.0 では削除されるので、非推奨です。
との事。手元のActivePython(win32) 2.6.5/2.7.2 には既に入ってなかった。(公式、他は未確認)
2系のソース・レポジトリには残ってるけど、ビルドする手間や後々の事を考えると、
新規の場合は、他の保守されてる データベースのモジュールをインストールした方がいいと思う。
1000ならanydbm/dumbdbmが爆速
booksという変数に外部APIから取得したデータを格納し、欲しいデータはbooks.textにあるとします ただしAPIの挙動によって「books自体が空」「booksは存在するがbooks.textは存在しない」といった事が起ります その両方に対応するために以下のコードを書きました これをもっと短く書く方法は無いでしょうか? try: book_name = books.text except: pass 上記のようなコードが20箇所程度あって見た目も保守性も悲惨な事になってしまっています
>>898 コンパクトに書くだけなら、getattr(books, "text", None) とも書ける。
コードの保守を考えるなら、関数にするかオブジェクトをwrapするクラスを作った方がいいね。
__getattribute__ 辺りで属性のカスタマイズ出来るけど、別名でメソッドかプロパティ作った方が楽。
例外を使う場合、例外を捕捉する所は except AttributeError: にしよう
>>898 読み違えた。そのコードだと text属性が無いときは book_name は未定義?
def get_bookname(books): if isinstance(books, Book): book_name = books.text else: book_name = '' return book_name
902 :
デフォルトの名無しさん :2012/10/17(水) 10:35:17.92
馬鹿には無理
903 :
デフォルトの名無しさん :2012/10/17(水) 11:32:23.25
動くのならば 動くのならば
GAEの質問はここで良いでしょうか?
pyramidってどういう場面で使ってる?
王族のお墓として
おとなしくdjangoから見てみることにします
Flask作者の名前ってコナンからとってんのかー
Steamのアカウントでコナンの光彦の画像使ってたから、たぶんそうだね。
>>901 >898より
a.「books自体が空」
b.「booksは存在するがbooks.textは存在しない」
b.1. Bookインスタンスを返すが text がない
b.2. Book以外のインスタンスを返すので textがない
c. books.text が存在する
isinstanceでの型チェックのみでは、(b.1)のケースで、属性が動的に設定されるといった場合を判別できない。
Pythonでは、こういった場合は大抵、アクセスしてみてAttributeErrorを捕まえるか、getattr/hasattr等で処理します。
def get_bookname(books):
return getattr(books,"text","") if books else ""
python3での質問です 2つのリストに存在する共通の値を削除したいのですが ループを使わずに共通の値を発見する方法はありますか? 例: list1 = ["a", "b", "c", "d", "e"] list2 = ["e", "f", "g", "h", "i"] # 共通の値を発見して削除、 この場合は"e" # 結果: list1 = ["a", "b", "c", "d"] list2 = ["f", "g", "h", "i"]
set(list1) & set(list2)
916 :
デフォルトの名無しさん :2012/10/18(木) 13:55:09.38
よ!
>>915 Python 3 では、I/O関係は ioモジュールにまとめられて、内部的にはJavaのI/O周りみたいになってます。
open() は io.open() のエイリアスで、ファイルを開くためのヘルパ関数。
open("hoge.txt", mode="r", encoding="utf-8") は
io.TextIOWrapper(io.BufferedReader(io.FileIO("hoge.txt")), encoding="utf-8") を作る。
open("hoge.bin", mode="rb") は
io.BufferedReader(io.FileIO("hoge.bin")) を作る。
整理しないと良くわからんな
わからんね
921 :
デフォルトの名無しさん :2012/10/18(木) 15:21:47.48
一人で大丈夫?gankいかなくていいかい?
まず、Dive Into Python 3読め 初心者用の解説に書いてあることだから、 そっちを先に読もうよ ライブラリリファレンスを参照して目的の関数を探すのは、 ある程度上級者になってからでいいのでは? 初心者の勉強の仕方ではないと思うよ
.....┏┓ ..┏┓┏┓┏━┓ ┏┓ ┏┓ ┏┓┏┓┏━┓ ...┏┓ __ i⌒i ┏┛┗┓ ┃┣┛┗┫□┣┓ ┃┃ ┏┛┗┓ ┃┣┛┗┫□┣┓ .┃┃ ./ O Oヽ | ┗┓┏╋┳━━┫┣┓┏┻━┫┃ ┏┓┃┃ ┗┓┏╋┳━━┫┣┓┏┻━┫┃ ┏┓┃┃ 〈 |―/ | ノノ┏┛┗┻╋━┓┃┣┛┗┓ ┃┃ ┃┃┗┛ ┏┛┗┻╋━┓┃┣┛┗┓ ┃┃ ┃┃┗┛ ヽ. V ノ ...┃┃┏┓┃┏┛┃┃□┏┛ ┃┗┓┗┛┏┓ ┃┃┏┓┃┏┛┃┃□┏┛ ┃┗┓┗┛┏┓ ( ̄ ̄ ノノ ┗━┛┗┛┗━┻┻━┛ ┗━┛ ┗┛ ┗━┛┗┛┗━┻┻━┛ ...┗━┛ ┗┛
卑猥
おちんちん
どしたん急に
PyChinko
おっぱい村
[%(levelname)s] [%(asctime)s] (%(threadName)-10s) %(message)s この文字列をconfigparserで読みたいんだけどどうエスケープして書けばいい??
解決済みみたいなので、余談になるけど 3系(3.2以降?) だと configparser/loggingとも {} 表記の書式でも書ける様に設定できるみたい。 デフォルトではどちらも % 表記なので、移植性・手間的にはエスケープが安易。 configparserで辞書展開が不要なら以下のように、interpolationで振る舞いを変更出来る。 config = configparser.ConfigParser(interpolation=configparser.Interpolation()) loggingの方は、logging.Formatter や logging.basicConfig の style オプションで変更出来ます。
ループ回数を示す数字を1から3まで変数に代入しながら回したい時、 for i in range(1,4)というふうに、わざわざtoの数字を +1しないといけないのがどうにも性に合わないのですが みなさんは気になりませんか?
1から3まで変数に代入しながら回したい時は for i in range(3) a = i + 1 というふうにするよ
>>933 サンクスです。
+1は避けられないのですね。
rubyみたく、1..3という表記ができれば
直感的でよいのですが。
ちょっと作者に要望出してみます。
>932 はそろそろ 0 を発見した現代人のレベルに追い付くべきだと思うの
>>934 汎用的にはシーケンスの開始は0からだし
n個、n回繰り返すということを踏まえ
for(int i = 0; i < n; i++)
から考えれば何ら不思議はない
どうしてもi<=n的にしたいのなら
好きなようにラッパー関数でも
イテレータでもwhileでも書いて
さもなくばRubyに帰ってください
>>938 不思議とは言っていません。
直感的でないということです。
1,3の形式は残して構いませんから
1..3形式も追加してくれるよう頼んでみます。
気分次第で対応してくれるかも知れません。
何事も言ってみるものですよ。
方法は一つを標榜してるのに気分で対応ってことはない
いやさあ、rangeはforと違ってただのリスト返す関数なんだから、自分で関数作れば良くね?
Python 習い初めのときは 直感的じゃないとか思ったけど 結局慣れの問題なんだよね 文字列分割するときに abcdef -> abc def s="abcdef" s[:3] s[3:] と書けるのは直感的だよね
range(0, 3) -> [0, 1, 2] これのどこが非直感的なのか分からない。数学苦手なのか?
[0, 3)
>>942 超初心者ですからそれは難しいです。
数値だけでなく、3のところが何かの変数であっても
対応できなければなりません。
おそらくPythonのソースレベルから改造が必要では?
>>945 fromとtoの両方を書かせていながら
fromは含んでtoは含まないっていうのは、そういうルールであるとは
理解しますが、直感的でないと思います。
VisualBasicのように、For i = 1 To 3と書けば3を含む言語もありますし。
…ちなみに数学は高校時代零点の常習犯でしたが
関係あるんですかね。
rangeはstart,stopでfrom,toじゃないよ
よく考えると算数の知識がまったくなければ a = b + 3 という表記も非直感的であって、 突き詰めればCOBOL流に行き着くわけですね。 ADD 3 TO b GIVING b
ADD 3 TO a GIVING b
>>949 算数知ってるだけでも直感的じゃないんでは?
= を代入って決めたのはFORTRANが最初?
>947 おおいに関係ある
乙py
末端は 最後+1 で表わすのが慣例なのよ。 Rubyの 3...5 -> [3, 4] 3..5 -> [3, 4, 5] みたいな記法は、一見便利そうに見えて、実際には 「えーっとこれはどっちだったっけ」って混乱するし、 おまけに視覚的にも判別しにくいし、最終的に精神病で死ぬ。
Pythonはスライスもおかしい。 [3:4]で文字の3つ目〜4つ目を切り出すのが直感的な動作と思います。 COBOLなんかはそうなっています。 なのにPythonでは、3つ目のみを取り出す動作となります。 これは[3:3]が空リストを返すという意味のない動作をすることから見ても 明らかにおかしな仕様と思われます。 これも一緒に要望出してきます。ではいろいろ教えてくれてありがとう。
[m:m+n] でn==0のとき空リストが返ってくるのは分かり易いじゃん
宇宙人から見れば地球人がおかしなことしてるように見えるのと同じこと
どうやって要望を出すのかは知らんが,もしその要望が出たら全力で潰しにいかないとダメだな. まあそこまでしなくても門前払いされるのがオチだと思うが.
スライスの変更なんて破壊的どころの騒ぎじゃない 1からやり直すレベル
Rubyと違って日本語じゃ要望出せないから気にしなくておk
いや、流暢な英語で要望出されても良いよ 絶対に通らないから
できればユリシーズばりに精緻を凝らした文章で頼む
この人は冗談で言ってるのか、本気で言ってるのか判断できない。
自分ビルド作っちゃいなよ
馬鹿には無理
> Pythonでは、3つ目のみを取り出す動作となります。 zero origin なので [2] が 3つ目 になります
クラスメソッドで self がある為に 引数の個数を間違えて呼んだときの エラーメッセージで出るアドバイスの 引数の個数がずれるのは慣れるまで 訳が判らなくて混乱したわ しかも省略可能引数があったりして 必須パラメータの個数が変動してるので エラーメッセージ見たために却って混乱するという
ごもっとも
973 :
デフォルトの名無しさん :2012/10/21(日) 08:51:06.20
引数の型が期待されてるものと違うときに n番目の引数の型は何何ってエラー出るけど n+1番目だかn-1番目だかのことを言ってるのだと 気付くまでに数年掛かったぜ
TypeError: foo() takes exactly 3 arguments (2 given) といったエラーメッセージは 3.3 で変更されてるよ TypeError: foo() missing 1 required positional argument 'x' と、具体的に教えてくれるようになった。 3.2 以前なら pylint で、ある程度は、同様のエラーメッセージで教えてくれます。
そうか 3になって良くなったことも少しはあるんですね(棒)
やっぱりRubyのほうがまともな言語だよな。
わざわざ他の言語スレにでてくるようなアホが取り付いてなきゃ Ruby もいい言語なのかもな…
始めて覚えた言語がRubyだったオレは上で直感的じゃないと言ってる人の気持ちはわからなくもないけど、 ただ彼は多分Ruby自体も全然勉強してないよね 他の言語もどうせ上っ面でしょ Rubyの表面をちょこっと知っただけで「直感的最高!非直感的は駄目!」という短絡的思考 それは非直感的なのではなくて、ただ彼が理解できない概念っていうだけでしょ なおかつ「頼めばなおしてくれるかも」なんていう子供みたいな発想に至るのはヤバ過ぎ
モジュロ関数でマッピングする (i % 5) のに便利 割り算でマッピングする (i / 5) のに便利 a + size * i と記述できて便利 空リストが記述しやすくて便利 ふーむ
0/1 base はそれぞれ 人間/コンピュータにとって直感的/都合がよいってのがあるけど、 それとは別に、 添字として扱うことを想定された rangeの返す数列を 数値として扱うことのギャップかな? 意味的な事を考えると indexを積算する って処理にはなんか違和感があるね。 終端+1 に馴染めなければ [offset: offset+size] という考え方はどうだろう? 例えば、1から10個分の範囲 range(1, 1+10) # 11ってマジックナンバーが出てくるのが嫌で、あえてそう記述したりする事はある。
本来、等差数列のリストを作るための関数であるrangeを ループのカウンタに流用せざるを得ないPythonのfor文には 柔軟性が欠けていると言えなくもない。 だがそんなことは作者が初心者に指摘されるまでもなく わかっているはずで、まずいと思ったらとっくに直しているだろう。 直さないということは、プログラミング上は些末な問題に過ぎないということだ。 あきらめて仕様に従うのが大人というものだ。
それはfor文の考え方を間違ってる。というかC脳に支配されすぎている リストを辿るからこそ一貫して柔軟な操作が出来るんだろ
バカでかいリストがあって最初の要素以外を列挙したい場合はどうしたらいいですか?
list[1:]
>>986 リストをスライスするとコピーが作成されるのは避けたいです
それともリストを変更するまでコピーを遅延するようなメカニズムがPythonのスライシングには組まれてるのでしょうか
ビルトインのitertoolsモジュールにisliceクラスがある でも基本的にコピーオンライトなんてどれでも普通じゃなかったっけ そもそもリスト自体要素への参照に過ぎなかった気がするが
isliceいいですね。どうもです
参照するだけならコピー作られんだろw
>>985 巨大なリストでコピーを作りたくないって意図なら itertools.islice
>>982 range(1, 1+10)
自己レスだけど、数値直書きだと
始点変えたいだけの場合、変更箇所が3箇所になるので保守性よくないね。
>991 >982 range(1, 1+10) →じゃなくて→ range(1, 10) とか range(2, 2+10) →じゃなくて→ range(2, 10) とかいう仕様にしとけば良かったのにな
is-liceと読んでしまった人がここにいます
これはおこめですか?(誤)
ボクはココにいるよ
>>992 みたいなアホってプログラミング向いてないからもうパソコン触らないほうがいいと思う
pass
888 888 888 8 8 8 8 8 8 8 8 8 8 8 8 888 888 888 8 8 8 8 8 8 8 8 888 888 888
888 888 888 8 8 8 8 8 8 8 8 8 8 8 8 8888 8888 8888 8 8 8 8 8 8 888 888 888
888 888 888 8 8 8 8 8 8 8 88 8 8 8 8 8 8 8 8 8888 8888 8888 888 8 8 8 8 8 8 8 8 8 8 888 888 888 888
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。