トップページ⇒tech
1001コメント304KB

Pythonのお勉強 Part15

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/12(日) 22:51:44
日本 Python ユーザ会
http://www.python.jp/Zope/
Python オフィシャルサイト
http://www.python.org/
Python 2.5
http://www.python.org/download/releases/2.5/
IronPython
http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython
まとめ wiki
http://www7a.biglobe.ne.jp/~yasozumi/python/wiki/
Pythonの入門書「みんなの Python」
http://www.amazon.co.jp/gp/product/479733665X/

Pythonのお勉強 Part14
http://pc8.2ch.net/test/read.cgi/tech/1161272096/
0352デフォルトの名無しさん2006/11/23(木) 21:16:52
>>351
愛の入力方法がわかりません。
とりあえず漢字・英語・平仮名・片仮名は試したんですが・・・
どうすればいいでしょうか?
0353デフォルトの名無しさん2006/11/23(木) 21:19:10
愛は入力するものじゃないの。
勉強して出直してらっしゃい。
0354デフォルトの名無しさん2006/11/23(木) 21:29:13
>>352
そういうときはコピペが基本だと思う
0355デフォルトの名無しさん2006/11/23(木) 21:39:09
352にはまだ早いな
0356デフォルトの名無しさん2006/11/24(金) 07:47:27
httplibとかurllib,urllib2あるけど
どれをどう使えばいいんですか?
0357デフォルトの名無しさん2006/11/24(金) 07:52:34
>>352
チンコを使え
0358デフォルトの名無しさん2006/11/24(金) 08:11:13
マニュアル読んでなおそういう質問をするレベルなら,urllibを使いなさい.
0359デフォルトの名無しさん2006/11/24(金) 12:37:14
>>350
ファイルオブジェクトと同様の write() メソッドがあるオブジェクトなら何でも可だと思われ。
0360Python初心者(復活)2006/11/24(金) 12:41:25
>>343
>冗談だったんだよ。
遅まきながら…wwwwwwwww
0361デフォルトの名無しさん2006/11/24(金) 13:00:23
ここは親切じゃないインタネットですね!
0362デフォルトの名無しさん2006/11/24(金) 13:03:01
「情けは人のためならず」
・人に情けをかけておくと,巡り巡って結局は自分のためになる
・人に情けをかけて助けてやることは,結局はその人のためにならない
選ぶのは君だw
0363デフォルトの名無しさん2006/11/24(金) 14:48:20
だから必要なのは愛だって言っているじゃない。
勉強して出直してらっしゃい。
ふふふ。
0364デフォルトの名無しさん2006/11/24(金) 14:56:03
SN比が低いなあ
0365デフォルトの名無しさん2006/11/24(金) 15:09:55
364のせいでさらにS/N比が低くなった.
0366デフォルトの名無しさん2006/11/24(金) 15:15:57
perl, python & ruby - chr() vs. Unicode
http://blog.livedoor.jp/dankogai/archives/50696206.html

この問題、もっとスマートに解決することはできないもんでしょうか?
0367デフォルトの名無しさん2006/11/24(金) 15:25:46
>>366
そもそも0x10000を超えるUnicode(滅多に使わないけど)の扱いが不完全なのが原因
おそらくPython 3000で解決する
0368デフォルトの名無しさん2006/11/24(金) 15:27:06
一番問題なのは弾氏。
0369デフォルトの名無しさん2006/11/24(金) 15:30:06
一番一般的に普及しているOSでちゃんとサポートされてないからな>0x10000を超えるUnicode
ちゃんとサポートされれば素晴らしいと思うが、今のところ必要としているのは
言語学者と京極夏彦くらいだろう。w
0370デフォルトの名無しさん2006/11/24(金) 15:36:48
> Unicode文字をそのまま出力できないという点は、実はperlも似ていて、そのためにbinmode STDOUT, ':utf8';という行がある。pythonでは、以下のようにすればいい。

ここは Perl に合わせるならこうだろうなあ。

import codecs, sys; sys.stdout = codecs.getwriter("utf-8")(sys.__stdout__)
0371デフォルトの名無しさん2006/11/24(金) 16:17:07
ほとんど言いがかりに近いような記事だね。弾ちゃんに
・site.pyに encoding = "utf-8" って書け
・unichr()でBMP外の文字使いたけりゃ--enable-unicode=ucs4 でconfigureしろ
って教えてあげたほうがいいのかな。
0372デフォルトの名無しさん2006/11/24(金) 16:22:04
>>371
>・site.pyに encoding = "utf-8" って書け

あわわわわ。
0373デフォルトの名無しさん2006/11/24(金) 16:23:36
>>> utf32chr = lambda n: ('¥U%08X' %(n)).decode('unicode_escape')
>>> utf32chr(0x2A6B2)
u'¥U0002a6b2'
0374デフォルトの名無しさん2006/11/24(金) 16:50:50
福島にて聖戦が始まる。

http://www.python.jp/Zope/PyLog/PyLog/1164123776/1164341843/ [python.jp]
ここは、Lightweight Language(Perl,Python,Ruby,PHP)ユーザーを巻き込んで開催したいと思います。
0375デフォルトの名無しさん2006/11/24(金) 18:46:24
ちょっと気になったんだけど、
pythonのCGIHTTPServerのCGIの処理ってどうしてるんだろう?
同じCGIを複数の人がリクエスト出した場合内部でマルチスレッドで処理してるの?
それともキュー?
どこを見ればわかるの。
0376デフォルトの名無しさん2006/11/24(金) 18:47:46
>>375
ソースコード。
03773752006/11/24(金) 19:00:48
探してみたらソースコードがありましたね。

% cat -n /usr/local/lib/python2.4/CGIHTTPServer.py | grep fork
6 If the os.fork() function is not present (e.g. on Windows),
43 have_fork = hasattr(os, 'fork')
128 if not (self.have_fork or self.have_popen2 or self.have_popen3):
204 if self.have_fork:
205 # Unix -- fork as we should
210 self.wfile.flush() # Always flush before forking
211 pid = os.fork()
0378デフォルトの名無しさん2006/11/24(金) 19:03:26
ずいぶん大雑把な調べ方だな
0379デフォルトの名無しさん2006/11/24(金) 21:13:49
力強い。
0380デフォルトの名無しさん2006/11/24(金) 22:39:38
pythonでCGIを書いているんですけど、ファイルロックをする方法がわかりません。
fctrl.flock()とfctrl.lockf()はファイルオブジェクトではなくファイル記述子を使うものであり、Unixでは使えるけどWindowsで使えるかは不明。
os.open()も第2引数でオプションフラグを指定できるみたいだけど、そのオプションフラグについてはマニュアルにも詳しいことは書いてないし、Windowsでは使えないみたい。
結局、どうすればいいんでしょうか。
0381デフォルトの名無しさん2006/11/24(金) 22:42:12
泥臭いところで苦労するよりDB使えば?
0382デフォルトの名無しさん2006/11/24(金) 22:56:21
listに[]でアクセスするとき、範囲外のindexであれば例外IndexErrorが発生するけど、例外を発生させるかわりにNoneを返すようなメソッドはある?
ちょうどdictのgetと同じようなものが、listにも欲しい。
>>> lst = [1,2,3]
>>> lst.get(4)
None
0383デフォルトの名無しさん2006/11/24(金) 23:57:38
>BMP外の文字使いたけりゃ--enable-unicode=ucs4
悩みどころ。
あの領域の漢字は滅多に出会わないから
無駄な領域喰うのもあれだし、コンパイルし直すのも面倒だし。
さりとて使われるとうまくいかない。
0384デフォルトの名無しさん2006/11/25(土) 01:12:37
>>380
こんなことしたいの?
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65203
別に止めはしないが時間の無駄だと思うぞ。
0385デフォルトの名無しさん2006/11/25(土) 01:17:34
>>382
ないんじゃね?
必要ならlistを継承して作れるけど、可読性が下がる。
0386デフォルトの名無しさん2006/11/25(土) 01:21:59
「エラーを出さないように工夫するプログラミングより、エラーを出して処理するプログラミングの方が楽だ」
みたいなことをPython入門(Pythonプログラミング)に書いてあった気がする
0387デフォルトの名無しさん2006/11/25(土) 06:32:48
>>386 チュートリアルの用語集に書いてある。
0388デフォルトの名無しさん2006/11/25(土) 07:20:40
http://vista.nazo.cc/img/vi6438907986.jpg
0389デフォルトの名無しさん2006/11/25(土) 10:14:41
WindowsでPythonをいじくって遊んでいるのですが、MeCabを利用しようとして躓きました。
MeCabの最新版とMeCab python bindingを落としてきて、MeCabをインストールして、
MeCab python bindingのsetup.pyは↓のページを参考に書き換えました。
http://www.atransia.co.jp/home/fukamachi/Diary/2006/01/15/

またpythonのバイナリは↓を利用しています。
http://www.python.jp/Zope/download/pythonjpdist

しかし、次のような出力が出てインストールできませんでした。
----ここから
running install
running build
running build_py
running build_ext
error: Python was built with version 6 of Visual Studio, and extensions need to
be built with the same version of the compiler, but it isn't installed.
-----ここまで

普段はVC++を使っているので、VS2003は入っているのですが、VC6は持っていません。
VC6無しにインストールすることってできるのでしょうか。
0390デフォルトの名無しさん2006/11/25(土) 10:46:45
python setup.py build --compiler=msvc

かな?
試してないから分からんけど
マニュアル読んでみて
0391デフォルトの名無しさん2006/11/25(土) 10:49:54
コンパイラのバージョンは合わせないといけなかったよーな・・・。
MinGW 使えば本体が VC6 でも大丈夫だと思われ。
0392デフォルトの名無しさん2006/11/25(土) 11:22:01
>>389
あくまで一般論だが、プログラムとそれが依存するDLL
の両者がCランタイム(libc)に依存している場合、そのバージョン/変種は
一致していなければならない。
VC6のDLL版のCランタイムはMSVCRT.DLL、VC7.1(VS2003)ではMSVCR71.DLL
なので、当然まずいわけだ。

Pythonを自分でVS2003でビルドするか、いっそCygwin環境でも使うんだね。
03933892006/11/25(土) 12:28:30
Pythonのバージョンを最新版にしたところ、無事コンパイルすることができ、次の状態までいけました。
リンクがうまくいってない感じなんですが、コレはもうMecabのスレで聞いたほうがいいかな。
MeCab_wrap.cxxはコンパイル時にキャストミスしてたんで、無理やりキャストした。
03943892006/11/25(土) 12:33:43
Pythonのバージョンを最新版にしたところ、無事コンパイルすることができ、次の状態までいけました。
リンクがうまくいってない感じなんですが、コレはもうMecabのスレで聞いたほうがいいかな。
MeCab_wrap.cxxはコンパイル時にキャストミスしてたんで、無理やりキャストした。
0395デフォルトの名無しさん2006/11/25(土) 17:37:44
>>389
ctypes使ったやり方のほうが簡単だと思うよ。

ttp://kugutsushi.s12.xrea.com/blog/index.cgi?id=10

俺が試した環境はWinXp, ActivePython2.4+ctypesモジュール
0396デフォルトの名無しさん2006/11/25(土) 21:08:29
>>329
ZOPE関係者ってイタいな(wwww
0397デフォルトの名無しさん2006/11/25(土) 22:29:26
VCでのコンパイルがからむ質問はCygwin使えとかあほな答えしかかえってこんからやめとけって
0398デフォルトの名無しさん2006/11/25(土) 22:43:24
Cygwin使えよw
0399デフォルトの名無しさん2006/11/26(日) 00:00:09
何かを始めるときに
すぐにT-Shirtsを作るのはどうしてですか?
0400デフォルトの名無しさん2006/11/26(日) 00:15:22
原価が安いからでは?
0401デフォルトの名無しさん2006/11/26(日) 00:17:45
裸じゃ寒いから
0402デフォルトの名無しさん2006/11/26(日) 00:18:35
そこにT-Shirtsがあるから。
0403デフォルトの名無しさん2006/11/26(日) 00:22:59
そろそろ自分の体を隠すような生き方は止めませんか?
0404デフォルトの名無しさん2006/11/26(日) 00:34:38
裸族キタ
0405デフォルトの名無しさん2006/11/26(日) 00:55:47
オレが脱いだら、403はヘコんで引きこもると思う。
0406デフォルトの名無しさん2006/11/26(日) 01:06:00
403 Forbidden
0407デフォルトの名無しさん2006/11/26(日) 02:25:00
dict[]とdict.getを入れ替えて、dictの[]演算子でKeyErrorをださないようにできますか。
dict.get()ではなくあくまでdict[]でアクセスしたうえで、KeyErrorのかわりにNoneが返されるようにしたいです。
d = {}
d.__getitem__ = d.get
としてみましたが
AttributeError: 'dict' object attribute '__getitem__' is read-only
とのことで、dictのメソッドは変更できないみたいです。
0408デフォルトの名無しさん2006/11/26(日) 02:27:03
できるけど危険だから教えない
0409デフォルトの名無しさん2006/11/26(日) 03:09:10
危険で結構ですので教えていただけませんか。
0410デフォルトの名無しさん2006/11/26(日) 03:39:00
なんでそんなことしたいの?
0411デフォルトの名無しさん2006/11/26(日) 03:57:22
class D(dict):
  def __getitem__(self,a):
    return self.get(a)

でそれっぽい動きしてる気がする。けど、あまりお勧めしたくない感じ・・・
0412デフォルトの名無しさん2006/11/26(日) 03:58:31
Rubyと違って、組み込みオブジェクトのdictの動作そのものを変えることはできない。
dictを継承したクラスを作って使うことはできる。
分かりやすく書くなら、

class MyDict(dict):
  def __getitem__(self, k):
    return self.get(k)

もしくは、↓でも同様。

class MyDict2(dict):
  __getitem__ = dict.get

dictのデフォルトの動作そのものを変えられるわけではないので、
ご期待には添えないかもしれませんが、
使うときは、こんな感じになるでしょう。

>>> MyDict({'x':2})
{'x': 2}
>>> x = MyDict(a=1, b=2)
>>> x
{'a': 1, 'b': 2}
>>> print x["a"], x["b"], x["c"]
1 2 None

こんなんでどうでしょうか。
0413デフォルトの名無しさん2006/11/26(日) 07:10:59
以下のサイトにPythonからログインするには、どのように書いたら良い
のでしょうか?
https://www.livly.com/login.php

http://d.hatena.ne.jp/kenkitii/20060216/p1 を見ながら色々試して
みたのですがうまくいきません。ご教示お願いできないでしょうか。
よろしくお願いします。
0414デフォルトの名無しさん2006/11/26(日) 09:45:50
はぁ・・・
0415デフォルトの名無しさん2006/11/26(日) 09:50:04
from urllib import urlopen, urlencode
data = urlencode((("nname","名前"),("password","パスワード"),("login","true")))
print urlopen("https://www.livly.com/login.php";,data).read()

*名前を全角で登録してる場合文字コード注意
0416デフォルトの名無しさん2006/11/26(日) 10:06:41
livlyは動的なswfファイルエクスポートとかしてて、微妙に面白かったり・・・
この手のビジネスとしては極端に成功した例らしいと言う記事をどこかで読んだ・・・
0417デフォルトの名無しさん2006/11/26(日) 17:26:58
python 起動すると「KKCFUNC が組み込まれました」 って出ちゃいます

ttp://okwave.jp/qa2201618.html
このページの通り設定したのですがプロントが
C:\DOCUME~1\USER\MYDOCU~1>
見たいな感じでおかしなままです。
対話形式(>>>ってでるやつ)にもなりません
pythonのフルパスから実行すると普通に実行できるのですが
直せるものなら直したいです ><
0418デフォルトの名無しさん2006/11/26(日) 17:40:10
>>417
edlinを起動しても、そうなるな。
0419デフォルトの名無しさん2006/11/26(日) 18:52:42
>>417
command.com じゃなくて cmd.exe 使えば?
98とかそれ以前はシラネ
04204172006/11/26(日) 19:33:24
>>419
cmd.exeで起動してるんですけどKKCFUNC組み込まれちゃいます
0421デフォルトの名無しさん2006/11/26(日) 20:10:40
KKCFUNCとかedlinなんて名前を聞いたのは何年ぶりだろうか。テラナツカシス。
04224172006/11/26(日) 21:12:07
cygwinのpythonが呼ばれてました
しかもexeなのに24バイトでブツブツ.......

お騒がせしました(^ ^;)ゞ
04234132006/11/26(日) 23:05:33
>>415
ありがとうございました。ただ、教えて頂いた方法でPythonからログインする
事はできたのですが、根本的な問題は解決できませんでした(泣 もしよろし
ければなのですが、ソースをアップしたら、見ていただけますでしょうか?
48KB・2000行弱なんですけど・・・どうかお願いしますです。
0424デフォルトの名無しさん2006/11/27(月) 00:55:30
まずなにが問題なのか
04254132006/11/27(月) 02:07:03
今まではlivyにログインしてなくても http://www.livly.com/myshop.php?rid=3dKu
を開くと販売しているアイテム・島が表示されたのですが、先日からログイン
していないと「ログインしてください」と表示されるようになってしまい、
パースしてアイテム・島を拾う事ができなくなってしまいました。更に、
ブラウザからlivlyにログインしても、Pythonからだと「ログインしてください」
になってしまいます。
そこで、Pythonからログインしておけば回避できるかな?と思い、こちらで
教えて頂きログインしてみたのですが結果は同じでした。cookieの管理が
云々ってサイトを見てPython2.3から2.5に変更しcookielibを操作しようと
思ったのですが、やり方がイマイチわからなくて・・・
0426デフォルトの名無しさん2006/11/27(月) 02:26:05
要するにクッキー保存してないんでしょ。
アカウント持ってないとテストできないようなプログラムをアップされても見てくれる
奇特な人は少ないと思う。
04274132006/11/27(月) 02:50:14
>要するにクッキー保存してないんでしょ。
2週間程度cookieの管理と格闘していながら理解できないヘタレです。すみません。
一応、テスト用のアカウントは作成してあります。テストできる環境の準備は
整えてありますので、見て頂ける方おりますでしょうかm(_ _;)m
0428デフォルトの名無しさん2006/11/27(月) 04:03:41
>>427
氏ねばいいと思うよ
0429デフォルトの名無しさん2006/11/27(月) 06:57:59
下手に出ても>>428みたいな返事しか返ってこないんだから、さっさとどっかにうpして添削よろしくって言い放った方がいいよ。
0430デフォルトの名無しさん2006/11/27(月) 07:39:45
>>425
import urllib, urllib2, cookielib
j = cookielib.CookieJar()
opener = urllib2.build_opener(HTTPCookieProcessor(j))
opener.open("https://www.livly.com/login.php";,data=urllib.urlencode((("nname","名前"),("password","パスワード"),("login","true"))))
#ここでjにcookieが入る。print jで確認可能
req = urllib2.Request("http://www.livly.com/myshop?rid=3dKu";)
j.add_cookie_header(req)
#これでreqのヘッダーに必要なクッキーが書き込まれる。req.header_items()で確認可能
print opener.open(req).read()

#毎回本家からクッキーを取ってくるのがアホくさいと思うなら、FileCookieJarという選択肢も可能
04314132006/11/27(月) 08:34:11
>>415 426 429 430
多少書き換えてしまいましたけどできました。ありがとうございました。
これでこのまま寝ずに仕事してもへこたれません。感謝ですm(_ _)m
0432デフォルトの名無しさん2006/11/27(月) 11:13:43
>多少書き換えてしまいましたけど
どうしてここに引け目を感じているような書き方なのか理解出来ない。
0433デフォルトの名無しさん2006/11/27(月) 11:49:31
>>431
多少書き換えたものを晒しておけば、誰かの肥やしになるかもしれん。
0434デフォルトの名無しさん2006/11/27(月) 14:10:03
簡単な質問で申し訳ないんだけど、
数値A":" リストの内容 "文字列="数値B "文字列="数値C
っていう風に出力したいんだけど、どうすればいいの?
0435デフォルトの名無しさん2006/11/27(月) 14:36:26
print """数値A":" リストの内容 "文字列="数値B "文字列="数値C """
04364342006/11/27(月) 14:39:40
自己解決しました。多少無理矢理ではありますが。
print str(strA) + ": " + str(array[0:4]) + " aaa=" + str(strB) + "ccc=" + str(strC)
としました。※len(array) = 4
04374342006/11/27(月) 14:41:48
>>435変数の付け方がおかしかったです。
print str(intA) + ": " + str(array[0:4]) + " aaa=" + str(intB) + "ccc=" + str(intC)
0438デフォルトの名無しさん2006/11/27(月) 14:42:09
文字列フォーマットを使いなさい。
%s数値やリストも勝手に文字列表記に変換してくれます。

http://www.python.jp/doc/release/lib/typesseq-strings.html
04394342006/11/27(月) 14:42:27
>>437
さらにアンカーを間違えました。もうぐだぐだですいません。
正しくは>>436です。
04404342006/11/27(月) 14:58:08
>>438
素晴らしい。使わさせていただきました。ありがとう。
0441デフォルトの名無しさん2006/11/27(月) 15:03:05
指導料300円になります。
0442デフォルトの名無しさん2006/11/27(月) 15:06:59
文字列フォーマットで変数が多くなると、「この位置に表示される変数はどれだっけ」って
後ろの変数リストを指で数えたりすることない?
0443デフォルトの名無しさん2006/11/27(月) 15:19:41
>442
"%(変数名)s" % locals() はどうだろう
0444デフォルトの名無しさん2006/11/27(月) 15:21:07
>>441
安すぎ。もらわない方がマシ。

>>442
そういうときは辞書を渡す。

http://www.python.jp/doc/release/lib/typesseq-strings.html
のまんなからへん。
>>> print '%(language)s has %(#)03d quote types.' % {'language': "Python", "#": 2}
Python has 002 quote types.
0445デフォルトの名無しさん2006/11/27(月) 15:43:24
>>441
つ●○○
0446デフォルトの名無しさん2006/11/27(月) 17:04:05
それは税込み210円。
0447デフォルトの名無しさん2006/11/27(月) 17:30:26
>>441,446
ドカタ価格。
04484132006/11/27(月) 20:10:49
def (url, hoge):

-中略-

urllib._urlopener = ShopURLopener()
j = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(j))
data = urllib.urlencode((("nname","名前"),("password","パス"),("login","true")))
opener.open("https://www.livly.com/login.php";,data)
#リクエストurlは他defで指定
req = urllib2.Request(url)
try:
data = opener.open(req)
except:
print "失敗"
return 0

教えて頂いたソースが最初動かなくて、こんな感じで動きました。その後、
脱字に気が付いて教えて頂いたソースでもちゃんと動きました。書き換える
必要は全くなかったです。ありがとうございました。
0449デフォルトの名無しさん2006/11/28(火) 01:26:07
今日からPythonの勉強はじめますた。

a=u'ちんちん'
b=u'おっき'
print a+b*2
0450デフォルトの名無しさん2006/11/28(火) 02:19:16
結果は!
結果は!
0451デフォルトの名無しさん2006/11/28(火) 02:20:50
???n???n?¨?A?≪?¨?A?≪
■ このスレッドは過去ログ倉庫に格納されています