くだすれPython(超初心者用) その4

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、
お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>950 辺りで

前スレ
くだすれPython(超初心者用) その3
http://pc12.2ch.net/test/read.cgi/tech/1232055225/

関連スレ
Pythonのお勉強 Part33
http://pc12.2ch.net/test/read.cgi/tech/1240678081/
2デフォルトの名無しさん:2009/05/24(日) 19:32:46
◆関連リンク
Python の Home Page
http://www.python.org/

Python 日本語ドキュメント - Pythonistaのお友達
http://www.python.jp/doc/release/

最新版直リン - 2.Xが推奨。3.Xはライブラリやドキュメントが使えないことも
http://www.python.org/download/

Python のコーディングガイド PEP8
http://www.python.org/dev/peps/pep-0008/

Python のコーディングガイド PEP8 - 日本語訳
http://www.oldriver.org/python/pep-0008j.html

日本語文字列コード問題まとめ
http://python.matrix.jp/tips/string/encoding.html

インタラクティブモードのエンコード
http://python.matrix.jp/tips/compatibility/interact_encoding.html
3デフォルトの名無しさん:2009/05/24(日) 19:34:48
2get
これはどう見てもおかしいだろ。 まず、主語が2。で動詞がget。
2が単数形だとしたら、getsにしないとおかしい上に、目的語がない。
直訳すると「2が得る」 何を得るんだよ!!!いいかげんにしろ。
それを言うなら
I get 2. だろ。しかも現在形だし。 過去形、いや現在完了形ぐらいまともに使ってくれよ。
I've got 2. 少しはましになって来たが、まだ気に入らない。その2だ。
いったいお前は何を手に入れたんだ?2という数字か?
違うだろ、手に入れたのは2番目のレスだろ。
どうも日本人は数詞と序数詞の区別がよく分かっていない節がある。
これらを踏まえて、正しくは
I've got the second responce of this thread.
ここでtheにも注目してもらいたい。このスレの2ってのは
特定の、このレスだけなんだから。だからaでも無冠詞でも なく、the second responceなんだ。
もう一度おさらいしてやる。

I've got the second responce of this thread.
4デフォルトの名無しさん:2009/05/24(日) 19:48:21
http://www.xrea.com/
ここで Python 使っているかたはいらっしゃいますか?
使いやすいですか?何か気をつけることとかありますか?
5デフォルトの名無しさん:2009/05/24(日) 19:55:23
>>4
バージョン2.3とか2.4.3とかだけどそれでもよければ
ttp://www.value-domain.com/xreaip.php
6デフォルトの名無しさん:2009/05/24(日) 19:58:05
確かビルド済みしてバイナリぶち込んだ猛者がいたような
7デフォルトの名無しさん:2009/05/24(日) 20:01:31
>>5-6
ありがとうございます
2.5 以上を想定していたので
とりあえず >>6 さんの方法で出来たひとのサイトとかがみつかるか調べてみます
8デフォルトの名無しさん:2009/05/24(日) 20:10:29
ぐぐると virtual-python の例が多いみたいですが
好きなバージョン入れてやってるひとがいたのでこれをまねしてみます〜
ttp://inforno.net/articles/2008/07/29/using-any-version-of-python-on-xrea-servers
ttp://inforno.net/articles/2009/01/25/using-any-version-of-python-on-xrea-servers-part2
9デフォルトの名無しさん:2009/05/24(日) 20:57:00
なんでこう、python はレンタルサーバーでの地位が低いんだろう。
10デフォルトの名無しさん:2009/05/24(日) 21:14:53
インストールしても誰も使わないから
11デフォルトの名無しさん:2009/05/24(日) 21:42:04
フィトン?ってパールより簡単ですか??
12デフォルトの名無しさん:2009/05/25(月) 10:48:47
>>11
個人的にはフィトンのほうが簡単だった
ウェブだったらぺへぺのほうがいいけどね
13デフォルトの名無しさん:2009/05/25(月) 12:15:17
個人的には(゚∀゚)ラヴィ!!のがおすすめだよ
14デフォルトの名無しさん:2009/05/25(月) 12:17:04
sysライブラリの
stdin.readlineなど利用して
標準入力からキーボード入力したいのですが
バックスペースで日本語を消すと、半分(1byte)だけ消されて
文字化けします。

1文字は1文字としてバックスペースで消す方法を教えてください。
15デフォルトの名無しさん:2009/05/25(月) 12:34:26
コンソールなに使ってんの?
16デフォルトの名無しさん:2009/05/25(月) 19:47:41
円コーディングは?
17デフォルトの名無しさん:2009/05/25(月) 23:00:57
class A(Foo):
  def func(self, **kwargs):
    super(Foo, self).func(**kwargs)

class B(Foo):
  def func(self, **kwargs):
    Foo.func(self, **kwargs)

AとBの違いはなんでしょうか??
18デフォルトの名無しさん:2009/05/25(月) 23:55:02
今のやり方と、昔のやり方
19デフォルトの名無しさん:2009/05/26(火) 00:54:33
super()を使うと実行時に依存関係から適切なメソッドが得られる
Foo.func()は明示的な指定

type()で動的にクラスを生成したりするときしか考慮する必要はないと思う
何も考えずにsuper()を使うのが楽
詳しく知りたいならmroでググってみてくれ
20デフォルトの名無しさん:2009/05/26(火) 01:03:58
メソッド付き関数とか作れるんだな
かっこよすぎ
def Counter(n=0):
 Counter.cout = n
 def increment():
  nonlocal c
   c += 1
 Counter.increment = increment
 return Counter

c = Counter(2)
c.increment()
c.increment()
c.increment()
print(c.cout)
2120:2009/05/26(火) 01:06:09
Counter.countだ
nonlocal cも
なんかに使えますかねこれ
2220:2009/05/26(火) 01:11:34
インスタンスは1つじゃないとちゃんと動かないから無理か
23デフォルトの名無しさん:2009/05/26(火) 01:12:36
関数である意味が無い
素直にクラスにしとけ
2420:2009/05/26(火) 01:19:36
ですよね・・・
ところで"\u2020"とかいう表記はusc2ですか?
25デフォルトの名無しさん:2009/05/26(火) 01:40:17
みんなのPythonすごく読みやすい。超面白いんですけど、毎日ガンガン読んでます。
26デフォルトの名無しさん:2009/05/26(火) 03:18:29
class を関数の様に呼び出すのってどんなのでしたっけ

class Hoge(object):
def __init__(a):
print a

h = Hoge()
これはただのコンストラクタなんだろうけど
そうじゃなくて

h = Hoge()
h() が出来る香具師のことなんですが
27デフォルトの名無しさん:2009/05/26(火) 04:02:55
>>> class Hoge(object):
... def __init__(self):
... print "init"
... def __call__(self):
... print "call"
...
>>> h = Hoge()
init
>>> h()
call
2814:2009/05/26(火) 14:20:57
>>15
コンソールはlinuxのktermとかxtermとかgnome-terminalとか色々試したけど
どれも同じでした

>>16
エンコーディングはUTF-8です

ぐぐっても解消策が出てこないなぁ
29デフォルトの名無しさん:2009/05/26(火) 16:08:15
エンコーディングは?
30デフォルトの名無しさん:2009/05/26(火) 16:11:36
おい!
31デフォルトの名無しさん:2009/05/26(火) 16:26:20
>>28
環境をもっと詳しく。
Linuxのディストリは何?
Python関係なく普通にシェル上で日本語を入力してバックスペース
押したらちゃんと日本語一文字消える?
3214:2009/05/26(火) 16:30:10
>>31
ディストリはarchとubuntuで試しました
pythonに関係なくシェル上だとBSで日本語一文字消せます

ということは、皆さんは普通に消せてるんですね
33デフォルトの名無しさん:2009/05/26(火) 16:39:57
シェルの普通の入力状態じゃなくて、
cat (とか)に何か入力しようとした状態のことを聞いている。
34デフォルトの名無しさん:2009/05/26(火) 16:41:49
以下の例で、print a がposixを返すようにすることは可能ですか?

import os
print os.name
> posix

a = 'os.%s' % name
print a
> os.name
35デフォルトの名無しさん:2009/05/26(火) 16:42:27
あと、ターミナル(xterm とか kterm とか rxvt)が何か、というのが
この場合環境として重要、かも。
3614:2009/05/26(火) 16:43:45
>>33
あ、catとかでも同じ状態になります
てことはどこを修正すればいいんですかねこれ
37デフォルトの名無しさん:2009/05/26(火) 16:44:28
>>34
eval('os.name')
3834:2009/05/26(火) 16:52:40
>>37
d
39デフォルトの名無しさん:2009/05/26(火) 19:52:31
>>36
質問する場所
4014:2009/05/26(火) 22:18:20
ありがとうございました
もう少し調べてLinux板で質問してきます
41デフォルトの名無しさん:2009/05/28(木) 20:34:35
シンプルなソフトウェアキーボードを
作りたいですがpythonだとwxpythonが
良いですかね?

やはりtkinterからおさえておくべき?
42デフォルトの名無しさん:2009/05/28(木) 20:43:32
すでにあったような
4341:2009/05/30(土) 11:33:20
このスレの閑散具合からすると
python自体を止めておいた方が
良いってことか
44デフォルトの名無しさん:2009/05/30(土) 12:18:52
君は何やっても同じ
45デフォルトの名無しさん:2009/05/30(土) 18:05:06
無駄なendを嫌うのと同じように
無駄な話を嫌う傾向にあると思ふ
46デフォルトの名無しさん:2009/05/31(日) 11:02:50
filter(lambda x: x % 3 == 0 or '3' in str(x), range(1, 41))
47デフォルトの名無しさん:2009/05/31(日) 20:21:04
filter(lambda x: x % 8 == 0 or x % 3 == 0 or '3' in str(x), range(1, 41))
48デフォルトの名無しさん:2009/05/31(日) 21:07:22
で、実際python使ってみんなはなにをしているの?
なんかプログラムを作ってるのかな?
49デフォルトの名無しさん:2009/05/31(日) 21:13:59
他に用途ないないと思うが・・・
50デフォルトの名無しさん:2009/05/31(日) 21:22:15
どっちかっていうと日々の作業で使うかな
あと最近はウェブアプリに挑戦
51デフォルトの名無しさん:2009/05/31(日) 21:25:07
変顔の自動化かなぁ
52デフォルトの名無しさん:2009/05/31(日) 22:08:44
あたいは3Dソフトウェアのスクリプトで使ってるよ!
53デフォルトの名無しさん:2009/05/31(日) 23:12:22
>>52
blender?
54デフォルトの名無しさん:2009/05/31(日) 23:35:32
いまいちどんなことができるのかわからないんだけど。
例えば@ファイヤーウォールが反応したら携帯にメールで知らせるとかは?

Aひとつのフォルダに複数のmp3のデータが入っている。名前はごちゃごちゃ。
それを01.mp3〜0n.mp3にファイル名を変換することは可能ですか?
55デフォルトの名無しさん:2009/05/31(日) 23:51:00
コンピュータならできて当たり前だろ……
56デフォルトの名無しさん:2009/06/01(月) 00:02:51
>>54
1はどんなファイアウォールを使ってるかによる
ログをテキストで定期的に書き出してくれるFWなら頑張れば出来る
そうでない場合は可能だけどちょっと難しいかな

2は余裕。osやos.path見てみるといいよ
57デフォルトの名無しさん:2009/06/01(月) 00:26:33
>>56
ご丁寧にありがとうございます。
見てみますね。
はじめてのpython みんなのpythonあたりを読破すればA位は簡単にできますか?
本屋で立ち読みした時に、複雑な電卓をいじってるようで…
いつになったらA見たいなことができるのかな?って疑問を持ちましたので。
ド素人ですいません。
58デフォルトの名無しさん:2009/06/01(月) 00:54:52
>>57
初めてのPythonなら読破しなくても1/3ほど読めば十分じゃないかな
あとは使えそうなライブラリを探してマニュアルを読む

必要な時間については人それぞれ。数時間、数日、数週間・・・
まあ半年かかるなんてことはないから心配いらないよ
59デフォルトの名無しさん:2009/06/01(月) 01:01:37
「はじめての」と「初めての」にとても大きな違いがあります
>>57はきっと「はじめての」なんでしょうな・・・
60デフォルトの名無しさん:2009/06/01(月) 01:07:37
皆さん親切に本当にありがとうございます。
個人的にちょっと読んだだけですが「みんなのpython改訂版」が読みやすかったのですが
(ちょっとだけしか見てませんが…)
これでもOKですか?これでも1/3くらい読めば、ショボイプログラムが作れますか?
明日買ってきます。
61デフォルトの名無しさん:2009/06/01(月) 01:14:48
それは初心者向けで突っ込んだ解説はしていない本だからすぐに全部読めるよ
しょぼいプログラムを作るのが目的でネットの検索と併用すれば十分かと
62デフォルトの名無しさん:2009/06/01(月) 01:42:36
>>59
「はじめての」人柱になってもらおうとか思って
似たタイトルの本があるとはあえて言わなかった。反省している

>>60
1/3じゃ足りないかも。でもたいして問題にはならないよ
2を書くとしたら骨組みはこんな感じ

import os

for i, filename in enumerate(os.listdir(u'.')):
if filename.endswith('.mp3')
os.rename(filename, '%03d.mp3' % i)
63デフォルトの名無しさん:2009/06/01(月) 02:38:56
みんなのPythonの改訂版ってPython3.0対応版でしょ
その辺に転がってるコードが多いのはPython2.x系
言語仕様が一部変わってるから気をつけな

新しいものをとるか古いのを選ぶかは趣味の問題ではあるが
標準以外のモジュールは3.0にはまだ対応してなかったりもするから気をつけなよ
まあ、仕様の変更点を把握しとかないといけないのはどちらを学ぶにしても同じだがね
本はちょっとしたプログラムを書きたいってだけなら挫折しないように薄いのにしときなw
あとはオンラインドキュメントとかで適当に調べつつ作りたいもの作ればいいさ
64デフォルトの名無しさん:2009/06/01(月) 03:06:12
>>56
元々
03.mp3
02.mp3
01.mp3
というファイルがあったとき
01.mp3
02.mp3
03.mp3
に名前を付け替えるのって簡単?
65デフォルトの名無しさん:2009/06/01(月) 03:34:23
一体どこが難しいんだ?
66デフォルトの名無しさん:2009/06/01(月) 03:36:00
>>64
条件が良く分からないけど、番号を昇順に変えるの?
何とでも出来ると思うよ。
67デフォルトの名無しさん:2009/06/01(月) 04:03:07
いや、お前達64が何言ってるのか理解してないだろう。
64が言ってるのはファイル名の重複でリネームするのに失敗する問題。
68デフォルトの名無しさん:2009/06/01(月) 04:04:55
一度別の名前にリネームすればいいじゃん。
69デフォルトの名無しさん:2009/06/01(月) 06:48:48
邪魔になってる方のファイルを別の名前にするんですね
70デフォルトの名無しさん:2009/06/01(月) 07:12:58
rename前に既存調べて既存だったら飛ばせば医院で内科医?
71デフォルトの名無しさん:2009/06/01(月) 07:22:31
>>70
それが >>64 >>67 の意図する動作になってるかどうかは微妙

>>54 の2ならそれで良さそう

とりあえず >>64 は仕様を明確にすべき
72デフォルトの名無しさん:2009/06/01(月) 07:59:17
さすがくだすれw
73デフォルトの名無しさん:2009/06/01(月) 08:56:03
つーか、パイソンと全然関係ないしw
一般のアルゴリズムが分からないって、言語以前の問題だからw
74デフォルトの名無しさん:2009/06/01(月) 15:17:18
swapなんぞ誰でも思いつくアルゴリズムだろ
75デフォルトの名無しさん:2009/06/01(月) 15:51:51
えっと、
スレ違いですので
こちらへどうぞ
http://pc12.2ch.net/test/read.cgi/tech/1243159710
76デフォルトの名無しさん:2009/06/01(月) 21:12:23
>>62さん

素晴らしいコードありがとうございます。
勉強中でとても参考になります。完全に理解できていないのが申し訳ありませんが(汗

具体的な例をお願いできますか?
例えば、C:\Documents and Settings\user\デスクトップ\新しいフォルダ
の中に、
abc.mp3
def.mp3
ghi.mp3
jkl.mp3という4つのデータがあります。
これらをソートした順に01.mp3〜04.mp3にリネームする。

宜しくお願い致します。
77デフォルトの名無しさん:2009/06/01(月) 21:36:39
>>76
その前に自分で書いたコードを貼ってみて
動かなくても全然構わないから

いきなり答え見たら実力つかないよ
78デフォルトの名無しさん:2009/06/01(月) 21:47:43
全然そんなレベルじゃないんですよ(汗
すいません。
79デフォルトの名無しさん:2009/06/01(月) 22:16:23
>>76
指定ディレクトリ内のファイル一覧を取得する
os.listdir、glob.glob等

ファイル一覧を並び替え
list.sort()

ファイル名を変更
os.rename

その他
os.path.join、os.path.abspath

このあたりを調べればいけるんじゃない?
とりあえずosとos.pathモジュールは一通りリファレンスに目を通しましょう。
80デフォルトの名無しさん:2009/06/01(月) 22:19:21
>>79さん
本当にご親切にありがとうございます。
今日さっそく「みんpy」買ってきました。
面白いですね。まだプログラムって感じではないんですが…
とても参考になりました。
またわからない事がありましたら宜しくお願い致します。
81デフォルトの名無しさん:2009/06/01(月) 22:36:13
>>62 のコードだと
mp3以外のファイルがあったら番号とばない?
82デフォルトの名無しさん:2009/06/01(月) 22:52:35
>>81
飛ぶね。失礼しました

count = 1
for filename in os.listdir(u'.'):
if filename.endswith('.mp3'):
os.rename(filename, '%03d.mp3' % count)
count += 1
83デフォルトの名無しさん:2009/06/01(月) 22:57:49
>>79さん
ちょっと片言の言語で作ってみましたがrenameでのアイデアが…
なにかヒントをお願いします。

#coding: UTF-8

import os
TargetPath = u'C:\Documents and Settings\user\デスクトップ\Mariah.Carey'
a=FileList = os.listdir(TargetPath)
print u"[曲名一覧]"
for f in a:
print f
else:
print u"以上"
b=len(a)
print u"全部で",b,u"曲"
c=range(1,b+1)
print c,u"までのリストを作成"

ここまででギブ…曲数分の数値をリストで作ってみて対応できればと…その後は…
そもそも間違った考え方なんですかね…ネットで調べながらなのですいません。
84デフォルトの名無しさん:2009/06/01(月) 23:24:31
>>76
#-*- coding: utf-8 -*-
import os, sys, time, shutil
from math import ceil, log
def rename_to_number(srcdir, ext):
    files = filter(lambda x: x[-len(ext):]==ext, os.listdir(srcdir))
    tmpdir = os.path.join(srcdir, 'tmp%s_%s' % (os.getpid(), time.time()))
    while os.path.exists(tmpdir): tmpdir += '0'
    os.mkdir(tmpdir)
    for f in files:
        src = os.path.join(srcdir, f)
        shutil.move(src, tmpdir)
    fmt = '%%0%dd%s' % (ceil(log(len(files),10)), ext)
    for i, f in enumerate(sorted(files)):
        src = os.path.join(tmpdir, f)
        dst = os.path.join(srcdir, fmt % i)
        shutil.copy(src, dst)
    #shutil.rmtree(tmpdir)  # この行を有効にすると作業後テンポラリを削除します。
if __name__ == '__main__':
    srcdir = sys.argv[1]
    ext = sys.argv[2]
    if ext[0] != '.': ext = '.' + ext
    rename_to_number(srcdir, ext)

# 使い方。このスクリプトを hoge.py と保存(UTF-8)した場合。
# python hoge.py ターゲットディレクトリ 対象拡張子
# と入力
85デフォルトの名無しさん:2009/06/01(月) 23:35:15
>>84さん
すごい。。。
レベルが違いすぎました。
出直してきます。
恥ずかしいですわ
8684:2009/06/01(月) 23:55:00
要求にあってなかったところを訂正。

ファイル名の先頭が 0 になるようにする。(12行目)
×    fmt = '%%0%dd%s' % (ceil(log(len(files),10)), ext)
○    fmt = '%%0%dd%s' % (1+ceil(log(len(files),10)), ext)

番号を 0からスタートじゃなく、1からにする。(15行目)
×        dst = os.path.join(srcdir, fmt % i)
○        dst = os.path.join(srcdir, fmt % (i+1))
87デフォルトの名無しさん:2009/06/02(火) 00:01:08
ディレクトリの指定は必要ないんですか?
88デフォルトの名無しさん:2009/06/02(火) 00:19:05
けーすばいけーす
89デフォルトの名無しさん:2009/06/02(火) 17:09:47
お勉強スレのほうに書いたのですが、ちょっと質問のレベルが低すぎたみたいなので、こちらで聞かせていただきます;;

初歩的な質問で申し訳ありません。
.pyのついたファイルをウィンドウズで実行したいのですが、どのように設定をしたらいいでしょうか?

python-3.0.1をインストールしてみたのですが、どうしたらいいのかイマイチよくわかりません;;
90デフォルトの名無しさん:2009/06/02(火) 17:16:18
Python2.6.2をインストールして*.pyをダブルクリックしてみるよろし
91デフォルトの名無しさん:2009/06/02(火) 17:32:05
>>89
Python 3.0 はプログラミングの初学者には今のところ向いてないよ
>>90 の言う通りにしてコマンドプロンプトの使い方も併せて調べておくといいと思う
92デフォルトの名無しさん:2009/06/02(火) 18:13:35
ありがとうございます!
2.6.2ですね。
試してみます。
93デフォルトの名無しさん:2009/06/02(火) 23:50:54
>>84
素敵だが初心者にやさしくないなぁ
無駄に丁寧だから本質じゃない部分につい目がいってしまう
94デフォルトの名無しさん:2009/06/03(水) 01:05:17
>>93
本当にそうだな。
ただ、あそこまでやるなら、テンポラリディレクトリ作るのに何故
tempfile.mkdtemp()を使わないのかが非常に謎。
95デフォルトの名無しさん:2009/06/03(水) 07:09:58
            /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /
96デフォルトの名無しさん:2009/06/03(水) 18:04:51
windows xp sp3
python2.5.3

try:
  getattr(obj, 'undefined_method')
except AttributeError:
  pass

だいぶ省略していますが、こんな感じのコードがあり、ここでmain内でエラーが発生すると
UnboundLocalError: local variable 'AttributeError' referenced before assignment

と出てしまいます
AttributeErrorが見つからない理由と、そもそもUnboundLocalErrorがなんなのかよく理解出来ていないのですが、
原因をご存知の方いますでしょうか?
9796:2009/06/03(水) 18:24:44
ごめんなさい解決しました
その前に書いてあった
except ImportError, AttributeError:
の括弧忘れでした。
98デフォルトの名無しさん:2009/06/03(水) 18:27:33
UnboundLocalError: ローカル変数名のリストにはあるけどまだ宣言されてないよ
NameError: とにかくそんな名前知らんよ
99デフォルトの名無しさん:2009/06/03(水) 19:14:50
>>97
エラーが出なくなっただけで
解決はしていないと思うよw
100デフォルトの名無しさん:2009/06/03(水) 19:19:47
学生時代に資格試験取得でcは勉強したのですが、
社会人になってからは言語は一切触れてません。

インフラ側の人間だったのですが、
言語もかじっておきたくpythonをと考えています。

web上の入門サイトをいくつかやってる最中ですが、
いまいち手応えがありません。

そこで、勉強になるような課題?に適したものってなにかありますでしょうか。
また、Django、Ploneも気になっているのですが、
そうした勉強というのは市販されているテキストを一通りできれば
掴めるものでしょうか。

*正直、業務でも活かせることができるまでを
 意識した勉強の仕方がわからないのが困っています、、、
101デフォルトの名無しさん:2009/06/03(水) 19:48:45
>>100
まず要点をまとめてわかりやすく説明することを勉強しるw
102デフォルトの名無しさん:2009/06/03(水) 19:59:08
オラ、宇宙一強くなりてえだ!
103デフォルトの名無しさん:2009/06/03(水) 22:17:38
DjangoにしろPlone(Zope)にしろ癖が強いから初めての人には勧められないな
>>100に明確な目的があるなら別だけど
時間に迫られてないけど面倒な作業を自動化してみる辺りからやってみたら?
104デフォルトの名無しさん:2009/06/03(水) 22:41:03
クックブックでも読めば?
そして己の無知を自覚して初めてのPythonに取り組む
まあ、業務で即生かせるようにはならないがな!
105デフォルトの名無しさん:2009/06/03(水) 23:23:42
みんなのPython改訂版のP.119の一番下のサンプルコードおかしくありませんか?
お持ちの方がいましたら、見てみてください。
>>>for cnt in range((len(seq)):
... print seq[cnt]
...

です
106デフォルトの名無しさん:2009/06/03(水) 23:38:25
端から見ると特におかしくないようだが・・・
107デフォルトの名無しさん:2009/06/03(水) 23:52:39
108デフォルトの名無しさん:2009/06/04(木) 00:36:51
カッコ。
109デフォルトの名無しさん:2009/06/04(木) 02:20:26
>>100
ここの課題でもやってみれば?
http://pc12.2ch.net/test/read.cgi/tech/1153585095/

Django, Plone は 「Python 自体の勉強」 にはお奨めしない
110デフォルトの名無しさん:2009/06/04(木) 03:36:56
とりあえずver2.5の日本語ドキュメントでいいから目を通せ。
チュートリアルをひととおりやって、それが終わったらライブラリリファレンスを読む。
用途や意味の分からないライブラリがあったら調べて、どういう時使うのか理解する。

目的ありきでもいいのかもしれないけど、道具を徹底的に理解するのも大事だと思う。
標準ライブラリだけでも、かなり実用的なものが揃ってるから分かってくると楽しいよ。
111デフォルトの名無しさん:2009/06/04(木) 10:01:10
>>105
ひどい書籍ですね!
ぜひとも買って確かめなければ!!!
112デフォルトの名無しさん:2009/06/04(木) 12:55:57
>>100

> web上の入門サイトをいくつかやってる最中ですが、
> いまいち手応えがありません。

手応えがありませんって、
簡単すぎて全部わかっちゃったのか、
基本も理解出来ないのか、
どっちなんだ?

基本がわからないんだったら、何度も読み返して、
くだらない例題だと思っても、
自分で実際にコードを書きまくって理解しろよ。
113105:2009/06/04(木) 23:00:47
>>>for cnt in range(len(seq)):
... print seq[cnt]
...
でした。でもこれでもおかしいですよね?
len()への引数で文字列を扱う際は""。
結果的にはどうしたいのか謎ですが、これが正解に近いですか?
>>>a="seq"
>>>b=range(len(a))
>>>b
[0,1,2]
>>>for cnt in b:
... print a[cnt]
...
s
e
q
>>>
ではないですか?

ってか単純に文字列に""が足りないだけで
>>>for cnt in range(len("seq")):
... print "seq"[cnt]
...
s
e
q
でしょうか?上記の例は詳しくやってみました。
114デフォルトの名無しさん:2009/06/04(木) 23:04:44
seqが変数なんだろ?
前で代入されてるんでしょ?
115デフォルトの名無しさん:2009/06/04(木) 23:10:32
105は友達がいないせいでmixi垢を持ってないんだな。
なによりそれが可哀想だ。
116デフォルトの名無しさん:2009/06/04(木) 23:11:47
まあ、2ちゃんに貼ってあるmixiのリンクは普通踏まないがな・・・
117105:2009/06/04(木) 23:14:00
>>114
かなり前までさかのぼっても代入された記述はないんですよ

>>115
確かに友達は少ないかな?w
mixi垢ってなに(汗
118デフォルトの名無しさん:2009/06/05(金) 00:09:14
書籍のサンプルコードなんだから一部抜粋なんて
普通にあるだろ。そうでなければタダの誤植。

だいたいseqっていう名前から
何らかのシーケンスを表す変数だって想像しろよ。
"seq"っていう文字列だなんて普通は思わないよ。
119デフォルトの名無しさん:2009/06/05(金) 00:14:38
>>113
range(len(seq))はforで添え字アクセスをしたい場合に使う慣用句
こんな感じに使う

>>> lines = [u'1行目', u'2行目', u'3行目']
>>> for linenum in range(len(lines)):
... print '%d: %s' % (linenum + 1, lines[linenum])
...
1: 1行目
2: 2行目
3: 3行目

後々わかる日が来るから深く悩まず先に進むのが吉
120デフォルトの名無しさん:2009/06/05(金) 00:18:22
>>119
あ、linenumになってないね。
linenum → i に訂正
121デフォルトの名無しさん:2009/06/05(金) 00:29:17
おかしいのは105の脳みそでした
122デフォルトの名無しさん:2009/06/05(金) 02:17:09
>>105 さんの脳みそ本当にだいじょうぶかなぁ
ぜったい普通じゃないよね かわいそう
123デフォルトの名無しさん:2009/06/05(金) 03:11:03
クラスAのなかで[1,2,3]というリストを作ろうとしています。
で、次のようにコーディングしたらselfが定義されてない、って怒られました。
class A:
def __init__(self):
self.x = []
for i in range(1,4):
self.x.append(i)



Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
class A:
File "<pyshell#5>", line 5, in A
self.x.append(i)
NameError: name 'self' is not defined

なにがまずいのかわかりません。どなたかご指摘くださるとありがたいです。
124デフォルトの名無しさん:2009/06/05(金) 03:23:15
>>123
インスタンスメソッドの第一引数(慣習としてselfを使う)は
インスタンスオブジェクトを指す。
その for 文はインスタンスメソッドの外側にあるので、クラスを
生成するときに実行される。その時にselfは存在しない。
解決するにはインデントを修正する。
class A:
  def __init__(self):
    self.x = []
    for i in range(1,4):
      self.x.append(i)
ただし、こちらの方が綺麗
class A:
  def __init__(self):
    self.x = range(1,4)
125デフォルトの名無しさん:2009/06/05(金) 10:02:50
インデントがずれてるんじゃねえの?
スペースを全角に変換してもういちどコード張れや>123
126デフォルトの名無しさん:2009/06/05(金) 11:08:44
>>124
ありがとうございます。
インデントはつけています。投稿時につぶれてしまいました。すみません。

>>125
インデントは次のようにつけています。

class A:
        def __init__(self):
                self.x=[]
        for i in range(1,4):
                self.x.append(i)
127デフォルトの名無しさん:2009/06/05(金) 11:13:27
>>126
バロス(wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
128126:2009/06/05(金) 11:31:20
あ〜、
for i ...
のインデントは
def __init__ ...
より内側に来なきゃいけないのかな?
どうもselfがよくわからんorz
129デフォルトの名無しさん:2009/06/05(金) 13:20:52
self.x = [] の次の行は
既に別の空間だ
130デフォルトの名無しさん:2009/06/05(金) 15:50:40
コードは
$ sed -e "s/ /\ /g" test.py
みたいに正規表現でhtmlの空白に置換するといいよ
131デフォルトの名無しさん:2009/06/05(金) 19:49:02
すごい初歩のことですみません。
リストでスライスのことですが、

a=range(10)
a[1:3]
1,2

となります。

なぜ、1,2,3にならないのでしょうか?
0からのインデックスという説明がされているのですが、
0,1,2,3,4,5,6,7,8,9
とするのならば、a[1,3]であれば、1,2,3ではないのですか?
こんなところでつまづいてしまっているのですが、どのように理解すればよいのでしょうか?
132デフォルトの名無しさん:2009/06/05(金) 19:56:23
後ろから2行目に間違いがありました。
a[1:3]でした。
133デフォルトの名無しさん:2009/06/05(金) 19:59:19
>>131
スライスにおけるインデックスは文字の隙間と考えるのが定番
http://www.python.jp/doc/release/tut/node5.html#SECTION005120000000000000000
134デフォルトの名無しさん:2009/06/05(金) 20:03:08
>>131
開始点は含み、終了点を含まない範囲を指定している。
記号で書けば、 [begin, end)
こうすると、長さ0の範囲を [n:n] で表せる。
もしくは、長さを end - begin で計算することができる。
C++でも同じ考え方をしているよ。
135デフォルトの名無しさん:2009/06/05(金) 20:04:16
>>133
なるほど。文字と文字の隙間にインデックスが付けられているのですね。
文字自体についているわけではなかったのか。
疑問が解けました。ありがとうございました。
136デフォルトの名無しさん:2009/06/05(金) 20:06:47
何につけ作法は作法で「そういうもの」と覚えてしまう方が早く学習進んで良い
理由付けやルールなんかは言語作者のもんだしさ…
137デフォルトの名無しさん:2009/06/05(金) 20:09:47
134さんもありがとう。
133さんのリンク先の図解で理解できました。
また、計算する際にも利用できるのですね。
今のところ、図解が理解できたので良しとします。
m(_ _)m
138デフォルトの名無しさん:2009/06/05(金) 20:27:42
>>136
確かにそうなのかも知れないですけど、モヤモヤしていて理解できないことって、気持ちが悪いです。
しかも難しくて理解できないことじゃなくて、誰でも疑問を持ちそうな初歩的なことでしたから。
インデックスが、文字自体に付いていないということに気付きませんでした。
139デフォルトの名無しさん:2009/06/05(金) 20:34:20
小学校の算数レベルだろ
140デフォルトの名無しさん:2009/06/05(金) 20:40:24
うーん、そうなのですか?
今の算数は、インデックスが0から始まりそれは文字に割り当てられてのではなく、
隙間に割り当てられているって習うんですか?
私に時には習った覚えはないです。
141デフォルトの名無しさん:2009/06/05(金) 20:42:15
誤字になってしまったので、書き直します。

うーん、そうなのですか?
今の算数は、インデックスが0から始まりそれは文字に割り当てられるのではなく、
隙間に割り当てられているって習うんですか?
私の時には習った覚えはないです。
142デフォルトの名無しさん:2009/06/05(金) 20:46:20
>>141
釣られなくていいから
143デフォルトの名無しさん:2009/06/05(金) 20:58:16
>>142
そっくりそのままお前に返したいw
144デフォルトの名無しさん:2009/06/05(金) 21:46:27
>>143
くりそつ
145デフォルトの名無しさん:2009/06/05(金) 22:37:15
つーか、単に-1に合わせてるだけの希ガス。
146デフォルトの名無しさん:2009/06/06(土) 01:15:51
end - beginで length が取れるのが一番の魅力だと思う
147デフォルトの名無しさん:2009/06/06(土) 09:58:05
>>146
カウンタが1から始まったりendが含まれる系の言語では
あちらこちらに +1 とか -1 が散らばってて、一旦バグると
どの +1 が間違ってるのか判らないもんな。
148デフォルトの名無しさん:2009/06/06(土) 11:47:27
C とかで書くときもやっぱり
for (i = begin; i < end; i++)
だな。
for (i = begin; i <= end; i++)
とか書いてるのみるとイラッとする。
149デフォルトの名無しさん:2009/06/06(土) 12:39:39
>>148
場合によるね。
タグの値を順番になめる場合とか、結構 <= で比較する場合もあると思う。
for (tid = ID_START; tid <= ID_FINAL; ++tid) とか。
150148:2009/06/06(土) 12:42:56
>>149
うん 場合によるとおもう 必要なときもあるよね
でも <= を使うときにちょっといやな気分になるのはおれだけかな
151デフォルトの名無しさん:2009/06/06(土) 12:54:49
俺もなる。基本的に序数の場合はそれでいいと思う。
ただ
for (double alpha = 0.0; alpha <= alpha_max; alpha += step)
みたいに実数値の範囲みたいなのは<=じゃないとキモいと思う
152デフォルトの名無しさん:2009/06/06(土) 14:00:30
普通はID_FINALってやつを最後の次の値として定義するけどな。
そうでないと斜め読みしてるときにいちいち目がとまって
本当にただしいか確認しないとといけない。

もちろん、>>151みたいなalpha_maxとかINT_MAXみたいに
どうしようもない場合もあるんだが。

郷にいれば郷に従えみたいな感じかなあ。
153デフォルトの名無しさん:2009/06/06(土) 14:05:25
と思ったけどそうでもないかな。
今のなしで。
154デフォルトの名無しさん:2009/06/06(土) 14:07:10
0〜N-1なら、i<Nで、
A〜Bなら、i<=Bだな。
155デフォルトの名無しさん:2009/06/06(土) 14:14:25
初心者には難しい話しているな(汗
156デフォルトの名無しさん:2009/06/06(土) 15:42:24
>>151
なんで?
157デフォルトの名無しさん:2009/06/06(土) 19:41:22
おまえら、JDBCでも1ベースなのはなぜなんだぜ?
158デフォルトの名無しさん:2009/06/06(土) 22:25:54
Pythonの場合xDBCは不要
159デフォルトの名無しさん:2009/06/06(土) 23:25:49
DBAPI 使う罠
160デフォルトの名無しさん:2009/06/08(月) 10:48:32
>>158

マジすか?
Mac から Microsoft Access データを読み書きする方法教えやがれです。
161デフォルトの名無しさん:2009/06/08(月) 12:04:12
質問です!
最近、BlackJumboDogを使ってWindowsXPでWEBサーバを立てたのですが
PerlとRubyは動くのにPythonが動きません。
cmdから「perl -v」「python -v」「ruby -v」をやるとエラーの雰囲気は無い応答が帰ってくるので
問題ないとおもうのですが、何か原因がわかるかたいますか?
ちなみに「python -v」を打ち込むとperlやrubyではバージョンとかが出るのですが
pythonだけ対話モードみたいなのに入ります。
cgiの中身は以下のようになってます。

#!/python

# -*- coding: utf-8 -*-
import cgi
import cgitb
cgitb.enable()

print "Content-Type: text/html"
print
print "hello world."

アクセスすると真っ白です。
どなたかお助け願います。お願いしますよろしくお願いします!
162デフォルトの名無しさん:2009/06/08(月) 12:17:42
>>161
かなり特殊なサーバーみたいだね。
http://www.kamezoh.net/bjd-doc/bjd-doc/WebCgi.html
これをみると、拡張子とインタプリタの関連付けを一個一個埋め込みで実装している
ような気がする。で、Pythonには対応していないから実行できなさそう。
163デフォルトの名無しさん:2009/06/08(月) 12:29:30
>>162
まま、マジですか!
ありがとうございます。
原因がBlackJumboDogにあるとは考えてなかったので
それを念頭にまたググってみます。
164デフォルトの名無しさん:2009/06/08(月) 13:15:30
>>161
python -V (大文字)
165デフォルトの名無しさん:2009/06/08(月) 15:08:16
>>164
多分bingoだろうな。どうして--helpとか、-hをまずしないのだろうか。
166デフォルトの名無しさん:2009/06/08(月) 15:23:13
ついでに晒しとく

http://6924.teacup.com/kamezoh/bbs
かめぞ〜掲示板
雑談 兼 避難所

げ! 投稿者:かめぞ〜 投稿日:2008年 9月 4日(木)20時34分22秒   返信・引用
勝手に広告なんか入れやがって・・・SPAM業者と変わらんではないか。

掃除掃除。( ´〜`)y-~~


空いた時間を有効活用
バイト探しはお任せ。高時給から短時間バイトまでおすすめ情報を比較。

リフォームしませんか
リフォーム情報が満載。人気のリフォーム会社を徹底比較。

おしゃれ女性かつら情報
ファッションから医療用まで、女性用かつら・ウィッグ情報はコチラ。
167デフォルトの名無しさん:2009/06/08(月) 17:22:26
>>161
特別な事情やこだわりがない限り
WebサーバはApache使ったほうがいいんじゃまいか
168デフォルトの名無しさん:2009/06/08(月) 19:40:31
>>161
俺はANHTTPDを使ってる
これならPythonだろうがなんだろうが動くぞ
169デフォルトの名無しさん:2009/06/08(月) 20:20:46
Winなら、Linuxの仮想環境作ってその中でWeb鯖立てるのが本当はおすすめ
170デフォルトの名無しさん:2009/06/08(月) 22:40:41
あの〜インタラクティブシェルでだらだらコードを書いた後にクリアしたい(今までのコードをを消したい)
時は再起動しかないですか?(プログラムを)
171デフォルトの名無しさん:2009/06/08(月) 23:08:55
wsgiだろ常考
172デフォルトの名無しさん:2009/06/09(火) 00:40:26
>>162
へえ、と思ってソース(TVWeb.cpp)を見たが、以下のようなロジックなので
pythonインタープリターとパラメーターがちゃんと1行目に書いてあれば
大丈夫っぽい。

1行目が#!で始まっている
 →perlという文字があればperl、rubyという文字があればrubyと見なす
 どちらでもなければコマンドへのフルパスと見なす(/は\に置換)
1行目が<?で始まっている
 →phpと見なす

何がcgiモジュールなのかは、設定ダイアログで設定した拡張子で判断する。
ただし、拡張子と実行コマンドが紐付けされるわけではなく、上記のロジックで
判断される。
173デフォルトの名無しさん:2009/06/09(火) 03:47:45
>どちらでもなければコマンドへのフルパスと見なす(/は\に置換)

じゃあ
#!c:/Python26/python.exe
って書かないといけない訳?
174デフォルトの名無しさん:2009/06/09(火) 07:54:25
だっさ
175デフォルトの名無しさん:2009/06/09(火) 22:11:34
/cygdrive/c/IronPython/py2/ipy.exe
176デフォルトの名無しさん:2009/06/10(水) 08:07:17
Python CGI
http://pc11.2ch.net/test/read.cgi/php/1163513344/

いつまで板違いの話をしてんの
177デフォルトの名無しさん:2009/06/10(水) 09:16:42
海の日
178デフォルトの名無しさん:2009/06/10(水) 11:44:06
つゆ入り
179デフォルトの名無しさん:2009/06/10(水) 22:56:31
>>176
他の板に適切なスレがあるからと言って、即スレ違いということにはならん。
誘導自体は否定しないけどね。
180デフォルトの名無しさん:2009/06/11(木) 16:09:25
アフォ毛
181デフォルトの名無しさん:2009/06/11(木) 17:10:28
pythonもオブジェクト指向も初心者です。
次のようなことをしたいと思ってます。

クラスA、クラスB、クラスCがある。
1、クラスBからの出力を、クラスAが入力として受け、クラスAのなんらかのメソッドを実行する。
2、クラスAのメソッド実行終了後、クラスCのメソッド実行に移る。

どうやったらいいか、思考の材料さえ頭の中にない状態です。キーワードだけでも教えてください。
182デフォルトの名無しさん:2009/06/11(木) 18:00:42
183デフォルトの名無しさん:2009/06/11(木) 19:56:01
>>181
まず、何でもいいから
「クラスを定義してインスタンスを作ってメソッドを実行する」
くらいは出来るの?
184181:2009/06/11(木) 20:18:11
>>183
ようやくそれができるようになった段階です。
185デフォルトの名無しさん:2009/06/11(木) 21:57:35
前にも出ましたが、「ファイル名の書き換え」
例えばディレクトリ指定はコード内に書く。
フォルダ内のごちゃごちゃ名前のmp3ファイルをa01.mp〜a0n.mp3まで順に書き換える。
参考にさせて頂きたいのですが、サクサク書ける方いましたら宜しくお願い致します。
186デフォルトの名無しさん:2009/06/11(木) 22:15:48
Python何が得意なの?
webサーバーのCIとか得意ですか?
187デフォルトの名無しさん:2009/06/12(金) 00:21:57
>>186
Pythonは、汎用のプログラミング言語だから、大抵の事に適しているよ。

デスクトップアプリ: BitTorrent, DropBoxクライアントなど
Webアプリ: Zope, Django, TurboGears
埋め込み: 各種ゲーム、CG
サーバー: Webサーバー、FTPサーバー、メッセージングサーバー
188デフォルトの名無しさん:2009/06/12(金) 03:17:45
なんか板違いが多いな
web板逝けよ
http://pc11.2ch.net/test/read.cgi/php/1163513344
189デフォルトの名無しさん:2009/06/12(金) 07:28:25
それコピペ
190デフォルトの名無しさん:2009/06/12(金) 08:55:15
それもコピペ
191デフォルトの名無しさん:2009/06/13(土) 22:57:07
関数の戻り値ってのがちょっと理解できないんですが、
これってどういう目的で行うんですか?関数によって返されたオブジェクトを変数に代入すれば同じ
効果ですか?
ちょっとわかり難いので、噛み砕いてご説明いただけると幸いです。
プログラミング自体初心者です。宜しくお願いします。
192デフォルトの名無しさん:2009/06/13(土) 23:31:07
一回スパゲッティを作ってみるといいよ
193デフォルトの名無しさん:2009/06/14(日) 00:20:46
スパゲッティと関係あるんでしょうか
194デフォルトの名無しさん:2009/06/14(日) 01:04:35
引数が入力なら戻り値は結果だよ

例えば足し算の関数 add を作ってみる

def add(x, y):
  return x + y

これを answer = add(2, 3) と使うと、
add さんに 2 と 3 を足してくれーと頼んで、add(2, 3) はその結果の 5 に置き換わると考えてかまわない
つまり answer = 5 みたいになって、answer には 5 が代入される
answer = add(2, 3) * 3 なら answer = 5 * 3 みたいになって 15 が代入される
195デフォルトの名無しさん:2009/06/14(日) 09:46:43
reduceがようわからんのですが
196デフォルトの名無しさん:2009/06/14(日) 10:38:01
>>195
おれもよくわからんのですが、forループで書くよりreduceで書いたほうがカッコいいというのは分かる。
つまり結果が一個になるforループはreduceで書いてる…

おなじく結果の個数が変わらないforループは、mapで書いたほうがカッコいいのでそうしてる。
197デフォルトの名無しさん:2009/06/14(日) 12:08:24
>結果が一個になるforループはreduce

とは限らないんだよねぇ
198デフォルトの名無しさん:2009/06/14(日) 12:30:03
>>197
えー
教えてくだしあ
199デフォルトの名無しさん:2009/06/14(日) 12:35:10
reduce は

x1 ⊕ x2 ⊕ ... ⊕ xn

のこと。
リストx1, ..., xnと2項演算子⊕を与えられればこの計算は定義できるでしょ。
200デフォルトの名無しさん:2009/06/14(日) 12:39:17
>>194
ありがとうございます!
returnを使わないと、戻り値を変数に代入できないのですが、
それを代入できるようにするのがreturnと考えてもOKですか?
201デフォルトの名無しさん:2009/06/14(日) 12:49:58
>>200
Pythonに代入というものはない。
すべてbindingだ。
202デフォルトの名無しさん:2009/06/14(日) 12:51:45
>>200
不思議な頭の構造してる人だなぁ。
returnを使わないと、戻り値がそもそも「ない」。
あなた「戻り値」って何だと理解しているわけ?
203デフォルトの名無しさん:2009/06/14(日) 12:55:10
「戻り値」=「結果」?
>>returnを使わないと、戻り値がそもそも「ない」。
っていうのがよくわからないんですよね
参考書などではreturnのところがprint文で結果を表示するようになってますよね。
その違いってなんですか
204デフォルトの名無しさん:2009/06/14(日) 12:56:30
なんか着眼点がずれてる。
205デフォルトの名無しさん:2009/06/14(日) 12:58:55
えー
newlist = reduce(lambda x,y: x+y, inputlist) リストの内容を全部連結したリスト作る
たとえばこんなreduceもあるかもしれんけど…
結局どういうとこで使うのが一番カッコいいのか良く分からんのですよ。
逆に正直に言うとですね、「コイツこういうとこではreduce使えよバカ」と思われないためには
どうしたらよいでしょうかw
206デフォルトの名無しさん:2009/06/14(日) 13:03:18
>>203
呼び出して任せて何かさせて終わり、なら、戻り値は要らない。
呼び出して結果を報告させるには、戻り値が必要。
207デフォルトの名無しさん:2009/06/14(日) 13:05:49
「関数の呼び出し側の都合」と、
「関数内部の都合」がごっちゃになってるんじゃね?

関数は作る人と使う人がいる。
208デフォルトの名無しさん:2009/06/14(日) 13:06:01
>>205
速度面などで必要ないなら使わなくておk
209デフォルトの名無しさん:2009/06/14(日) 13:06:39
>>205
使う意義がよく分からないものは無意味に使わないのが
Python的にはカッコイイ。
210デフォルトの名無しさん:2009/06/14(日) 13:09:48
高階関数にreduce的な関数を渡す必要があるときは reduceを使う。
わざわざlambda でごちゃごちゃと車輪の再発明するのはカコワルイ。
もっともreduceをとる高階関数なんて、見たことないけど。
211デフォルトの名無しさん:2009/06/14(日) 13:13:29
はっきり言うとreduceはいらない子。
使わなくてよろしい。
212デフォルトの名無しさん:2009/06/14(日) 13:17:14
>>211
非常にすっきりしました。
map/reduceの兄弟、兄は本当に便利な子だけど弟は「はっきり言って要らない子なのよね」
とつぶやく母、それを聞いてしまい泣きながら家を飛び出すreduceくんということですね。
213デフォルトの名無しさん:2009/06/14(日) 13:21:02
関数型プログラミングやろうとするとreduceの出番も出てくるけど、
Pythonの場合、関数型にこだわる意味がないからな。
214デフォルトの名無しさん:2009/06/14(日) 13:28:54
>>203
初心者が対話型プロンプトで標準出力への出力と
関数の戻り値が区別つかなくなるのは典型的な落とし穴

print 'hoge' # 'hoge'を標準出力に書き出す。戻り値もへったくれもない
215デフォルトの名無しさん:2009/06/14(日) 13:29:51
map/reduce/filterは使い始めると際限ないから基本使わない
216デフォルトの名無しさん:2009/06/14(日) 13:36:31
小手先の技は、俺SUGEEだけのために存在する。
そういう奴に限って、アルゴリズムがさっぱりだったりするw
217デフォルトの名無しさん:2009/06/14(日) 13:44:19
抽象化を「小手先の技」とか思っちゃう奴はこの先真っ暗だぞ。
218デフォルトの名無しさん:2009/06/14(日) 13:51:07
これは抽象化じゃないだろw
219デフォルトの名無しさん:2009/06/14(日) 13:56:24
>>標準出力への出力と 関数の戻り値
>>関数は作る人と使う人がいる。
難しいな
220デフォルトの名無しさん:2009/06/14(日) 14:24:22
filterは普通に便利だし。
Cしか知らない人が「何なのこれ??」っていうから、
このmapってのがfor i = 0 to... のループで、filterってのがループの中のif文ですな、
展開してみるとこんな具合です。と説明したら「SUGEEEE」言ってた。
221デフォルトの名無しさん:2009/06/14(日) 14:29:03
>>214
なるほど、式を評価してそのまま表示するから、
かえって分かりにくくなってるってことか。
222デフォルトの名無しさん:2009/06/14(日) 14:38:50
>>212
reduceが兄で
mapが弟ですよ
223デフォルトの名無しさん:2009/06/14(日) 14:40:20
>>214
printの戻り値は無視ですかそうですか
224デフォルトの名無しさん:2009/06/14(日) 14:50:58
printの戻り値?あれはステートメントだろ。
225デフォルトの名無しさん:2009/06/14(日) 15:09:59
printはもう文じゃなくて関数になったよ^^
226デフォルトの名無しさん:2009/06/14(日) 15:12:15
変な煽りは本スレでどうぞ
少なくとも>>214のprintは誰が見ても文
227デフォルトの名無しさん:2009/06/14(日) 21:56:20
print関数も戻り値ないんだよ^^
228デフォルトの名無しさん:2009/06/14(日) 21:58:27
reduceが抽象化じゃないとか、痛い人がいるな。

pythonは処理の構造を抽象化するオツムなんかプログラマに期待していなくて
バカでもちょっとだけ賢い人も同じ処理を書くと同じようなコードになるよう
誘導する言語だから、ループ書けという方向になってる。
reduceとかは、初期に有能なプログラマを魅きつけるためのプログラマホイホイ
みたいなもので、十分普及した今となってはいらん子扱い。
229デフォルトの名無しさん:2009/06/14(日) 22:10:57
えっと
ネタだよね
230デフォルトの名無しさん:2009/06/14(日) 23:38:37
228の要約
forを書くプログラマは馬鹿
231デフォルトの名無しさん:2009/06/14(日) 23:47:00
頭がreduce
232デフォルトの名無しさん:2009/06/15(月) 01:02:07
mapやreduceがなくても実際ほとんど困らないけど
なくなっちゃったらなんか味気ないよねえ
リスト内包表記がなかったら少し困るけどね
233デフォルトの名無しさん:2009/06/15(月) 02:44:24
うちの嫁はreuse
234デフォルトの名無しさん:2009/06/15(月) 10:33:27
mapは複数のリストに演算を適用したいときに使うかな
ベクトルの加算みたいな
+をoperator.addとかタイプせなあかんのはウザいが
235デフォルトの名無しさん:2009/06/15(月) 10:38:54
forよりmapの方が速いんじゃなかったっけか?
236デフォルトの名無しさん:2009/06/15(月) 10:59:50
operator.add と lambda x,y:x+y だとどっちが速いですか
237デフォルトの名無しさん:2009/06/15(月) 11:07:23
http://newworld.ddo.jp/doc/PerformanceTips/
の真ん中あたりに。

バージョン 時間(秒)
基本的なループ 3.47
ドットを取り除いたもの 2.45
ローカル変数&ドットなし 1.79
map関数をつかったもの 0.54
238デフォルトの名無しさん:2009/06/15(月) 13:08:48
リストの項目を文字列に入れたいんだ。

A = [1,2,3]
print "%d, %d, %d" % (A[0], A[1], A[2])

で出来るが、

print "%d, %d, %d" % A

これだと TypeError: int argument required と言われる。
エラーになるのはわかるんだが、そこをなんとか、
Aのインデックスをいちいち指定しないで、
そのまま文字列の場所に入れる方法ってないですか?
239デフォルトの名無しさん:2009/06/15(月) 13:16:36
tuple(a)
240デフォルトの名無しさん:2009/06/15(月) 13:17:46
tuple(A) だろ
もしくは A = (1, 2, 3)
241デフォルトの名無しさん:2009/06/15(月) 13:34:11
ありがとうございます。
タプルの方は出来るのか・・
242デフォルトの名無しさん:2009/06/15(月) 13:34:39
ディクショナリにして使うと、順番も気にしなくていいぞ。
243デフォルトの名無しさん:2009/06/15(月) 18:09:23
print "%d, %d, %d" % *A
244デフォルトの名無しさん:2009/06/15(月) 18:11:16
SyntaxError: invalid syntax
245デフォルトの名無しさん:2009/06/15(月) 18:28:19
print "%d, %d, %d" % (*A)
246デフォルトの名無しさん:2009/06/15(月) 18:53:55
SyntaxError: invalid syntax
247デフォルトの名無しさん:2009/06/15(月) 18:57:05
print A
248デフォルトの名無しさん:2009/06/15(月) 21:24:18
str(A)
249デフォルトの名無しさん:2009/06/15(月) 21:25:06
str(A) .strip('[]')
250デフォルトの名無しさん:2009/06/17(水) 01:51:59
reduce はいらないこだろ。

実際3.0からはreduceは無いわけで。

map、filterもなくなるの時間の問題でしょ。
251デフォルトの名無しさん:2009/06/17(水) 02:03:17
>実際3.0からはreduceは無いわけで。

kwsk
252デフォルトの名無しさん:2009/06/17(水) 02:10:36
>>251
3.0からはbuiltin関数ではなくなって、モジュールへと追いやられた。
Guido は、他のmapやfilterもbuiltinからは外すべしと主張してたが、これらは3.0ではなんとか残った。
4.0になったときには、builtinから外れてもなんら不思議ではない。
253デフォルトの名無しさん:2009/06/17(水) 02:27:00
あと、上の方にあるベンチマークだが、
あれはかなり古いPythonのベンチ。


リスト内包表記はバージョンがあがるたびにスピードアップしてて、
現在では、lambdaなしのmapに準ずるほどのベンチスピード。
一方、mapでlambdaを使ったら、リスト内包表記どころか、
通常のforループと同じかそれより遅いぐらいになる。
254デフォルトの名無しさん:2009/06/17(水) 03:58:35
ということは3.0以上ではreduceは
全部リスト内包に置き換えた方がよい
ということですね
255デフォルトの名無しさん:2009/06/17(水) 05:55:35
>>253
それって、リスト内包では評価対象がイテレータになるんで速い、ってことなの?
256デフォルトの名無しさん:2009/06/17(水) 06:36:32
>リスト内包表記はバージョンがあがるたびにスピードアップしてて、
>現在では、lambdaなしのmapに準ずるほどのベンチスピード。

現在とは3.0ですか2.6ですか
257デフォルトの名無しさん:2009/06/17(水) 07:09:21
>>254
reduceをいったいどういう内包表現に置き換える積もりなんだ?
258デフォルトの名無しさん:2009/06/17(水) 12:42:01
>>4-8
おかげさまでうまくいきました
無料の50MBだとコンパイルに失敗(というかソースの展開ですでに失敗)するので
quota3GBのお試し期間を申し込んだら2.5.4をまるごとコンパイルできました
setuptool/mysqldb等も放り込んでMySQLにもアクセスできました
お試し期間が終わるとquotaが50Mに戻るので放っとくとファイルが壊れるそうで
それまでに必要最小限サイズになるように標準ライブラリを削る必要がありました
結局バイナリCGIのケースとやってることはあまり変わらないかもしれません
259デフォルトの名無しさん:2009/06/17(水) 13:47:20
>>253
mapで使う関数は、defしたほうがいいってことですか?
defしたリスト内包表記>defしたmap≒lambdaで書いたリスト内包表記>lambdaで書いたmap≒普通のfor
てことなんすかね。リスト内包表記はCで実装した部分を実行するのが多いってことなんだろか
260デフォルトの名無しさん:2009/06/18(木) 09:21:38
>>259
普通に自分で def した関数ならば変わらない。
でも、自分で定義しなくても使える関数はC言語で実装されている
事が多いので、同じ事をする lambda よりも高速な事が多い。

速い順に並べると、
1. C関数の内包表記/map
map(str, l)
[str(x) for x in l]

2. Python式による内包表記
[x*2+3 for x in l]

3. Python関数による内包表記/map
def func(x):
  return x * 2 + 3
map(func, l)
[func(x) for x in l]
map(lambda x: x*2+3, l)

なので、mapを使っても悪くは無い場合は、1か、3で既存のPython関数を
使う(map用に用意しなくてもいい)場面のみ。
261デフォルトの名無しさん:2009/06/18(木) 23:38:12
ユニコード文字列に関して質問させて下さい。
python2.6を使用しておりますが、このVerはユニコード文字列は気にしなくてもいいんですか?
例)
#coding: utf-8

a={"abc":"123","bcd":"456"}
b="コード:%(abc)s 局:%(bcd)s"
print b%a                 #コード:123 局:456

ユニコードのu""は必要ないのでしょうか?
むしろu""を使用するとエラーとなります。
262デフォルトの名無しさん:2009/06/19(金) 00:23:39
263デフォルトの名無しさん:2009/06/19(金) 01:00:51
>>261
ファイルはちゃんとutf-8で保存してる?
どこに u を付けたの?
なんてエラーがでたの?
それはインタラクティブシェル上?それともファイルに保存したコードを実行したの?
環境はWindows?Linux?Mac?
264デフォルトの名無しさん:2009/06/19(金) 21:45:53
261です。
utf-8の設定ミスでした。お騒がせ致しました。
違うPCでやったのが原因でした。
265デフォルトの名無しさん:2009/06/20(土) 21:17:00
くだらない質問で悪い
文字列フォーマットで
>>>print "%+010.2f" % 100.123
+000100.12
となりますが、この10桁ってのは、符号と小数点(.)も含まれるってことでいいんだよね?

266デフォルトの名無しさん:2009/06/20(土) 23:58:48
>>265
桁というか、文字数、と思ってたわ。
"前に符号付き0埋め10文字、小数点以下2桁の小数点表示"
とおれは理解してた。
267デフォルトの名無しさん:2009/06/21(日) 01:25:44
C とはちがうんだっけ?
268デフォルトの名無しさん:2009/06/21(日) 01:51:43
みんなのPython改訂版って誤字脱字多くね?
269デフォルトの名無しさん:2009/06/21(日) 02:56:07
>>268
多い。かなりイラッときた。
270デフォルトの名無しさん:2009/06/21(日) 03:05:18
みんパイ(笑)
271デフォルトの名無しさん:2009/06/21(日) 03:27:22
はじめてのPython3も誤字脱字が多いですね
正誤表もいまだ出ていません
272デフォルトの名無しさん:2009/06/21(日) 16:53:32
やっぱりみんなも気づいてた?
電話してやろうかと思ってたw
日本語どころかコードも怪しい
変な太字のところとかあるしw
273デフォルトの名無しさん:2009/06/22(月) 01:14:16
定期的にウジ虫が沸くな。
274デフォルトの名無しさん:2009/06/22(月) 01:24:03
よう、ウジ虫!
275デフォルトの名無しさん:2009/06/22(月) 11:41:02
馬鹿にすんな、今成長してハエになったところだぜ?
276デフォルトの名無しさん:2009/06/22(月) 12:23:54
迷惑度急上昇だな。
277デフォルトの名無しさん:2009/06/22(月) 13:21:08
>>274
ウジ虫に失礼だ。ゴキブリと呼べ。
278デフォルトの名無しさん:2009/06/22(月) 14:27:22
>>277
呼んだ?

       、       /⌒ヽ, ,/⌒丶、       ,
       `,ヾ   /    ,;;iiiiiiiiiii;、   \   _ノソ´
        iカ /    ,;;´  ;lllllllllllllii、    \ iカ
        iサ'     ,;´  ,;;llllllllllllllllllllii、    fサ
         !カ、._  ,=ゞiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii!! __fカヘ.
       /  `ヾサ;三ミミミミミミ彡彡彡ミヾサ`´ 'i、
       i'   ,._Ξミミミミミミミ彡/////ii_   |
       |  ;カ≡|ヾヾヾミミミミミミ、//巛iリ≡カi  |
        |  iサ  |l lヾヾシヾミミミミミ|ii//三iリ `サi  |
       |  ,カ ,カll|l l lヾリリリリリ川川|爪ミミiリllカ、カi  |
        |  ;iサ,サ |l l l リリ川川川川|爪ミミiiリ サi サi  |
        |   iカ ;カ, |l l リリリリ川川川川l爪ミミilリ ,カi カi  |
       |  iサ ;サ, |リ リリ川川川川川l爪ミミiリ ,サi サi  |
       |  iサ ;iカ, | リ彡彡川川川川|爪ミミiリ ,カi :サ、 |
       ,i厂 iサ, |彡彡彡彡ノ|川川|爪ミミリ ,サi `ヘ、
      ,√  ,:カ, |彡彡彡彡ノ川川|ゞミミミリ  ,カi   `ヾ
     ´    ;サ,  |彡彡彡彡川川リゞミミリ  ,サi
         ;カ,  |彡彡彡彡リリリミミミシ   ,カi
         ,;サ,   |彡彡ノリリリリミミミシ    ,サi
        ;メ'´    i彡ノリリリリリゞミミシ     `ヘ、
       ;メ      ヾリリリリノ巛ゞシ       `ヘ、
      ;メ        ``十≡=十´         `ヘ、
                 ノ    ゞ
279デフォルトの名無しさん:2009/06/22(月) 23:15:49
IDLEをコンソールから呼び出すにはどうすりゃいいの。
vimと連携させようと思っているんだけど、IDLEショートカットのプロパティを
みても普通のショートカットと違うみたいで呼び出し方がわからないんだわ。

ちなみに、普通のpythonプロンプトなら
nmap <silent>;py :!"C:\python30\python.exe"<CR>
と_gvimrcに書いておけば;pyと書くだけで呼び出せて便利。
280デフォルトの名無しさん:2009/06/22(月) 23:17:05
『書く』じゃなかった、『コマンド』したら。
281デフォルトの名無しさん:2009/06/23(火) 12:34:36
うじ虫のAA
282デフォルトの名無しさん:2009/06/23(火) 12:36:48
0
283デフォルトの名無しさん:2009/06/23(火) 18:36:18
284デフォルトの名無しさん:2009/06/24(水) 23:03:37
ファイル名の変換で困ってます。アドバイスをお願いします。

# -*- coding: utf-8 -*-

import os

TargetPath = r"C:\test"

FileList = os.listdir(TargetPath)

for i in FileList:
print i

for cnt in FileList:
c=1
os.rename("%03d.mp3"%c,cnt)
c+=1

※インデントは消えてると思います。。。
WindowsError: [Error 2] 指定されたファイルが見つかりません。
というエラーが出てしまいます。どういうことでしょうか
285デフォルトの名無しさん:2009/06/24(水) 23:10:41
よくわからんが、cをforの前に持ってこないとずっと1のままじゃね?
286デフォルトの名無しさん:2009/06/24(水) 23:28:52
俺だったらenumerate使うけど
まぁいいか
287デフォルトの名無しさん:2009/06/25(木) 00:28:37
>>284
なんかいろいろまちがっててよくわからんけど
こうしたかったんじゃないか?

# -*- coding: utf-8 -*-

import os

targetpath = r"C:\test"

filelist = os.listdir(targetpath)

for filename in filelist:
    print filename

c = 1
for filename in filelist:
    oldpath = os.path.join(targetpath, filename)
    newpath = os.path.join(targetpath, '%03d.mp3' % c)
    os.rename(oldpath, newpath)
    c += 1
288デフォルトの名無しさん:2009/06/25(木) 18:43:09
>>287
スマートな正解をありがとうございます。
とても参考になりました。
renameへの引数はこのようにするんですね!
289デフォルトの名無しさん:2009/06/25(木) 23:07:30
このプログラム添削してください。

animal = [dog,cat,pig,lion,deer]
num = [1,2,3,4,5,6]

print animal[0] "は"num[0]"番可愛いです。

print animal[2]"は"num[5]"番可愛いです。

あってますか?

ちなみに
dogは1番可愛いです
pigは6番可愛いです
と表示させたいです
290デフォルトの名無しさん:2009/06/25(木) 23:32:36
>>289
1から勉強しなおせ

animal = ["dog", "cat", "pig", "lion", "deer"]
num = [1, 2, 3, 4, 5, 6]

print "%sは%d番可愛いです。" % (animal[0], num[0])
print "%sは%d番可愛いです。" % (animal[2], num[5])
291デフォルトの名無しさん:2009/06/25(木) 23:58:38
>>289
おまえセンス無いわ
292デフォルトの名無しさん:2009/06/26(金) 02:27:36
センスとか関係ないし
釣りの可能性はあるが
293デフォルトの名無しさん:2009/06/26(金) 02:36:29
でも具体的なコード貼って添削してくれってのはアリだね
初心者に説明してもらってもイミフなケース多いし
294デフォルトの名無しさん:2009/06/26(金) 06:18:15
スレと関係ないんだけどさ、俺「釣り」とか「釣り師」っていうのは、

 釣り師 ↓     
.            /| ←竿
     ○  /  |
.    (Vヽ/    |
    <>     |
゙'゙":"''"''':'';;':,':;.:.,.,__|_________
             |
  餌(疑似餌)→.§ >゚++< 〜
                 の組み合わせだと思ってたんだけど、

最近自称釣り師がダイレクトで自分の本音を攻撃されて「釣れた!」とか
言ってるの多いよね。
 これは、どっちかというと、



          ,〜〜〜〜〜〜 、
|\     ( 釣れたよ〜・・・)
|  \    `〜〜〜v〜〜〜´
し   \
゙'゙":"''"''':'';;':,':;.:.,.,  ヽ○ノ
          ~~~~~|~~~~~~~ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                 ト>゚++<
              ノ)

かと思うんだけど、どうよ?
295デフォルトの名無しさん:2009/06/26(金) 23:25:30
>>294
そんなコピペで
296デフォルトの名無しさん:2009/06/27(土) 00:15:10
他にも添削希望いないのかな
297デフォルトの名無しさん:2009/06/27(土) 14:04:04
Pythonは、あることを書くときに「なるべく誰でも書き方が同じになるようにしよう」
というのはいいです。

でもあることをしたい時に「ライブラリがすごいたくさんあっちゃって混乱してるけど
すきなの選んで」って勘弁してほしいんですが
298デフォルトの名無しさん:2009/06/27(土) 16:49:36
勘弁します
299デフォルトの名無しさん:2009/06/27(土) 22:27:43
>>297
それはPerlのCPANじゃね?
Pythonは標準ライブラリが充実している分、たくさんのサードパーティー
ライブラリの中からマトモなのを探す手間が省けることが多いよ。
300デフォルトの名無しさん:2009/06/28(日) 02:25:50
つきなみだけど
同意
301デフォルトの名無しさん:2009/06/28(日) 09:18:41
FTPで対象のファイルがディレクトリかどうかはどう判断すればいいでしょうか?
マニュアルを見ましたが、該当のコマンドが見つかりませんでした.
http://www.python.jp/doc/2.4/lib/ftp-objects.html

nlst() で片っ端から試して例外処理で取得する方法を思いつきましたが
もっとスマートな方法はありませんか?
302デフォルトの名無しさん:2009/06/28(日) 11:42:42
ls -lR
303デフォルトの名無しさん:2009/06/30(火) 22:07:59
すいません添削ってわけではないですが、質問させて下さい。
1から100までの数字で不定期に続くリストがあります。
cnt=[2,3,5,9,12,23,56,62,68,75,85,95]
でどの数値が抜けているのかを調べる。

#coding:utf-8
cnt=[2,3,5,9,12,23,56,62,68,75,85,95]
num=range(1,101)

for i in cnt:
#numから繰り返し変数iを引きたいんだけど、何が一番スマートだろ…

print num
304デフォルトの名無しさん:2009/06/30(火) 22:13:41
書き忘れました。

#coding:utf-8

cnt=[2,3,5,9,12,23,56,62,68,75,85,95]
num=range(1,101)


for i in cnt:
    num.remove(i)

print cnt

がベストかと思うんですが…間違ってますか?
305デフォルトの名無しさん:2009/06/30(火) 22:15:36
最後はprint num でした。度々すいません
306デフォルトの名無しさん:2009/06/30(火) 22:16:13
setでも使え
307デフォルトの名無しさん:2009/06/30(火) 22:19:36
[ x for x in range(1,101) if x not in [2,3,5,9,12,23,56,62,68,75,85,95]]
308デフォルトの名無しさん:2009/06/30(火) 22:22:16
set(num) - set(cnt)
309デフォルトの名無しさん:2009/06/30(火) 22:28:35
そういうのも可能なんですね
ありがとうございます。
どーしょーもない質問ですいませんでした
310デフォルトの名無しさん:2009/07/02(木) 18:25:23
ちんこ生えてきた
311デフォルトの名無しさん:2009/07/03(金) 02:41:46
>>310 今度は大事にしろよ。
312デフォルトの名無しさん:2009/07/03(金) 05:25:27

    ┌─┐
    │●│
    └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!

313デフォルトの名無しさん:2009/07/03(金) 11:39:22
if文で一度に複数の変数、たとえば
if a>0 and b>0 and c>0:
みたいなのは無理ですか?
314デフォルトの名無しさん:2009/07/03(金) 11:48:17
>>313
そんなの聞くよりやった方が早いだろ。
普通に対話型でもできるし。
315デフォルトの名無しさん:2009/07/03(金) 11:48:33
可能です
316デフォルトの名無しさん:2009/07/03(金) 13:00:10
if 0 < a < 5:
と書いてもエラーにならない処理系はありますか
317デフォルトの名無しさん:2009/07/03(金) 13:02:38
ある
318デフォルトの名無しさん:2009/07/03(金) 13:07:23
Pythonにはない。
あと、エラーにはならなくとも、おもいがけない意味になることもある
(C言語とか)。
319デフォルトの名無しさん:2009/07/03(金) 13:12:13
320デフォルトの名無しさん:2009/07/03(金) 13:22:05
(回答者が)超初心者用
321デフォルトの名無しさん:2009/07/03(金) 13:27:42
Rubyなら全部できるよ^^
322デフォルトの名無しさん:2009/07/03(金) 13:32:12
323デフォルトの名無しさん:2009/07/03(金) 14:47:17
>>318
0 < (a < 5)
または
(0 < a) < 5
ということですか?
324デフォルトの名無しさん:2009/07/03(金) 14:53:34
#include <stdio.h>
int main(int ac, char *av[]){
  int a;
  for(a = 0; a <= 5; a++)
    if(0 < a < 5) printf("%d: true\n");
    else printf("%d: false\n");
  return 0;
}

# if(0 < a < 5)
0: true
1: true
2: true
3: true
4: true
5: true

# if(0 < (a < 5))
0: true
1: true
2: true
3: true
4: true
5: false
325デフォルトの名無しさん:2009/07/03(金) 15:05:43
326デフォルトの名無しさん:2009/07/03(金) 16:24:50
じゃあ、俺も一応

>>318
327デフォルトの名無しさん:2009/07/03(金) 17:11:57
0: false
1: true
2: true
3: true
4: true
5: false
になるようにするにはどうすればいいですか
328デフォルトの名無しさん:2009/07/03(金) 17:18:01
>>324
C/C++スレに帰れ

0 < a && a < 5
329デフォルトの名無しさん:2009/07/03(金) 17:21:22
Cはa < b < cはどうやってもダメだけどPythonは意図通りに動くだろ、確か
>>324はきちんと動いてないし
330デフォルトの名無しさん:2009/07/03(金) 17:24:13
きっちり正しく動いていて、書いたほうがアホと言う方が正しい
331デフォルトの名無しさん:2009/07/03(金) 17:28:31
332デフォルトの名無しさん:2009/07/03(金) 17:43:56
333デフォルトの名無しさん:2009/07/03(金) 17:44:45
まいんまいん
334デフォルトの名無しさん:2009/07/03(金) 17:47:34
335デフォルトの名無しさん:2009/07/03(金) 22:17:47
lispで
(< 0 a 5)
当然Rubyなんかには出来ません
336デフォルトの名無しさん:2009/07/03(金) 23:07:38
(setq a 3)
3
(< 0 a 5)
t


>>> a = 3
>>> 0 < a < 5
True
337デフォルトの名無しさん:2009/07/03(金) 23:22:22
a > b > c > dは

t = b
u = c
a > t and t > u and u > d
ってことか。これはきもいなー。
Python3でも変わってないのね。
まあ、気にしないことにしよう。
338デフォルトの名無しさん:2009/07/03(金) 23:27:34
Cをはじめた初心者がうっかりやりがちなぐらい自然な記法なのに!
339デフォルトの名無しさん:2009/07/03(金) 23:31:57
Pythonの三大ステキ機能のひとつにケチをつけるとはいい度胸だ
340デフォルトの名無しさん:2009/07/03(金) 23:45:06
bが最大であることをテストするのに
a < b > c #これはいただけないよね?だからと言って
b == sorted((a, b, c))[2] #これは頭がおかしい
341デフォルトの名無しさん:2009/07/03(金) 23:50:58
Python > Ruby > C
342デフォルトの名無しさん:2009/07/04(土) 00:05:09
(a and c) < b
343デフォルトの名無しさん:2009/07/04(土) 00:09:40
a, b, c, d のなかで bが最大であることをテストするのに
a < b > c に d を加えられない
sorted の方が正解
344デフォルトの名無しさん:2009/07/04(土) 00:11:34
>>342は何がしたいんだ
345デフォルトの名無しさん:2009/07/04(土) 00:12:11
max(a, b, c, d) == b
346デフォルトの名無しさん:2009/07/04(土) 00:15:07
reduce(lambda x, y: y if x < y else x, [5, 2, 7, 3])
347デフォルトの名無しさん:2009/07/04(土) 00:16:53
reduce は 2.6 以上では使えないんだっけ
348デフォルトの名無しさん:2009/07/04(土) 00:19:19
functools.reduce に移動しただけだから問題ないよ
349デフォルトの名無しさん:2009/07/04(土) 00:20:23
any(x < b for x in (a, b, c))だろ、常識的に考えて……
350デフォルトの名無しさん:2009/07/04(土) 00:24:28
つーか、もう比較アルゴリズムの話だろ。
351デフォルトの名無しさん:2009/07/04(土) 00:50:00
web から取ってきた HTML を食わせて、XPath でデータを取り出したい。
正書式でなくても適当によしなに計らってくれるとなお嬉しい。
Ruby だったら Nokogiri みたいだけど、Python では何?
352デフォルトの名無しさん:2009/07/04(土) 00:55:37
>>351
- BeautifulSoup
- lxml
353デフォルトの名無しさん:2009/07/04(土) 01:44:26
>正書式でなくても適当によしなに計らってくれるとなお嬉しい。

lxml だと無理?
354デフォルトの名無しさん:2009/07/04(土) 02:18:39
lxmlもがんばってくれるよ
355デフォルトの名無しさん:2009/07/04(土) 06:15:05
any(x < b for x in (a, b, c))だろ、常識的に考えて……
356デフォルトの名無しさん:2009/07/04(土) 10:06:22
any(b<=x for x in (a, b, c))
357デフォルトの名無しさん:2009/07/07(火) 11:50:56
class Hogeがあったとして、
"Hoge"からはどうやってアクセスするんだっけ?

あと、こういうのを一般的に言って、どんな専門用語でしたっけ?
358デフォルトの名無しさん:2009/07/07(火) 11:53:48
>>357
globals()["Hoge"]
359デフォルトの名無しさん:2009/07/07(火) 12:01:54
>>358
ありがとうございます。
360デフォルトの名無しさん:2009/07/07(火) 12:11:41
イントロスペクションとかリフレクションとかそのへんの用語を求めてる?
361デフォルトの名無しさん:2009/07/07(火) 12:43:47
>>360
イントロスペクションってのは初めて聞いたので、調べてみます。

単に、eval("Hoge")みたいなのと勘違いしていた模様。
362デフォルトの名無しさん:2009/07/07(火) 13:21:52
Hoge.py 内に
class Fuga があったとして、
"Hoge", "Fuga" からはどうやってアクセスするんだっけ?
363デフォルトの名無しさん:2009/07/07(火) 13:23:23
Hoge.py 内に
class Fuga, method Hage があったとして、
"Hoge", "Fuga", "Hage" からはどうやってアクセスするんだっけ?
364デフォルトの名無しさん:2009/07/07(火) 13:31:07
 
365デフォルトの名無しさん:2009/07/07(火) 13:34:51
 
366デフォルトの名無しさん:2009/07/10(金) 09:36:03
age
367デフォルトの名無しさん:2009/07/10(金) 09:49:45
おはようございます。
わたし16歳の女子高生ですけど
Python始めるにあたって最初に読むべき本は
ありますか?
368デフォルトの名無しさん:2009/07/10(金) 10:08:35
ないよ
369デフォルトの名無しさん:2009/07/10(金) 13:44:13
こんにちは。
わたし15歳の巨乳グラビアアイドルなんだけど
みんなでPythonやろうよ。
370デフォルトの名無しさん:2009/07/10(金) 13:59:45
みんなでPython www
371デフォルトの名無しさん:2009/07/11(土) 05:24:24
Good Morning, Everyone!!!!
I am a thirteen years old girl.
I will start learning Oppaithon Programming.
Please teach me chome-chome.
372デフォルトの名無しさん:2009/07/11(土) 05:35:52
chome-chomeとか団塊レベルじゃないと使わないだろう普通
373デフォルトの名無しさん:2009/07/11(土) 06:18:10
コメコメ?アスタリスクのこと?
374デフォルトの名無しさん:2009/07/11(土) 09:33:34
いつもの英語下手なひとか
375デフォルトの名無しさん:2009/07/11(土) 12:39:50
OptionParserについて質問です


#!/usr/bin/env python
# coding: utf-8

from optparse import OptionParser

parser = OptionParser()
parser.add_option('-f', '--fuga', action='append', type='string', dest='fugaList', help='fugafugafuga')
(options, args) = parser.parse_args()
print options.fugaList


※上記のスクリプト名を仮にfugaとする

実行例1:
$ ./fuga -f hoge piyo
['hoge']

実行例2:
$ ./fuga -f hoge -f piyo
['hoge', 'piyo']

複雑なオプション指定による処理分岐を行いたくてOptionParserを使い始めました
実行例1のように一つのオプションに多数の引数を渡して、
実行例2の結果['hoge', 'piyo']のように"options.fugaList"に
引数を代入したいのですが、可能でしょうか?
可能ならアドバイスをお願いします
376デフォルトの名無しさん:2009/07/11(土) 12:55:13
一つのオプションに対して複数のオプション引数を許したら
後に続くであろう固定引数が存在するかしないか確認する術がない気がする

なので素人考えだけど -f"hoge,piyo" でごまかすとか
377デフォルトの名無しさん:2009/07/11(土) 13:22:26
>>376
レスありがとうございます

>>275にこのスクリプトの使用目的を書いていなかったので
後出しになってしまいますが

$ ./fuga hoge_*

のようにコマンドラインからワイルドカードを使用して、
複数のファイル名をオプション引数に渡して利用するのがメインなので
-f"hoge,piyo" ではちょっとごまかせないです。。。
378デフォルトの名無しさん:2009/07/11(土) 17:38:38
そういう場合-fオプションがあったらどういう動作をする、という風に作るものであって
-fオプションにパラメータをぞろぞろ渡すという風にはしないだろ、普通。
379デフォルトの名無しさん:2009/07/11(土) 20:33:47
A/B/__ini__.py で変数を定義
hoge = 'hogehoge'
A/B/module_x.py というモジュール内でhogeを使いたい場合、どうすればいいのかを教えてください。

import hoge
ではダメなんですか?
380デフォルトの名無しさん:2009/07/11(土) 21:02:00
>>379
コピーでよけりゃ
from . import hoge
381375:2009/07/12(日) 02:57:27
>>378
確かに普通はそうかもしれませんね。。。



という訳でOptionParserではワタシがしたいことが出来なさそうなので
自分でモジュールをつくることにしました
どうもありがとうございました
382デフォルトの名無しさん:2009/07/12(日) 03:26:51
どういたしまして
383デフォルトの名無しさん:2009/07/12(日) 07:40:36
>>377
OptionParserなりgetoptで "hoge_*" を文字列として受け取ってから
glob でワイルドカードを展開すればいいんじゃまいか。

ためしてないけど Linux/Unix 環境だとワイルドカードはシェルによって
展開されてからプログラムに渡されるので

./fuga -f "hoge_*"

のようにコマンド引数をクオートして書く必要がある。
384デフォルトの名無しさん:2009/07/12(日) 09:37:55
きたああああああああああああああ
UnicodeDecodeError出なくなった!
385デフォルトの名無しさん:2009/07/12(日) 10:08:02
>>384
どうやった?
まさか setdefaultencoding() じゃないよな?

from __future__ import unicode_literals
して、テキストファイルのファイル入出力は
import codecs
codecs.open('foo', encoding='cp932')
のようにエンコーディングを指定してファイルを開くのが正しい方法だぞ。
386デフォルトの名無しさん:2009/07/12(日) 11:45:18
リスト型で日本語を扱う場合一個ずつ取り出さないと文字が化けちゃうんですが
スライスで一度に複数の要素を扱えるようになる方法はないんでしょうか
387デフォルトの名無しさん:2009/07/12(日) 11:54:03
>>386
実際に化ける場合のコードと、「一個ずつ取り出す」のコードを見せてみりゃれ
388デフォルトの名無しさん:2009/07/12(日) 12:11:28
辞書を

hoge = {'fuga': 1}
print hoge.fuga

とJSの連想配列のようにキーをプロパティみたいにして
アクセスしたいんですがどうにか実現できないですか?
389デフォルトの名無しさん:2009/07/12(日) 12:38:09
>>385
フッ…txtをUTF-8で保存することを覚えただけさ

ついでにだけどunicode_literalsって何?
2.5だとimportできなくていいのか?
390デフォルトの名無しさん:2009/07/12(日) 12:48:52
>>389
うん、2.6からしか使えない。
たとえば、
#coding: utf-8
open("あいうえお")
ってやると、"あいうえお"はutf-8のバイト列だから、Windowsとかでは
"あいうえお" という名前のファイルを開けない。
open(u"あいうえお")
と書くと普通にファイルが開ける。

で、 Python 3.0 以降では普通に "あいうえお" と書くと Python 2系の u"あいうえお"
相当になるんだけど、Python2系でもu無しにUnicode文字列を書けるようにするのが
unicode_literals
391デフォルトの名無しさん:2009/07/12(日) 12:51:59
>>388
例えば、
>>> class JSObject(dict):
... def __init__(self, o):
... self.__dict__ = o
...
>>> o = JSObject({'foo': 1})
>>> o.foo
1

他にも __getattr__, __setattr__ を使った方法とかもある。
392デフォルトの名無しさん:2009/07/12(日) 13:10:28
>>387
こんな感じです
#ファイルの2行目からの文字列を3行ずつリストの1要素にまとめて扱いたい
fhnd = open('spam.txt','r')

lines = []
add_up = []

line_start = 2
line_end = 5

for temp in fhnd:
 lines.append(temp)

for temp in lines:
 if (line_start > line_max) or (line_end > line_max):
  break
 add_up.append(lines[line_start] + lines[line_start+1] + lines[line_end-1]) #←化けない
# add_up.append(lines[line_start:line_end]) #←上の代わりに実行すると化ける
print str(add_up[0]) + str(add_up[1]) + str(add_up[2])#←上のfor文内のうち上の行を実行なら化けない
print str(add_up[0:3])#←上のfor文内のいずれでも化ける
393デフォルトの名無しさん:2009/07/12(日) 13:12:35
抜けてたけど
line_max = len(lines)
です
394デフォルトの名無しさん:2009/07/12(日) 13:13:17
>>391
おお!ありがとうございます!
勉強になりました!
395デフォルトの名無しさん:2009/07/12(日) 13:58:36
>>392
>  add_up.append(lines[line_start] + lines[line_start+1] + lines[line_end-1]) #←化けない
> # add_up.append(lines[line_start:line_end]) #←上の代わりに実行すると化ける
上の場合、appendの引数は文字列だけど、下の場合はリスト
なので下を上と同じくするならadd_up.append( ''.join( lines[line_start:line_end]))じゃまいか

> print str(add_up[0:3])#←上のfor文内のいずれでも化ける
リストをstrしたときに得られるのはprintできる文字列

>>> L = [1, 2, 3]
>>> str(L)
'[1, 2, 3]'
396デフォルトの名無しさん:2009/07/12(日) 15:24:04
>>392
まずはstr()とrepr()の違いが判らないとな。

>>> astr = 'あいう'
>>> alist = [astr]
>>> print astr
あいう
>>> print alist
['\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86']

リストを文字列にしようとしたら、リストの要素にはstr()ではなくてrepr()が適用される。
repr()されると、文字列のうちASCII文字以外は\xでエスケープして表示される。

三行分の文字列を配列にして add_up を2重配列にしたい?
それとも三行分の文字列を一つの文字列に連結したい?
lines = open('spam.txt').readlines()
add_up = []
for i in range(1, len(lines), 3):
    add_up.append(lines[i:i+3]) # 2重配列にしたい場合
    add_up.append(''.join(lines[i:i+3])) # 連結したい場合
397デフォルトの名無しさん:2009/07/12(日) 16:36:49
エンコーディング方面の問題かと思って
見当違いな方向に進むところでした
ありがとうございました
398デフォルトの名無しさん:2009/07/13(月) 05:48:35
>>390
ありがとう
399デフォルトの名無しさん:2009/07/13(月) 22:41:07
[1,2,3,1,4,5]のようなリストの重複した要素を削除して[1,2,3,4,5]のようなシーケンスを作る。
※並び順は問わない。

set型を使わず、for文とif文を組み合わせるなどして作成する。
模範解答をお願い致します。
400デフォルトの名無しさん:2009/07/13(月) 22:50:35
とりあえず、初歩的にはこんな感じだろう。

ListA = [1,2,3,1,4,5]
ListB = []

for x in ListA:
 if not x in ListB:
  ListB.append(x)

print ListB
401デフォルトの名無しさん:2009/07/13(月) 22:53:49
>>400
レスありがとうございます。
削除する方法ばかり考えてましたが、追加するって考え方もあるんですね
すごく参考になりました。スマートな回答どうもです!
402デフォルトの名無しさん:2009/07/13(月) 22:56:05
a = [1,2,3,1,4,5]
print list(set(a))
403デフォルトの名無しさん:2009/07/13(月) 22:56:27
最初に空リスト作るってのはよくある
404デフォルトの名無しさん:2009/07/14(火) 00:44:04
>>399
set型を使わない理由は?
405デフォルトの名無しさん:2009/07/14(火) 00:52:50
宿題だからでは・・・
あれ、だとすると宿題スレだなw
406デフォルトの名無しさん:2009/07/14(火) 21:09:18
2ちゃんに書き込みたいけどcookieがよく分からん
どうやってResponseから取り出してrequestに追加するの?
407デフォルトの名無しさん:2009/07/14(火) 21:42:01
firefox使えばok
408デフォルトの名無しさん:2009/07/14(火) 21:45:22
というかwgetだけでできるじゃん
409デフォルトの名無しさん:2009/07/15(水) 06:59:12
インスタンスに勝手に属性をつけられないようにはできませんか?
クラスの定義に書いてある属性だけで打ち止めにしたい・・・
410デフォルトの名無しさん:2009/07/15(水) 08:56:43
def __setattr__(self, name, value):
    if hasattr(self, name):
        object.__setattr__(self, name, value)
    else:
        raise AttributeError(name)
411デフォルトの名無しさん:2009/07/15(水) 09:10:10
そうか!
__setattr__ をオーバーロードすればよかったんですね.
412デフォルトの名無しさん:2009/07/15(水) 09:23:09
__slots__ とどこが違うの?
413410:2009/07/15(水) 09:58:48
>>409的なことはやらないから忘れてた
414デフォルトの名無しさん:2009/07/15(水) 10:18:58
>>412
何か文句でも?
415406:2009/07/15(水) 13:29:32
いやPythonから書き込みたいんだけど
416デフォルトの名無しさん:2009/07/15(水) 13:32:20
>>415
spam業者乙!
417デフォルトの名無しさん:2009/07/15(水) 13:34:45
過去スレに(r
418デフォルトの名無しさん:2009/07/15(水) 13:51:46
from cookielib import CookieJar

cj = CookieJar()
cj.extract_cookies(res,req)
cj.add_cookie_header(req)
419デフォルトの名無しさん:2009/07/15(水) 15:44:39
420デフォルトの名無しさん:2009/07/15(水) 15:52:29
フォルダの中にあるtxtファイルを全て読み込むことってできますか?
421デフォルトの名無しさん:2009/07/15(水) 15:54:12
>>420
import glob
for i in glob.glob('*.txt'):
  d = open(i).read()
422デフォルトの名無しさん:2009/07/15(水) 15:58:45
>>421
ありがとうございます
os.walk使って無理矢理やってました
423デフォルトの名無しさん:2009/07/15(水) 16:02:41
glob() はサブディレクトリ見に行かないぜ
424デフォルトの名無しさん:2009/07/15(水) 16:54:45
paverいろいろおすすめ

from paver.path import path
for f in path('.').walkfiles('*.txt'):
    print f
425デフォルトの名無しさん:2009/07/16(木) 05:05:09
くそう・・・なんで俺のコードじゃpickleが使えないんだ・・・
もう寝る
426デフォルトの名無しさん:2009/07/16(木) 15:49:26
gzip解凍できねえぞくそお
427デフォルトの名無しさん:2009/07/16(木) 15:59:39
428デフォルトの名無しさん:2009/07/16(木) 16:49:39
文章の中から単語の数かぞえんのどうやんの?
countを使ってどうやんのさ
429デフォルトの名無しさん:2009/07/16(木) 16:56:15
wc --words
430デフォルトの名無しさん:2009/07/16(木) 17:16:57
pythonって何のために使うの?
431デフォルトの名無しさん:2009/07/16(木) 17:51:28
汎用です
432デフォルトの名無しさん:2009/07/16(木) 21:46:48
夜のお供に使ってみるか・・・
433デフォルトの名無しさん:2009/07/17(金) 02:41:08
perlをわすれるため
434デフォルトの名無しさん:2009/07/17(金) 07:14:30
雑用を処理させていますよ。
gMailを読んでDBに格納しておいて月末にExcelにまとめさせるとか
435デフォルトの名無しさん:2009/07/17(金) 16:20:12
グラフ描くのに色々モジュールあるみたいだけど何がいいかな
436デフォルトの名無しさん:2009/07/17(金) 18:56:36
今os.systemを使ってUNIXコマンドを組み込んでるんですが
bashとかでお馴染のリダイレクトやパイプを
Pythonでも使いたいのですが可能ですか?
437デフォルトの名無しさん:2009/07/17(金) 19:02:23
os.system は system(3) 経由 sh 経由でコマンドを起動するはずだからできると思うが、
subprocess モジュールを勉強したほうがいいと思う。
438デフォルトの名無しさん:2009/07/17(金) 19:13:07
>>437
。。。すまんm(_ _;)m

勘違いして別のコマンド実行してたみたいです。。。
確認したらちゃんとできました。
回答ありがとうございましたm( __ __ )m
439デフォルトの名無しさん:2009/07/17(金) 19:44:54
しかし乗り換えるにはsubprocessは面倒くさい罠
440デフォルトの名無しさん:2009/07/17(金) 19:53:55
popen2.popen3()
441デフォルトの名無しさん:2009/07/18(土) 05:44:16
4コアでガンガンまわしてるつもりになってても、
実は1コアしか動いていないのが悲しい
スタックレスなんとかをかんとかすればアレなのかな?
442デフォルトの名無しさん:2009/07/18(土) 06:57:04
つmultiprocessing
スレッド回すよりは好きだわ
443デフォルトの名無しさん:2009/07/18(土) 10:58:43
unko = [1, 3, 5, 7, 11, 13]
for i in unko:
 if i < 10:
  unko.remove(i)
for i in unko:
 print str(i)

3 <---?
7 <---?
11
13

なして?
444デフォルトの名無しさん:2009/07/18(土) 11:19:11
ループ中に回してるリストをいじるのはやめましょうという話
どうしてもやりたければ for i in unko[:]: unko.remove(i)
445デフォルトの名無しさん:2009/07/18(土) 11:21:12
リストについて舐める操作をしながら、そのリストに副作用が起きる操作をしてるから。
リストの1番めを見て、1を削除。その次はリストの2番めを見るので、1番めに入った
3は無視されちゃう。
446デフォルトの名無しさん:2009/07/18(土) 17:05:09
unko.remove(i) ワロス
447デフォルトの名無しさん:2009/07/18(土) 21:28:25
ちんこ
448デフォルトの名無しさん:2009/07/18(土) 22:13:35
フルーチャートを書けばすぐわかることだろうに
449デフォルトの名無しさん:2009/07/18(土) 22:14:17
フローチャートを書けばすぐわかることだろうに
450デフォルトの名無しさん:2009/07/18(土) 22:17:00
flo'u tʃɑ':(r)t
451デフォルトの名無しさん:2009/07/19(日) 00:14:08
クラスの中で変数を宣言したいのですが、

self.unko = 0

で、いいんでしょうか?
452デフォルトの名無しさん:2009/07/19(日) 00:15:18
はいそれで大丈夫です
外部アクセスを防ぎたい場合はself.__unkoとしてください
453デフォルトの名無しさん:2009/07/19(日) 00:31:21
ありがとうございます!

外部アクセスを防ぐ、ということは宣言した後予期せぬ状況で中身が書き換わるのを防ぐ、ということでしょうか?
454デフォルトの名無しさん:2009/07/19(日) 01:45:38
no
455デフォルトの名無しさん:2009/07/19(日) 02:03:46
うーんどういうことなんでしょう。
内容を事ある毎に変化させていくパラメータとして使いたいので普通に宣言すれば良いと思っているのですが、それで問題ないでしょうか?
456デフォルトの名無しさん:2009/07/19(日) 02:18:34
no
457デフォルトの名無しさん:2009/07/19(日) 02:21:19
>>455
余計なことを言って混乱させてすいませんでした
self.__unko
のように先頭に__を付けると外部アクセスのできないいわゆるprivate変数の様な感じになります
458デフォルトの名無しさん:2009/07/19(日) 02:36:23
C言語で言うとstaticをつけたりつけなかったりという話なのでしょうか?
459デフォルトの名無しさん:2009/07/19(日) 04:27:42
no
460デフォルトの名無しさん:2009/07/21(火) 20:34:26
python楽しいお
461デフォルトの名無しさん:2009/07/21(火) 22:20:03
python 面白いよね
ショボイのしかまだ書けないけど、(きっと今後もw)
日々の作業が楽で、楽しくなるようなコードが書けるまで勉強するのだ
インタラクティブシェルだけで勉強してたら、ショボーンだけど、ファイルに書き出しとかになると
ちょっとプログラムって感じで楽しい
462デフォルトの名無しさん:2009/07/22(水) 11:39:00
Python、神のごときライブラリが色々あって面白いすね。
463デフォルトの名無しさん:2009/07/22(水) 12:51:38
python組み込みのhash関数って完全ハッシュ関数ですか?
衝突しませんか?
464デフォルトの名無しさん:2009/07/22(水) 14:25:58
>>462
新参の俺にbeautifulsoup意外詳しく
465デフォルトの名無しさん:2009/07/22(水) 15:00:29
_mssql、VisualBasic.netでADO.netとか何だったんだろうと。
pyExcelerator、Excelネイティブのファイルが簡単に出来たですよ。
reportlab、PDFが(ry
Barcode for Python、bzr branch lp:barcodesforpython/beta、バーコードが(ry
最近、データベースからの書類生成は全部Pythonで書いてます。
466デフォルトの名無しさん:2009/07/22(水) 16:45:56
searchとmatchの挙動の違いを詳しく解説してくれる方いませんか?
467デフォルトの名無しさん:2009/07/22(水) 16:52:14
re.match("foo", s) == re.search("\Afoo", s)
468デフォルトの名無しさん:2009/07/22(水) 18:29:48
match(r'foo',unko)のようにrオプション付けるとどういう効果があるのでしょうか?
469デフォルトの名無しさん:2009/07/22(水) 18:34:06
470デフォルトの名無しさん:2009/07/22(水) 18:34:22
471デフォルトの名無しさん:2009/07/22(水) 18:43:29
findを忘れないで
472デフォルトの名無しさん:2009/07/22(水) 19:00:55
よくわかりました!
ありがとうございます''
473デフォルトの名無しさん:2009/07/22(水) 23:42:42
>>463
なわけないだろ。
474デフォルトの名無しさん:2009/07/23(木) 09:00:30
>>473
明確に記載されている資料があればお願いします
475デフォルトの名無しさん:2009/07/23(木) 09:06:50
476デフォルトの名無しさん:2009/07/23(木) 09:08:54
どのソースに書いてあるかドキュメントに書かれていればいいんだがなー
組み込み関数だとgrepしてもノイズ多くてゲンナリ
477デフォルトの名無しさん:2009/07/23(木) 09:11:08
478デフォルトの名無しさん:2009/07/23(木) 09:23:01
>>475
それじゃないww
479デフォルトの名無しさん:2009/07/23(木) 09:29:32
help(hash)したら書いてあるだろうが
480476:2009/07/23(木) 10:22:52
>>479
俺へのレスじゃなくて>>463へのレス?
やってみたけど、どちらにしても書いてなかった
481デフォルトの名無しさん:2009/07/23(木) 10:28:17
Summer holidays
482デフォルトの名無しさん:2009/07/23(木) 10:47:47
機能性文盲はつらいよ
483デフォルトの名無しさん:2009/07/23(木) 10:52:46
いいからやってみろよ
上で求められてるような情報は出てこないから
484デフォルトの名無しさん:2009/07/23(木) 11:00:18
求められてるのって、完全hashかどうかだよな?
> Return a hash value for the object. Two objects with the same value have
> the same hash value. The reverse is not necessarily true, but likely.
明快に書いてあるよな、「逆は真とは限らない」って。
485デフォルトの名無しさん:2009/07/23(木) 11:08:54
hash()の入力の値域と出力の値域を比較すれば見当がつくじゃまいか
出力は整数なんだから衝突せずにすむ入力の範囲はせいぜいそれと同程度だ

Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on
win32
>>> hash(0)
0
>>> hash(1)
1
>>> hash(-1)
-2
>>> hash(-2)
-2
486デフォルトの名無しさん:2009/07/23(木) 11:39:32
>>484
完全ハッシュって双方向に一意なんだっけ
って複数のキーで同一の値が取れたら完全ハッシュじゃないもんな
487デフォルトの名無しさん:2009/07/23(木) 11:41:55
>完全ハッシュって双方向に一意なんだっけ

no

>って複数のキーで同一の値が取れたら完全ハッシュじゃないもんな

no
488デフォルトの名無しさん:2009/07/23(木) 12:00:32
えっ
489デフォルトの名無しさん:2009/07/23(木) 12:42:36
>> 完全ハッシュって双方向に一意なんだっけ
>
> no
>

no

>> って複数のキーで同一の値が取れたら完全ハッシュじゃないもんな
>
> no

no
490デフォルトの名無しさん:2009/07/23(木) 12:44:34
> no
no

なんだよおまえらww
491デフォルトの名無しさん:2009/07/23(木) 12:55:19
> なんだよおまえらww
neet
492デフォルトの名無しさん:2009/07/23(木) 13:22:51
なんなんだこのスレ
493デフォルトの名無しさん:2009/07/23(木) 13:23:49
衆議院議員をめざしている人が、
本当のところどう思っているのか、
きいてみよう。
ttp://moderator.appspot.com/?hl=ja#16/e=9df89
"名前を連呼するだけの選挙宣伝カーを、「スパム認定」して禁止しませんか?"
Lambda  
494デフォルトの名無しさん:2009/07/23(木) 16:24:25
>>474
Python 自体のソースを見るのが確実かと。
http://svn.python.org/view/python/trunk/Python/bltinmodule.c?revision=73776&view=markup
の builtin_hash() が組み込み関数の hash() に相当する。
http://svn.python.org/view/python/trunk/Objects/object.c?revision=73076&view=markup
に PyObject_Hash() の定義がある。
495デフォルトの名無しさん:2009/07/23(木) 23:07:08
ソースやドキュメントなんて読むまでもないだろ。

もし仮に完全ハッシュだとしたとしたら
論理的に考えてhash関数の引数はシーケンスでないとならない。
そうなってないんだから当然hashは完全ハッシュじゃない。
たまには頭使わないと腐るぞ。
496デフォルトの名無しさん:2009/07/23(木) 23:10:25
そもそも「ハッシュ」の意味さえ知っていれば、あんな疑問は湧かないはず
497デフォルトの名無しさん:2009/07/23(木) 23:31:09
>>495
> 論理的に考えて
Python的に考えて、でしょ
型によって全く扱いが違う関数なんて
他の言語ではありふれてるわけで。
スレタイ読める?
498デフォルトの名無しさん:2009/07/23(木) 23:35:19
例えば数値なら桁毎のシーケンスの生成なんて簡単なことだし
499デフォルトの名無しさん:2009/07/23(木) 23:43:40
スレタイ読めるなら
いちいち「Python的に」なんて書かなくても補完できるはずなのにね。
500デフォルトの名無しさん:2009/07/24(金) 00:12:47
>>498
桁毎のシーケンスって何?
整数型のbit数毎に異なるテーブルを用意する"なら"
整数型の完全ハッシュが作れるってこと?
条件を絞れば完全ハッシュなんていくらでも作れるに決まってるだろ?
たとえば同一性を判定するためだけのハッシュとか、
ある種のFSでファイル名をキーとするハッシュとか。

自分こそスレタイ読めるなら、型によってとか他の言語ではとか
勝手に条件付け加えないでくれ。
501デフォルトの名無しさん:2009/07/24(金) 00:15:53
釣り針でかいなw
502デフォルトの名無しさん:2009/07/24(金) 00:18:49
そんなもんがあるとして、少なくとも、引数の範囲とかも引数にしないと無理なんじゃまいか?
503デフォルトの名無しさん:2009/07/24(金) 00:27:01
引数の範囲?bitwidth?
504デフォルトの名無しさん:2009/07/24(金) 00:28:27
朝生はじめるよー
505デフォルトの名無しさん:2009/07/24(金) 19:38:43
    ┌─┐
    │●│
    └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!
506デフォルトの名無しさん:2009/07/25(土) 15:51:39
Output folder: C:\DOCUME~1\user\LOCALS~1\Temp
Install dir for actual installers is C:\DOCUME~1\user\LOCALS~1\Temp
"Target CPU handles SSE2"
"Target CPU handles SSE3"

XPにnumpyインストールしようとしたらこうなったんだけどどうしたらいいんだ?


507デフォルトの名無しさん:2009/07/25(土) 16:04:23
あーインストーラー保存せずにそのまま実行したらできました
508デフォルトの名無しさん:2009/07/25(土) 16:22:10
おれ、C:\temp\downloadsになんでもダウンロードして実行する癖あるんだけど、
俺の場合そうはならなかった気がするな?
509デフォルトの名無しさん:2009/07/26(日) 22:07:06
Mac OS X + Python2.5です
ファイルの出力なのですが、
f = open('hoge', 'w')
f.write('line 1\n')
としても改行されません・・・
なにか間違って理解しているのでしょうか?
510デフォルトの名無しさん:2009/07/26(日) 22:10:45
> write( str)
>
> 文字列をファイルに書き込みます。戻り値はありません。
> バッファリングによって、flush() または close() が呼び出されるまで
> 実際にファイル中に文字列が書き込まれないこともあります。
511デフォルトの名無しさん:2009/07/26(日) 22:13:29
失礼しました。
close() はしているのですが、
ファイルには
line 1\n
と出力されてしまいます・・・
512デフォルトの名無しさん:2009/07/26(日) 22:17:15
f = open('hoge', 'w')
f.write('line 1\n')
f.close()

こちらでは再現できない。
513デフォルトの名無しさん:2009/07/26(日) 22:19:47
原因が少しわかりました・・・
PyDev(Eclipse)を使っていたのですが、\がバックスラッシュにならないようですorz
コンソールからvi で編集しなおして\(バックスラッシュ)で改行されました。
これはPyDevの挙動がオカシイんですかね、それとも仕方ないんでしょうか?
514デフォルトの名無しさん:2009/07/26(日) 22:27:11
>>509
脊髄反射でバッファリングだと思ってしまった。ごめん

macのyen signには癖があるって話を聞いたことがある
% od -tx1 hoge して結果を貼ってみて
515511:2009/07/26(日) 22:29:39
解決しました
Macに不慣れなので知らなかっただけで、通常に¥キーを押すと円記号、バックスラッシュを入力する場合はOption + ¥キーを押すようです。
ターミナルの場合は強制的にバックスラッシュなのかな?
516デフォルトの名無しさん:2009/07/26(日) 22:35:46
pythonで皆さんどんなことしてるんですか?
具体的に何をしてるか教えて下さい。
517デフォルトの名無しさん:2009/07/26(日) 23:40:35
pass
518デフォルトの名無しさん:2009/07/27(月) 00:10:59
ナニしてるんだろうねぇ
519デフォルトの名無しさん:2009/07/27(月) 01:55:52
>>516
お仕事に使えるよ?
ユーティリティ色々、前はVB.NETだったけど今は大概Pythonで書いてる。
この間は、ftpサーバーの状態をチェックして警報ショートメッセージ出すのを書いた。
520デフォルトの名無しさん:2009/07/27(月) 02:39:53
Windowsアプリ作ってるよ。
Thinkpadとか、ツール類がPython使ってるから検索するとPython関連ファイルが
沢山入ってる。
バージョン古いし、ツール類の大半要らないからアンインストールして自分で最新の
Python入れるけど。
521デフォルトの名無しさん:2009/07/29(水) 09:48:56
Python のコマンドラインシェルや、iPython 等で
タブ幅(tabstop)を指定するにはどうすればよいですか?
522デフォルトの名無しさん:2009/07/29(水) 16:54:50
a = [' ','a',' ','b',' ','c',' ']
のように空白を要素に持つlistがあります.
このlistから空白要素を全部削除するのに,
for a in range(a.count(' ')):
a.remove(' ')
と書いているのですが,もっとスマートに書けないでしょうか.
523デフォルトの名無しさん:2009/07/29(水) 17:01:33
a = [i for i in a if a != " "] とか?
524デフォルトの名無しさん:2009/07/29(水) 17:02:34
a = [' ','a',' ','b',' ','c',' ']
print filter(lambda x: x != ' ', a)

or

a = [' ','a',' ','b',' ','c',' ']
print [x for x in a if x != ' ']
525デフォルトの名無しさん:2009/07/29(水) 17:02:52
[e for e in a if e != ' ']
filter(lambda x: x != ' ', a)
526デフォルトの名無しさん:2009/07/29(水) 17:04:35
>>524
ケコーンしようぜ
527デフォルトの名無しさん:2009/07/29(水) 17:05:28
filterって関数があるんですね.ありがとうございました.
528デフォルトの名無しさん:2009/07/29(水) 17:06:31
全然スマートにみえないんだが気のせいかな?
529デフォルトの名無しさん:2009/07/29(水) 17:22:53
リストそのものの書き換えと、リストから要素を除いた新しいリストを作るののどちらをやりたいんだ?
530デフォルトの名無しさん:2009/07/29(水) 17:25:32
>>528
filterとかlambaとかスマートというか自己満足だよね
531デフォルトの名無しさん:2009/07/29(水) 17:27:06
lambdaはともかくfilterはできる子
532デフォルトの名無しさん:2009/07/29(水) 17:33:19
>>531
>filterはできる子

そういうことにしたいのですね。
533デフォルトの名無しさん:2009/07/29(水) 17:36:59
全然スマートにみえないんだが気のせいかな?
534デフォルトの名無しさん:2009/07/29(水) 17:38:18
全然スマートにみえないんだが気のせいかな?
535デフォルトの名無しさん:2009/07/29(水) 17:44:34
reduce(lambda x, y: x + ([y] if y != ' ' else []), ' a b c ', [])
536デフォルトの名無しさん:2009/07/29(水) 17:45:22
reduceって関数があるんですね.ありがとうございました.
537デフォルトの名無しさん:2009/07/29(水) 17:52:20
[i for i in ''.join(a).split(' ') if i]

or

filter(lambda x: x, ''.join(a).split(' '))
538デフォルトの名無しさん:2009/07/29(水) 18:01:52
filter(' '.__ne__, [' ','a',' ','b',' ','c',' '])
539デフォルトの名無しさん:2009/07/29(水) 18:17:50
それいいね
540デフォルトの名無しさん:2009/07/29(水) 18:53:54
一行野郎め
541デフォルトの名無しさん:2009/07/29(水) 20:18:26
Tkinterで書いたものをwxで書き直してます。DnDが要件にあったので。
wxは初めてです。

wxってウィジェットの位置とかサイズを指定しますが、
あれって環境によってフォントサイズが変わったりした場合、
重なったり、端が切れちゃったりしないんですかね。

TKライクに並べて行けば自動的にサイジングしてくれる
配置のやり方があれば教えていただけないでしょうか。

sizerでどうにかするんだろうとは思うのですが、具体的なや
り方に行き当たっていない状態です。

あと、TKでいうところのLabelFrameってwxにはないんでしょうか。
現状StaticBoxとStaticTextで似たようなことしてます。

よろしくお願いします。
542デフォルトの名無しさん:2009/07/29(水) 20:20:36
XRCed
543デフォルトの名無しさん:2009/07/29(水) 20:21:18
Sizer
544デフォルトの名無しさん:2009/07/29(水) 21:13:43
>>540
なんてすばらしい日本語訳かと思ったら
こんなに市民権を得てるとは。。。
http://www.google.co.jp/search?q=%88%EA%8Ds%96%EC%98Y
545デフォルトの名無しさん:2009/07/29(水) 22:19:10
python 一行野郎ってジャンルはまだ無いのな
546デフォルトの名無しさん:2009/07/29(水) 22:56:33
インデントのおかげで一行で書くのはむずかしいからな
547デフォルトの名無しさん:2009/07/30(木) 01:06:56
>>544
いつ頃、どこで生まれた訳なんだろうな。
俺が初めて知ったのは『Effective Perl』の邦訳版で、これが10年前の本だけど。
548デフォルトの名無しさん:2009/07/30(木) 01:12:39
Rubyしかないよなあ
549デフォルトの名無しさん:2009/07/30(木) 02:46:47
>>516
C言語で書いたシミュレーションプログラムに Python で GUI を付けたり、シミュレーションの
一部で新しいことを試したいとき(例えばある方程式を解く時にニュートン法が有効かどうか確か
めたいときなど)に Python で試作プログラムを書いてみたりしています。

先日、線形計画問題を解く必要があって Python でシンプレックス法を書きました。線形計画問題
というのは、「製品Aには材料Sが3個、材料Tが2個必要で、製品BにはSが1個、Tが4個必要です。
Aは100円、Bは150円で売れます。手元にはSが40個、Tが30個あります。売上金を最大にするには
AとBを何個ずつ作るのが最適でしょうか?」というような問題のことです。この場合、未知の変数は
Aの個数とBの個数の2つなので手作業で解いてもいいのですが、未知の変数が増えるとたいへん
なので適当な計算方法で解きます。シンプレックス法はその1つです。で、Python の float 型で
計算したら計算誤差のせいか問題によっては計算が収束しませんでした。そこで、アルゴリズム
本体はそのままで、入力値(シンプレックス表の要素)のデータ型を fractions.Fraction クラス
に変えたところ、うまく解けるようになりました。Fraction クラスは有理数(分子と分母が整数で
表された分数)を実装したクラスで、float に比べて遅いですが計算誤差がありません。アルゴ
リズムはそのまま変更なしで、入力値のデータ型を変えただけで収束が改善されたので感激しま
した。他の言語(たとえばC言語)でも計算に使うデータ型を変えられるようにプログラムを作る
ことはできますが手間がかかります。その点で Python ははるかに手軽で強力だと思いました。
550522:2009/07/30(木) 09:14:17
結局a = [i for i in a if a != " "] が分かりやすいので使わせて貰います.
ありがとうございました.
551デフォルトの名無しさん:2009/07/30(木) 09:49:48
filterとかlambdaを無駄に使いたがるヤツには気をつけた方がいい
552デフォルトの名無しさん:2009/07/30(木) 13:36:25
>>550
それで良いのかよw
if i != ' ' だろ?
553デフォルトの名無しさん:2009/07/30(木) 16:48:22
俺はlispいじってたもんでホイホイlambdaやfilterを使っちゃうな
554デフォルトの名無しさん:2009/07/30(木) 17:04:20
クラス皆無で関数だらけのスクリプトを量産する漏れみたいなもんだな
555デフォルトの名無しさん:2009/07/30(木) 17:41:54
[e for e in a if e != ' ']
filter(lambda x: x != ' ', a)

どっちが速い?
要素が1000万個くらいあっても大丈夫?
556デフォルトの名無しさん:2009/07/30(木) 18:34:06
>>555
速さなら前者の方が(たぶん倍以上)速い
要素の大きさは、速度よりもメモリの問題が発生する。
リストではなくジェネレータの利用を考慮するといい。
(e for e in a if e != ' ') もしくは itertools.ifilter
557デフォルトの名無しさん:2009/07/30(木) 20:26:35
速さなんて考えたこともないぜ
558デフォルトの名無しさん:2009/07/31(金) 03:18:40
> 要素が1000万個
PyCUDAとか使うべきだぜ!
559デフォルトの名無しさん:2009/07/31(金) 08:43:10
(e for e in a if e != ' ')
[e for e in a if e != ' ']

1000万文字ほど用意して比べたら、
後者が圧倒的に遅く、前者はほぼ一瞬で終ったのですが
なんでここまで差がつくの?
560デフォルトの名無しさん:2009/07/31(金) 10:12:51
ジェネレータ
561デフォルトの名無しさん:2009/07/31(金) 22:08:13
そういえば、
1桁〜9桁くらいの数字だけで構成された文字列が大量に格納されたリストって
全部をint型に変換してソートするよりも
全部を文字列のままzfillで0埋めしてソートした方が速かったんだが
そういうもんなの?
562デフォルトの名無しさん:2009/07/31(金) 22:12:48
今ジェネレータの意味がわかったw

関数系だとデフォで全部かYOって思ってわけわかめだったが、
こういう遅延評価ならわかりやすいな。俺でも使えそうだ。
563デフォルトの名無しさん:2009/08/01(土) 07:40:35
>>561
kwsk
or
source
564デフォルトの名無しさん:2009/08/02(日) 10:55:54
そりゃ文字列だったのをそのままソートと
文字列だったのを数値に変換してソートだと
数値変換の処理が余計なステップになるよね
565デフォルトの名無しさん:2009/08/02(日) 12:56:06
みんなエディタ何使ってるの?
566デフォルトの名無しさん:2009/08/02(日) 13:00:11
zfillで0埋めする処理は余計なステップにならないのか
567デフォルトの名無しさん:2009/08/07(金) 14:05:01
Pythonぐらい簡単でゲーム作るのに適した言語ない?
568デフォルトの名無しさん:2009/08/07(金) 15:11:23
sqliteで、最後に挿入した行のrowidを取得する方法ってないのでしょうか?
c/c++なら「sqlite3_last_insert_rowid」というAPIがあるのですが・・・
569デフォルトの名無しさん:2009/08/07(金) 15:28:13
cursor.lastrowid
570デフォルトの名無しさん:2009/08/07(金) 17:36:57
>>561
そりゃ少なくとも2倍以上メモリ消費してるしな
571デフォルトの名無しさん:2009/08/07(金) 22:09:46
>>567
RPGツクールに内蔵されたRubyだな。
572デフォルトの名無しさん:2009/08/09(日) 16:01:12
質問なんですが

Linux上のPyGTK + Gladeで作ったアプリを
Pythonなどがインストールされていない
まっさらの状態のXPで動くようにしたいんですが
一緒にライブラリとかを同梱させれば可能になるんでしょうか?

可能ならそういった情報が乗ってるサイトとかを
教えてください
573デフォルトの名無しさん:2009/08/12(水) 23:28:50
py2exeじゃダメなん?
574デフォルトの名無しさん:2009/08/17(月) 14:06:43
3.1.1 の Windows インストーラ版はまだかな〜
575デフォルトの名無しさん:2009/08/17(月) 21:19:27
Pythonの属性について。

モジュールオブジェクトやインスタンスオブジェクトobjに対して、
obj.x = x
のように、新しい属性をつけることはできますが、
文字列オブジェクト等でこれをやると、AttributeErrorが発生します。

これは文字列オブジェクト等の__setattr__()メソッドがエラーを発生するように定義してある、
という理解で良いのでしょうか?
576デフォルトの名無しさん:2009/08/17(月) 23:02:27
>>575
組み込みオブジェクトは実装上そうなってる。
実際
class myStr(str): pass
と継承すれば望みのことが可能。
Pythonはそのへんの美しさは二の次なので好き嫌いが分かれるかも。
577デフォルトの名無しさん:2009/08/17(月) 23:06:48
文字列はimmutableだし美しさを損なってるってほどでもないような
578デフォルトの名無しさん:2009/08/17(月) 23:50:14
>>576
理解力が悪くてすみません。
strを継承したクラスのインスタンスには属性を追加できる
→ __setattr__()は関係ないってことで良いでしょうか?
579575:2009/08/18(火) 00:14:45
連続で申し訳ないです。
今いろいろいじっていたら、そもそも組み込みオブジェクトが
__dict__属性を持っていないことがわかりました。

オブジェクトの属性は__dict__に格納されているみたいなんですが、
じゃあこの__dict__自身はどうなっているのでしょうか。
混乱してきましたw
580デフォルトの名無しさん:2009/08/18(火) 13:21:44
>>579
__dict__ は dict型のオブジェクトだよ。
属性の管理方法は、組み込み型ならC言語で自由に管理できるし、Pythonのclassで
__setattr__ を定義しない場合はデフォルトの __setattr__ が __slots__ か __dict__ を使って
管理する。
581575:2009/08/18(火) 15:50:11
>>580
ああ、なるほど__slots__ですか。
これを定義しておくと、これに格納されていない名前の属性は付けられなくなるんですね。
ありがとうございました。
582デフォルトの名無しさん:2009/08/18(火) 17:49:09
# main.py
import mymodule
print mymodule.getmypath()

# mymodule/__init__.py
def getmypath():
  return __file__

引数等に何も渡さずにgetmypath()でmain.pyのファイルパスを取得する方法はありますか?
python2.5を使ってます
583デフォルトの名無しさん:2009/08/18(火) 18:06:27
os.fullpath(__FILE__)
584デフォルトの名無しさん:2009/08/18(火) 18:35:37
これでいいの?
sys._getframe().f_back.f_code.co_filename
585582:2009/08/18(火) 20:25:52
>>584
できました!ありがとうございます。
586586:2009/08/19(水) 21:17:25
はじめまして。

BeautifulSoupを使っていて、
<class 'BeautifulSoup.NavigableString'>をstrに
変換するにはどうすればよいのでしょうか?
587586:2009/08/19(水) 21:42:58
メソッドencodeを使ってもエラーになります。
<class 'BeautifulSoup.NavigableString'>オブジェクトから
1文字ずつとりだすとunicodeになるので、
無理やりunicodeに変換することはできました。
なので解決といえば解決なのですが、美しくないです…
588デフォルトの名無しさん:2009/08/20(木) 02:06:21
unicode(s)
str(s)
589デフォルトの名無しさん:2009/08/20(木) 02:09:18
unicode(s.prettify(), s.originalEncoding)
590デフォルトの名無しさん:2009/08/20(木) 05:33:30
Pythonでは「文字列」と「ユニコード文字列」と「バイト列」
は異なるオブジェクトとして明確に区別されてるのでしょうか?
591デフォルトの名無しさん:2009/08/20(木) 07:41:29
2でも3でも文字列とバイト列は同じ
文字列リテラルとしてソースに書く場合はやや注意が必要
592デフォルトの名無しさん:2009/08/20(木) 07:49:52
>>591
いや違う
2: バイト列=文字列≠ユニコード文字列
3: バイト列≠文字列=ユニコード文字列
593590:2009/08/20(木) 08:40:32
>>592
なるほど,その説明はわかりやすい

encode とか decode とかのメソッド見たとき,
何から何へなんだよ〜元と先が指定できなきゃ
だめなんじゃね?って悩んだ.
594デフォルトの名無しさん:2009/08/20(木) 10:59:28
urllib.urlopenで読んできたHTMLをBeautifulSoupに渡すとunicodeにしてくれますが、
その中に囲み数字みたいな機種依存文字があるとencodeでeuc-jpとかにしようとすると
例外が発生しますよね?
これってみなさんどうしてます?
595デフォルトの名無しさん:2009/08/20(木) 12:37:08
unicode-escape
596デフォルトの名無しさん:2009/08/20(木) 12:40:43
encode('euc-jp', errors='replace')
encode('euc-jp', errors='ignore')
encode('euc-jp', errors='strict')
597デフォルトの名無しさん:2009/08/20(木) 12:57:40
598デフォルトの名無しさん:2009/08/20(木) 14:13:08
euc_jis_2004
599デフォルトの名無しさん:2009/08/20(木) 14:47:56
600594:2009/08/20(木) 19:51:48
ヒントありがとうございます。
色々試してみましたが、文字コード回りは今一つ良く分かりませんね。
みなさんのヒントとウェブ情報を参考にとりあえず次のようにしてみました。

html = urllib.urlopen(url).read()
html_coding = chardet.detect(html)['encoding'].lower()
soup = BeautifulSoup(unicode(html, html_coding, 'replace').encode('utf-8'))
text = soup......
print text.encode('euc-jp', 'replace')

単純にprintの時に text.encode('euc-jp', 'replace')とかだと、何故か全体がわけわからないコードになりました。
2.5.4でやってるんですが、3.xになるとこの辺もっとスッキリするんでしょうか。

601デフォルトの名無しさん:2009/08/20(木) 22:08:07
602デフォルトの名無しさん:2009/08/21(金) 07:36:16
>>600

html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)
text = soup......
print text.encode('euc-jp', 'replace')
603デフォルトの名無しさん:2009/08/21(金) 07:38:11
html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)
text = soup......
print unicode(text, soup.originalEncoding).encode('euc-jp', 'replace')
604デフォルトの名無しさん:2009/08/21(金) 14:22:39
あのLinux使ってる人が一行目に書くのはなんだ?
605デフォルトの名無しさん:2009/08/21(金) 14:42:43
shebang
606デフォルトの名無しさん:2009/08/23(日) 22:49:29
はじめまして。
最近、pythonを始めました。 ipythonをとても便利に使っています。
ipythonに関して、一つ質問なのですが、代入式の場合に、評価の値が表示されるようにすることはできないでしょうか?
607デフォルトの名無しさん:2009/08/24(月) 13:03:36
「はじめてのpython」で勉強しています
下記スクリプトを実行したとき、

Winで実行する場合とUbuntuで実行する場合とで
結果が違う(Ubuntuの場合はエラーになる)のですが
どうしてですか?
Ubuntuでエラーを解消するにはどうすればいいですか?

文字エンコード部分を変えたり消したりするのはやってみました。

#! /usr/bin/env python
# coding:shift_jis
while True:
str=input('> ')
print( str )
if str=='bye':
break
608デフォルトの名無しさん:2009/08/24(月) 13:27:59
raw_input() にすれば動くよ。たぶんwinのはpython3なんだろう。
その本がどちらを使ってるかわからないけど、個人的にはまだ2.xを使ったほうがいいと思うよ

python2のraw_input() == python3のinput()
python2のinput() == python3のeval(input())
609デフォルトの名無しさん:2009/08/24(月) 23:54:44
改行コード
610デフォルトの名無しさん:2009/08/25(火) 16:17:27
win32api を使いたいです
ctypes から、windll.[DLL名].[関数名] で呼べるのはわかったのですが、
引数が要求したり、関数が返してくるような定数(?)の実際の値は普通どう確認するものなんでしょうか

他言語から win32api を使った経験は無いです
611デフォルトの名無しさん:2009/08/25(火) 16:29:15
612610:2009/08/25(火) 17:27:33
えーと WM_CLOSE とかそういったものが定義されてないので、
その実際の値がわからないとそれを要求したり返したりする関数が使えないんです
それで、普通はどうするものなのかと思って質問しました
613デフォルトの名無しさん:2009/08/25(火) 17:31:15
少しぐらいならヘッダファイルから拾ってくれば済むけど
GUIまでやろうとするとものすごく大変な気がする
614デフォルトの名無しさん:2009/08/25(火) 17:34:19
MSDNでしらべる。Mingwのw32apiとかみる
615デフォルトの名無しさん:2009/08/25(火) 17:45:43
>>813
たまたま目に付いたものを書いただけで、今のところは GUI をやろうとしてるわけではないです

ヘッダファイル名でググって、定数名で検索掛けてコピペしてくればいいんですかね
他のコードからコピペして著作権的に大丈夫なんでしょうか

>>614
関数と、対応するDLLは、ググって出てきたMSDNのページを見てるんですが、定数が見つからないです
どこに何があるかいまいちわからない……

Mingwは調べてみます
616デフォルトの名無しさん:2009/08/25(火) 20:25:48
pywin32 の win32con.py
617デフォルトの名無しさん:2009/08/25(火) 20:50:24
>他言語から win32api を使った経験は無いです
618デフォルトの名無しさん:2009/08/25(火) 21:41:44
>>616
おお、大抵の場合はこれで大丈夫そうです

というよりctypesじゃなくてpywin32でwin32apiを呼べるみたいですが、その方がいいんでしょうかね
でもpywin32のヘルプ読んでもどこに何があるのかわかりづらい……

>>617
一応書いておいた方がいいかなと


これから先、どのapiを使うかわからないのであえて書かなかったのですが、
DDEクライアントを書いてました
win32conにddeml.hの定数が見当たらなかったので、
Google先生にお願いしてヘッダファイルからコピペしたところ、とりあえず動きました
(コピペして大丈夫なんでしょうか)

pywin32にddeなるモジュールがあるようですが、使い方がさっぱりなので見なかったことにします
みなさん回答ありがとうございました
今回の件とは別ですが、>>611も参考になりました
619デフォルトの名無しさん:2009/08/25(火) 22:00:04
>DDEクライアント

win32com
620デフォルトの名無しさん:2009/08/25(火) 22:58:40
COMはDDEとは別物じゃないですか?
621デフォルトの名無しさん:2009/08/25(火) 23:05:06
それはMSに言っといてくれ
死語だけでもWindows DNAとかChromeEffectsとかいくらでも出てくる
622デフォルトの名無しさん:2009/08/25(火) 23:34:06
>>619を読んで、win32comとDDEクライアントの関係がわからなかったので>>620を書いたのですが……
623デフォルトの名無しさん:2009/08/26(水) 01:55:48
COMはOLEクライアント
624デフォルトの名無しさん:2009/08/27(木) 04:10:26
拡張子は opyで
625デフォルトの名無しさん:2009/08/27(木) 21:05:40
.pyoのほうがいい
626デフォルトの名無しさん:2009/08/28(金) 08:19:35
そのうち2.xようと3.xように
.pyo2とかになるのか
627デフォルトの名無しさん:2009/09/01(火) 22:46:42
Windows環境でもPyreadlineをインストールしていれば
cmdモジュールのデフォルトでbash-like動作が有効になると思ってたんですが
普通に“^A”などと表示されてしまいます。
IPythonでは補完が効くので、cmdモジュールの使い方が間違ってるんだと思いますが
公式サイトのリファレンスではCmd.cmdを継承したクラスを作って
引数無しでインスタンスを作成するだけのように読めます。

何が間違ってるんでしょうか?
628デフォルトの名無しさん:2009/09/03(木) 07:39:13
助けてください・・・
これからPythonを勉強しようと思ってるのですが、それ以前に「パスを通す」
ということができません。
Windows XP で、Python2.6.2 をインストールしたんですけど、初心者用の
サイトにある「パスの設定」というのを見ながらやっても
[操作可能なプログラムまたはバッチ ファイルとして認識されていません]と
でてしまい困っています・・・。どうすればパスを通せるのか教えていただけ
ないでしょうか。よろしくお願いします。
629デフォルトの名無しさん:2009/09/03(木) 08:12:03
了解
630デフォルトの名無しさん:2009/09/03(木) 08:33:11
スレ違い
パソコン入門スレとかにいってこい
631デフォルトの名無しさん:2009/09/03(木) 09:24:33

PATHの通し方すら教えられない。
しょせんPyヲタなんて、この程度。
632デフォルトの名無しさん:2009/09/03(木) 09:51:29
逃げた?
633デフォルトの名無しさん:2009/09/03(木) 09:53:19
>>628
autoexec.bat あたりを弄ったのかな?それはWindows98時代のやり方で、
Windows2000以降ならGUIで設定できる。
ttp://www.daikichi.net/books/lecture_java/setting_jdk.html
634デフォルトの名無しさん:2009/09/03(木) 10:08:32
言っちゃった…。

俺はあほの相手するのは疲れるんでぐっとこらえたんだけど。
635デフォルトの名無しさん:2009/09/03(木) 14:15:51
>>628
>>633が答えてくれてるけど
うまくいかなかったらまた聞いてくれ
636628:2009/09/03(木) 19:12:06
>>629
>>630
すみません。スレ違いという事すら気づきませんでした...。
>>631
ごめんなさい..。私が悪いんです。
>>632
>>633
ご親切に答えてくれて、ありがとうございます。教えて頂いた
ttp://www.daikichi.net/books/lecture_java/setting_jdk.html も、見てみた
のですが、ダウンロードし直したら無事にパスが通りました。本当に、
ありがとうございました。
>>634
ごめんなさい、ほんとに私はアホです。
>>635
ありがとうございます。結局、何が原因だったのかわからないのですが
どうにかパスの設定はできました。
637デフォルトの名無しさん:2009/09/03(木) 21:35:11
>> 607
一行目の指定宣言ですが?

#! /usr/bin/env python

/* man env 引用 */

NAME
env -- set and print environment

余り どの様な形式の基礎かが理解 出来ないのですが…
この部分の基礎宣言の説明をして頂けますか?
638デフォルトの名無しさん:2009/09/03(木) 21:51:11
ピートンっておぼえたほうがいいかな
639BBS戦士ジョソコイダーGID@愛をください:2009/09/03(木) 21:52:46
ジョソコイダーを遊園地に連れてってって
640デフォルトの名無しさん:2009/09/03(木) 22:08:29
>>637
その一行目は shebang という
二行目以降を入力として shebang に指定したコマンドを実行する

ややこしい話をすると
shebang に指定されたコマンドを実行するのはシェルでなくカーネルの仕事
シェルは環境変数PATHを知っているけど、カーネルは知らないので
原則 #!/usr/bin/python などではなく #!/usr/bin/python のように書く必要がある

ただこの方法だと他のマシンでの python インタプリタの場所が
/usr/local/bin/python だった場合に動かないので
env コマンドに環境の設定と python の実行をお願いする
641デフォルトの名無しさん:2009/09/03(木) 22:09:26
o 原則 #!/usr/bin/python などではなく #!/usr/bin/python のように書く必要がある
x #!python などではなく #!/usr/bin/python のように書く必要がある
642デフォルトの名無しさん:2009/09/03(木) 22:33:38
>>607

/* Line 2 */
# coding: 'Shift_JIS'

これで 通りますが… 何をする Program ですか?
643デフォルトの名無しさん:2009/09/03(木) 22:38:14
>>642 plus
失礼…
>>640 を読めずに書き込んだので…
644デフォルトの名無しさん:2009/09/03(木) 22:48:02
>>640
読んだのですが?
文字列を入れても Syntax Error に為りますが?
直接 打ち込んでの作業では無いと云う事か…
645デフォルトの名無しさん:2009/09/03(木) 23:12:28
まずは日本語の構文をマスターしてからのほうが
いいと思うんだ・・・
646デフォルトの名無しさん:2009/09/03(木) 23:17:30
>>644
shebang を使うのはファイルに保存したスクリプトを
% python scriptname
ではなく
% chmod +x scriptname
% ./scriptname
のように実行したい場合
対話型プロンプトではそもそも必要ない

よくわからなかったら、慣れるまで
* スクリプト内でASCII文字だけ使うようにする
* 実行する際は % python scriptname
* 対話型プロンプトは使わない
そうすれば #!/usr/bin/env python や # coding: sjis を書く必要が無くなる

あとできればメール欄に sage って入れて
647デフォルトの名無しさん:2009/09/04(金) 00:16:11
>>646 本人がレスして居るのでしょうか?
# coding: Shift_JIS
は 始めから省略が出来たと思いましたが…
書く必要性 1: どの coding: を使用して居るかを明確にする為
記憶では二行目は かなり about に書く事が出来る でしたか?
prompt を使用しないですか…
script が まだ入力待ちの状態だったと理解して居りますが?

>>607
「はじめてのpython」で勉強しています
下記スクリプトを実行したとき、
Winで実行する場合とUbuntuで実行する場合とで
結果が違う(Ubuntuの場合はエラーになる)のですが
どうしてですか?
648デフォルトの名無しさん:2009/09/04(金) 01:01:52
どんなエラーが出たのか書けよ
649デフォルトの名無しさん:2009/09/04(金) 01:05:22
OSが違うからです
650デフォルトの名無しさん:2009/09/04(金) 01:06:22
>下記スクリプト

???
651デフォルトの名無しさん:2009/09/04(金) 01:12:46
異なる環境で動かすことを考えているなら、 coding指定は必ず書いておけ。

標準入力も、inputに頼らず、codecs.getreader()で、
エンコード指定して、sys.stdinからファイル入力として扱うほうが、
トラブルは少ないかもしれない。
652デフォルトの名無しさん:2009/09/04(金) 01:13:36
その変な日本語どうにかしてよ
653デフォルトの名無しさん:2009/09/04(金) 01:20:28
str = codecs.getreader('UTF-8')(sys.stdin)
654デフォルトの名無しさん:2009/09/04(金) 01:23:08
str = codecs.getreader('UTF-8')(sys.stdin).read()
655デフォルトの名無しさん:2009/09/04(金) 01:25:03
っつーかstrをへんこうしたらなにがおこるんだ?

656デフォルトの名無しさん:2009/09/04(金) 01:56:11
うちゅうのほうそくがみだれる
657デフォルトの名無しさん:2009/09/04(金) 01:57:50
変更というよりは邪魔して見えなくしてるだけだ

__builtins__.str
658デフォルトの名無しさん:2009/09/04(金) 06:27:01
py3なら文字コード余裕でした。
659デフォルトの名無しさん:2009/09/04(金) 13:46:11
拙もはじめてのpython3で勉強してます。
本に載ってた下記スクリプトが、WinでもLinuxでも動きませんでした。

本のミスでしょうか?

■エラー内容:
print( gcd(int(sys.argv[1]),int(sys.argv[2])) )
IndexError: list index out of range

■スクリプト:
#!usr/bin/env python
# coding:shift_jis

import sys

def gcd(m,n):

if n>m: m,n=n,m
while n>0:
m,n=n%m
return m


if __name__=='__main__':
print( gcd(int(sys.argv[1]),int(sys.argv[2])) )
660659:2009/09/04(金) 13:47:43
カキコしたらインシデントがなくなってしまいました。修正します。

■スクリプト

#!usr/bin/env python
# coding:shift_jis

import sys

def gcd(m,n):

 if n>m: m,n=n,m
  while n>0:
   m,n=n%m
  return m


if __name__=='__main__':
 print( gcd(int(sys.argv[1]),int(sys.argv[2])) )
661デフォルトの名無しさん:2009/09/04(金) 14:08:36
>>660
sys.argv[1] と sys.argv[2] はそれぞれ、
python gcd.py 3 5 (もしくは ./gcd.py 3 5) としたときの 3 と 5 が入ります。
引数をつけずにプログラムを実行されたのではないでしょうか?
662659:2009/09/04(金) 16:00:32
>>661

そのとおりでした。ありがとうございます。
663デフォルトの名無しさん:2009/09/04(金) 16:15:57
WindowsでPython 2.6.2を使って機種依存文字を処理しようと思ったんですが、
cp932でエンコードして書き出すとき、PythonはNEC選定IBM拡張文字を優先して使うようなんです。
(例えば「ケ」の場合、fbb9ではなくee9d)

できたらIBM拡張文字の方で書き出せるようにしたいんですが、何かいい方法があるでしょうか?
664デフォルトの名無しさん:2009/09/04(金) 16:48:19
>>663
Text 文書を保存して その儘 特定機種で Text を読み込むと どの様に為りますか?
665デフォルトの名無しさん:2009/09/04(金) 16:53:22
>>> u"ケ".encode("mbcs")
'\xfb\xb9'
>>> u"ケ".encode("cp932")
'\xee\x9d'
666デフォルトの名無しさん:2009/09/04(金) 17:03:13
>>664 plus
否… 表現が悪かった様で… 片方の機種で その文字を Text に保存して
もう片方の機種で その Text を読み込むと どの様に為りますか?
667デフォルトの名無しさん:2009/09/04(金) 17:19:25
>>665
どうもありがとうございます。
何となく、Windowsではcp932を選べばいいのだと勝手に思い込んでました。

>>666
すみません、勉強不足でよく理解できていないんですが、cp932はWindows以外の環境も考慮してああなっているということでしょうか? もっとよく調べてみます。
668デフォルトの名無しさん:2009/09/04(金) 17:32:22
うにcode か… 素晴らしいな…
669デフォルトの名無しさん:2009/09/04(金) 18:33:07
>インシデント
670デフォルトの名無しさん:2009/09/04(金) 22:10:56
>>665
なんなのその顔文字ふざけてんの?
671デフォルトの名無しさん:2009/09/04(金) 22:18:51
u('-')

たまに出てくるけどかわいい
672デフォルトの名無しさん:2009/09/04(金) 23:06:05
>>670
NEVADA
673デフォルトの名無しさん:2009/09/05(土) 00:12:56
>>671
心の汚れた環境では見れないらしい…
674デフォルトの名無しさん:2009/09/05(土) 22:02:15
osごとに異なるモジュールをインポートするにはどうしたらいいのでしょうか?
C言語で言うifdefみたいなことがしたいのですがうまくいきません・・
675デフォルトの名無しさん:2009/09/05(土) 22:03:45
import sys
sys.platform
676デフォルトの名無しさん:2009/09/05(土) 22:18:03
>>675
ありがとうございます
sys.platformで取り込むモジュールを振り分けられました
importは先頭に書くものだと思っていました。。
677デフォルトの名無しさん:2009/09/06(日) 00:20:31
普通はtry: import hoge except ImportError: import fugaみたいにするんじゃなかったっけ?
678デフォルトの名無しさん:2009/09/06(日) 00:36:49
異なるシステムでもImportErrorでない書き方できるからsys.platform使う方が無難
679デフォルトの名無しさん:2009/09/06(日) 00:42:55
sys.platformというのは初耳だわ
os.nameよりも詳しいのかな
680デフォルトの名無しさん:2009/09/06(日) 00:45:20
platformモジュールとか初めて知った
681デフォルトの名無しさん:2009/09/06(日) 01:05:04
>>680
そういえばそんなのもあったね。程度にしか使われてないよな

sysはビルトインの標準モジュールだから絶対に読み込めるという理由もあるかも
osはパス通ってないとimportできないし
682デフォルトの名無しさん:2009/09/06(日) 18:33:13
スクリプトでテキストを立ち上げたり、IEを起動させたりは可能ですか?
683デフォルトの名無しさん:2009/09/06(日) 18:40:20
yes you can
684デフォルトの名無しさん:2009/09/06(日) 23:46:18
いろいろ試したんだけどwindowsでparamikoが使えない。
これは使えないでOK?
685デフォルトの名無しさん:2009/09/06(日) 23:50:05
Windowsでparamikoつかえるよ?
bazaarなんてWindows用のデフォルトのsshクライアントがparamikoだよ。
686デフォルトの名無しさん:2009/09/07(月) 00:08:23
>>685
俺にとってあんたは神様だ。
設定しかたを教えてくれ!
687デフォルトの名無しさん:2009/09/07(月) 00:51:13
>>685
1. paramiko-1.7.5.zip をダウンロード
2. 適当なディレクトリに解凍
3. コマンドプロンプト開いて 2 のディレクトリに cd で移動する
4. python setup.py build
5. python setup.py install
これを順にやっていって、どこで引っかかるか教えて。

今やってみたら、依存ライブラリのpycryptoが手元の環境でインストール済みだったから
すんなりインストール終わった。
ひょっとしたらpycryptoインストールするときに拡張モジュールのコンパイルが必要かも
知れないから、Pythonのバージョンに対応するコンパイラをもっていない場合は
http://mirror.cameronbergh.com/pycrypto-win/
から対応するパッケージをダウンロードするといいよ。
688デフォルトの名無しさん:2009/09/07(月) 00:54:35
親切にありがとう!
paramiko-1.7.4でやったらすんなりとおった。
689デフォルトの名無しさん:2009/09/10(木) 16:31:07
n(適当な自然数)次元の実数値関数fを定義するときに
f = lambda x : (x**2).sum()
とか書いてあるコードがあって、意味がわかりません。

lambda式がわからないのではなくて、後ろについてる.sum()がわかりません。
インタプリタで上記定義をして、f(x=1.0)とかf(x=[1.0,2.0])とかやってみると、
sum()についてのattribute errorが出ます。

よろしくお願いします…。
690デフォルトの名無しさん:2009/09/10(木) 16:33:31
xがnumpyのarrayなんじゃない?
691689:2009/09/10(木) 16:43:10
>>690
それでした!
どうもありがとうございました。
692デフォルトの名無しさん:2009/09/11(金) 22:49:04
BitTorrent以外でpythonで実装されたクライアントソフトあるいはスタンドアローンソフトって何がありますか?
砕けた言い方をすると、pythonで実装されていて拡張子がexeなそれなりに有名なソフトって何がありますか?
693デフォルトの名無しさん:2009/09/11(金) 22:59:58
BTはPythonやめたんじゃなかったっけ?
694デフォルトの名無しさん:2009/09/11(金) 23:03:43
695デフォルトの名無しさん:2009/09/12(土) 15:52:44
拡張子がexeである必要がよくわからないけど、
bzr, mercurial といったVCSもそうだし、
Editra, Dropbox, TaskCoach, 他にもいろいろあるぞ。
LinuxにいったらさらにPython製デスクトップアプリだらけ。
696デフォルトの名無しさん:2009/09/12(土) 18:57:53
yum
697デフォルトの名無しさん:2009/09/12(土) 18:59:20
とりあえず2chviewerでも作って公開すれば有名になれるんかな
698デフォルトの名無しさん:2009/09/14(月) 05:56:06
699デフォルトの名無しさん:2009/09/14(月) 09:44:16
700デフォルトの名無しさん:2009/09/15(火) 12:47:58
>>692
portage, samuraix
701デフォルトの名無しさん:2009/09/15(火) 21:14:28
wikipediaのPythonのページに
「多くの異なる言語で書かれたモジュールをまとめるグルー言語」
とありますが、これは複数のプログラミング言語で書かれたモジュールを
まとめられるということでいいのでしょうか?
702デフォルトの名無しさん:2009/09/17(木) 08:06:50
>>701
文章を途中で切るよな。
703デフォルトの名無しさん:2009/09/17(木) 09:50:28
ワロタ
704デフォルトの名無しさん:2009/09/24(木) 03:21:16
lambda : 1 + 2
が良くて
lambda : print "hoge2"
がダメな理由って何故ですか?
705デフォルトの名無しさん:2009/09/24(木) 03:35:29
lambda式には式(expression)しか書けないから。printは文(statement)。
706デフォルトの名無しさん:2009/09/24(木) 03:43:40
lambda : sys.stdout.write("hoge2\n")
707704:2009/09/24(木) 04:34:27
ありがとう
・・・Pythonってそう言うのを区別するのか・・・先は長そうだ orz
708デフォルトの名無しさん:2009/09/24(木) 06:08:10
python3ではprintは関数だよ^^
709デフォルトの名無しさん:2009/09/24(木) 07:27:03
Pythonで
print "x=#{x}\n" if DEBUG (Rubyの例)
みたいに1行で完結させる書き方って可能ですか?
同じ物をPythonで書くと
if DEBUG:
print "x="+str(x)
となると思いますが出来ればデバッグメッセージごときに2行は使いたくない・・・
710デフォルトの名無しさん:2009/09/24(木) 08:07:41
if DEBUG: print "x="+str(x)
だが、logging使え。
711デフォルトの名無しさん:2009/09/24(木) 10:34:36
if DEBUG:
print "x="+ str(x)
712デフォルトの名無しさん:2009/09/24(木) 10:36:08
>>711 ミスったので見なかったことに
713デフォルトの名無しさん:2009/09/24(木) 11:42:46
logging.logger
714デフォルトの名無しさん:2009/09/24(木) 13:37:14
http://pythonjp.sourceforge.jp/dev/library/functools.html
ここにある
def partial(func, *args, **keywords):
という書き方に出てくるCのポインタみたいな記号(*args,**keywords)ってどういう意味ですか?
715デフォルトの名無しさん:2009/09/24(木) 13:43:23
716デフォルトの名無しさん:2009/09/24(木) 13:53:55
ありがとござます
717デフォルトの名無しさん:2009/09/24(木) 17:46:57
PILのpython3対応はまだか!
718デフォルトの名無しさん:2009/09/24(木) 22:47:32
>>712
え?どこどこ?
719デフォルトの名無しさん:2009/09/24(木) 23:06:30
Python的には字下げだろう。
720デフォルトの名無しさん:2009/09/27(日) 04:43:59
一度定義した変数を消去することは可能ですか?

python3.0で、
print = 5
とするとprintという名前の変数に5が代入されたのですが、
そのあと元のprintという関数を使いたい場合はどうすればよいのでしょうか?
721デフォルトの名無しさん:2009/09/27(日) 04:53:34
__builtins__.print

もしくは

del print
722720:2009/09/27(日) 05:15:58
>>721
ありがとうございました。
723デフォルトの名無しさん:2009/09/27(日) 11:24:07
urllib2でkeep-alive出来ない。助けて

policy = cookielib.DefaultCookiePolicy( rfc2965=True, strict_ns_domain=cookielib.DefaultCookiePolicy.DomainStrict)
cj = cookielib.LWPCookieJar(cookie_jar_path, False, policy)
cjhdr = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cjhdr, RefererAddHandler())
opener.addheaders = [
 ('User-agent', 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)'),
 ('Connection','Keep-Alive')
 ('Keep-Alive'','300')
]
r = opener.open( uri )
rinfo = r.info()
for key in rinfo.keys() :
 print h, rinfo[key]

## Referer を Autoでつける為のハンドラ ########
class RefererAddHandler (urllib2.BaseHandler) :
 def http_request(self, req) :
  req.add_header("Referer", req.get_full_url())
return req

---------------------------
firefoxなんかでレスポンスヘッダを見ると、
 Connection: Keep-Alive
と出てる。でも上記コードでは
 Connection: Close
になる。なにか足りないですか?
724723:2009/09/27(日) 11:26:39
訂正:
 ('User-agent', 'User-Agent: Mozilla/5.0 〜略)
の箇所は
 ('User-agent', 'Mozilla/5.0 〜略)
725デフォルトの名無しさん:2009/09/27(日) 11:31:06
HTTPヘッダでkeep-aliveするようにしても
urllib2がそれを想定してないからうまく動かなかったような
ソース読んで絶望した記憶がある

urllib2 keep-alive でぐぐってみるといいんじゃないか
726723:2009/09/27(日) 11:34:14
>>725
ありがとう。ここのサイトのをやってみる!
http://python.blog-slime.com/function/urllib/
727723:2009/09/27(日) 11:36:47
↑はurllibだった。下のサイトのを拝借するのが一番楽そうですね。d
http://memo.jj-net.jp/18
728723:2009/09/27(日) 12:03:05
ちなみに・・・

urllib2だとcookieの自動処理が容易に出来るけど、keep-aliveが出来ない
urllib だとcookieの自動処理を容易に出来ないが、keep-aliveは出来る
(http://www.python.jp/doc/2.4/lib/cookielib-examples.html見ると、cookielibはurllib2での使用を想定している?)

HTTP/HTTPSをやる上で、比較的高機能で知られたライブラリってありますか?
(PerlのLWP、JavaのCommons/HttpClientみたいな)
729デフォルトの名無しさん:2009/09/27(日) 18:42:43
730デフォルトの名無しさん:2009/09/27(日) 18:45:28
一番下の example が参考になるかも試練

http://docs.python.org/dev/3.0/library/http.cookiejar.html
731デフォルトの名無しさん:2009/09/27(日) 18:53:41
おまいらおちつけ
>>723のコードはPython2系列だ
732デフォルトの名無しさん:2009/09/27(日) 19:01:48
https://fisheye.toolserver.org/browse/~raw,r=6953/pywikipedia/branches/rewrite/pywikibot/comms/threadedhttp.py

Bingo? 直感で
実は keep-alive の意味がよくわからないw
733723:2009/09/27(日) 23:14:59
みんな、アドバイスありがとう!
python 2.4 に拘っている訳ではないんだ。
v3.0に上げて >>730のurllibとhttp.cookie_jarでやってみる。

>>732
ありがとう!参考にさせてもらうぜぃ
734723:2009/09/28(月) 01:08:16
python3.1 ってif,for,printが式になってて、今まで書いてたコードが動かねーおwww
なんかLISPっぽいね。
2.6と変わりすぎててわらってしまったw
735723:2009/09/28(月) 01:13:56
ひとりごと多くてすまん
>>734は気にしないでくれ。勘違いだったお
736デフォルトの名無しさん:2009/09/28(月) 02:44:31
Twitterでやれ
737デフォルトの名無しさん:2009/09/28(月) 14:47:48
Tkinterについて質問です

from Tkinter import *

root = Tk()
sub_win = None

def button_callback(event):
global sub_win
print 'button down'
sub_win.destroy()

def message_window():
global sub_win
sub_win = Toplevel()
button = Button(sub_win, text='window close')
button.pack()
sub_win.bind('<Escape>', button_callback)
button.bind('<Button-1>', button_callback)

Button(root, text='about', command=message_window).pack()

root.mainloop()

以上のようなコートなのですが、ESCキーを押してもコールバック関数が呼ばれません
何故でしょうか?よろしくお願いします
738デフォルトの名無しさん:2009/09/28(月) 15:28:31
フォーカスの合ってるウィジェットにしか
イベントは送られない。
739737:2009/09/28(月) 16:00:47
レスありがとうございます
>>738
>フォーカスの合ってるウィジェットにしか
>イベントは送られない。
もうちょっと単純にしてみて

from Tkinter import *

root = Tk()

def esc_down(event):
print 'esc key down'
root.destroy()

button = Button(root, text='close')
button.pack()
button.focus_set()
button.bind('<Button-1>', esc_down)
button.bind('<Escape>', esc_down)

root.mainloop()

こういう事ですよね?
これの「button.bind('<Escape>', esc_down)」を「root.bind('<Escape>', esc_down)」
としてもきちんとコールバック関数は呼ばれます。
上のコードのTkをToplevelにしてもESCキーのイベントの補足は成功するようです
>>737みたいな形にするとうまく行かないです。よろしくお願いします
740デフォルトの名無しさん:2009/09/28(月) 18:59:50
UTF-8にエンコードする方法を教えて下さい。
例えばx = "あいうえお"のときyに"%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A"を代入したいんですが
どのようにすればいいでしょうか?
741デフォルトの名無しさん:2009/09/28(月) 19:15:31
元の文字列がShift_JISだと仮定

import urllib
x = 'あいうえお'
y = urllib.quote(x.decode('sjis').encode('utf8'))
742740:2009/09/28(月) 20:07:56
>>741
ありがとうございました、出来ました。
743デフォルトの名無しさん:2009/09/28(月) 21:03:12
>>737
好きなのをどうぞ

- 2つ目のウィンドウをクリックしてからEsc押す
- sub_win.focus_set()
- root.bind('<Escape>', button_callback)
744デフォルトの名無しさん:2009/09/29(火) 03:25:29
複数行の文字列xからどうすれば中身を1行ごとに分割して1つずつリストに代入させることが出来ますか?
745デフォルトの名無しさん:2009/09/29(火) 03:40:05
複数行の文字列をどういうデータ形式で持っているのかによる。
746デフォルトの名無しさん:2009/09/29(火) 03:42:06
"abc\ndef\nghi".split("\n")
747737:2009/09/29(火) 03:59:51
>>743
レスありがとうございます
2枚目のウインドウは作っただけではフォーカスは動かないのか・・・il||li ○| ̄|_
真ん中の方法を使わせて貰いました
748デフォルトの名無しさん:2009/09/29(火) 04:04:20
Tkinterについての質問です。
何らかのイベントが起きたときにフレームの内容を
丸ごと入れ替えるようなプログラムはどの用にする
ば書くことができますか?
749デフォルトの名無しさん:2009/10/01(木) 12:00:05
virtualenvとpip
750デフォルトの名無しさん:2009/10/02(金) 02:35:44
質問です。
環境はvine5.0 Python 2.5.4 です。

>>> from turtle import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named turtle

と出ました。
turtleが入ってないということでしょうか?
またその場合どうすればいいのでしょうか?
どうかご教授お願いします。

751デフォルトの名無しさん:2009/10/02(金) 04:17:28
Tkinterが入ってないんじゃないか
vine tkinter でぐぐってみて
752デフォルトの名無しさん:2009/10/02(金) 14:49:59
>>751
できました!
ありがとうございました!
753デフォルトの名無しさん:2009/10/03(土) 13:16:23
os.startfileも、subprocess.Popenに置き換えたほうがいいのかな。
754デフォルトの名無しさん:2009/10/03(土) 14:30:28
いちいち関連付けを調べなくてもいいもなら
それでおk
755デフォルトの名無しさん:2009/10/03(土) 21:07:21
ふと思ったんだけど、Pythonてドイツ語だとピュトンみたいな読みになるの?
756デフォルトの名無しさん:2009/10/03(土) 22:16:29
ぴゅちょん
757デフォルトの名無しさん:2009/10/03(土) 22:39:25
webからの情報取得とメール(これはモジュール利用)を使ってプログラム開発を考えておりますが
アドバイスをお願い致します。
・為替のレートを取得(特に決めていないが、リアルタイムレート)
・特定のレートになったところでメール通知
これなんて簡単でしょうか?
webからリアルタイムに情報を取得するには?
758デフォルトの名無しさん:2009/10/03(土) 22:49:08
あんまPythonに関係ないような。
HEADで定期的にポーリングで間に合う?
759デフォルトの名無しさん:2009/10/03(土) 22:55:57
 webで取れるのは殆ど20分お倉だけどそれで良いの?
760757:2009/10/03(土) 22:58:51
>758
pythonしかわかりません(涙
勉強してみます。

>759
リアルタイム希望です。
urllibだとリアルタイムはできないですよね?
761デフォルトの名無しさん:2009/10/03(土) 23:03:22
そういう問題じゃないし
762デフォルトの名無しさん:2009/10/03(土) 23:08:43
763デフォルトの名無しさん:2009/10/04(日) 14:24:38
Tkinterで動きのある表示をしたいのですが,
それほど重要な表示でもないので「暇な時」に
描画を更新したいと思っています.

「暇な時にコールバックして」というような
コールバックの枠組みは Tk にあるのでしょうか?
今は強引にループを回してますが,それだと他の処理に
対して影響が出るし(主処理はmultiprocessingで
いくつかのプロセスに投げてます),かといって
ウェイトを入れるとしても動的に調整したいし・・・

gtkを使うときには

import gobject
gobject.idle_add(update_graph)

のようにしています.
764763:2009/10/04(日) 14:54:21
manager = pylab.get_current_fig_manager()
def run(*args):
    shori()
    manager.window.after(50, lambda : manager.window.after_idle(run))

こんな感じにしてみました.
単純なループよりは穏やかになりました.
765デフォルトの名無しさん:2009/10/04(日) 23:44:48
cygwinでpyファイルを実行しようとすると
from pylab import *
No module named pylab
とエラーが出てしまいます。
ipython で
from pylab import *
としてもエラーが出ないので、Matplotlibはインストールされてるはずなのですが・・・。
どうしたらいいしょう?
766デフォルトの名無しさん:2009/10/05(月) 00:40:00
>>765
Cygwin内のPython(/usr/bin/python)にインストールされてないのでは
767デフォルトの名無しさん:2009/10/06(火) 01:50:22
コードから実行中のPythonのバージョンを得るにはどこから取り出せばいいでしょうか?

レンタルサーバのOSにインストールされていてCGIとして一応使えるようなので
使ってみたいのですが、わりと古いバージョンのようなので、
(webから)確認したいと思っています。
RUBY_VERSIONのような定数を期待したのですが、どうにも・・・
768デフォルトの名無しさん:2009/10/06(火) 01:52:05
import sys
sys.version
769デフォルトの名無しさん:2009/10/06(火) 01:56:16
import cgi
cgi.test()
770767:2009/10/06(火) 02:10:04
>>768-769
確認できました!
バージョンは2.3.4でした。もっとずっと古い予感がしてたので少し安心・・。
ありがとうございました。cgi.test()の方も大助かりです!
771デフォルトの名無しさん:2009/10/06(火) 02:13:08
2.3.4は古い
772デフォルトの名無しさん:2009/10/06(火) 02:18:37
日本語codecすらない
773デフォルトの名無しさん:2009/10/06(火) 18:54:48
web上で直接Pythonのコマンドが入力出来て反応が帰ってくる
サイトが有れば教えてください

Rubyとかは見たことある気がするのですが
774デフォルトの名無しさん:2009/10/06(火) 18:58:18
775デフォルトの名無しさん:2009/10/06(火) 19:52:32
urlからファイル名を取り出したいのですがurlparse.urlsplit(url).path.split('/')[-1]しか方法はありませんか?
776デフォルトの名無しさん:2009/10/06(火) 20:16:50
たぶん。URLってどれがいわゆるファイルか字面だけ見ても判別できない気がする
http://www.example.com/foo/bar/cgi.py/path_info/path_info2
みたいになる場合もあるから
777デフォルトの名無しさん:2009/10/06(火) 20:53:00
os.path.basename(url)
778デフォルトの名無しさん:2009/10/06(火) 20:56:56
URLのカオスっぷりったら半端ない
779デフォルトの名無しさん:2009/10/06(火) 21:01:05
ファイル名で終わってるとは限らないよw
780デフォルトの名無しさん:2009/10/06(火) 21:03:00
781デフォルトの名無しさん:2009/10/06(火) 21:21:41
ウリ
782773:2009/10/07(水) 06:15:51
>>774

遅くなりましたが ありがとうございます
783デフォルトの名無しさん:2009/10/07(水) 15:06:54
TkinterのLabelに貼り付けた画像を親Widgetの大きさによって
拡大縮小させるにはどうすればいいですか?
784デフォルトの名無しさん:2009/10/08(木) 05:38:44
expand
785デフォルトの名無しさん:2009/10/08(木) 06:22:19
テキストファイルに保存した
◯◯.py
と言うファイルを

IPythonで実行することは出来るのでしょうか?
出来るのならその方法を教えてください
786デフォルトの名無しさん:2009/10/08(木) 11:50:35
importすりゃいいんじゃね?
787デフォルトの名無しさん:2009/10/08(木) 12:57:12
http://d.hatena.ne.jp/code46/20090531/p1

ここに書いてあるcreateDict.pyで
#日付スキップ等があり、アルファベットだけの文字列もスキップしたいのですが、
何を加えれば良いのでしょうか。
788デフォルトの名無しさん:2009/10/08(木) 13:33:40
# -*- encoding: utf-8 -*-
import sys
import re

#数字四桁が入ったキーワードは役に立ちませんので検出して飛ばします。
year = re.compile("[0-9]{4}")

#驚くべきことにはてなキーワードには%00というキーワードがありますが、
#これがcsvとして提供されているダンプではヌル文字になっているのでシステム制御文字を非許可にします。
ng = [chr(i) for i in range(0,32)]

def main():        
        for x in sys.stdin:
                if re.search(year,x):
                        continue #日付スキップ
                k = x.split("\t")[1].strip()
                if len(k) < 2:
                        continue #一文字スキップ
                for word in ng:
                        if word in k:
                                continue #システム制御文字スキップ
                k = k.lower() #MeCabはケースセンシティブなので小文字に統一して辞書作成
                cost = int(max(-36000, -400 * len(k)**1.5)) #コストについては後述
                print "%s,0,0,%s,名詞,一般,*,*,*,*,%s,*,*,はてなキーワード," % (k,cost,k) #0については後述
if __name__ == '__main__':
  main()
789デフォルトの名無しさん:2009/10/08(木) 15:55:39
for x in range(3):
pass

みたいな感じでループを回すのに range を使っているんですが,
Eclipse + PyDev 1.5 では x が Unused Variable だって
警告が出ます.無視すればいいんですが,なんか気持ち悪い.
単純にループを回す時こんなことするのはアホですか?
790デフォルトの名無しさん:2009/10/08(木) 16:45:39
>>789
"x"のかわりに"_"をつかうとか、Ctrl+1で警告を消すとか
791デフォルトの名無しさん:2009/10/08(木) 16:56:48
ループの中身がpassだけのときって最適化されてループがなくなったりはしないの?
792デフォルトの名無しさん:2009/10/08(木) 17:13:46
バイトコードを見る限り、最適化されてない。
イテレータの中で何かやってるかもしれないので
安易に削れないのかもしれない。
793デフォルトの名無しさん:2009/10/08(木) 17:43:28
>>784
expandではできませんでした
794デフォルトの名無しさん:2009/10/08(木) 18:22:40
できる
がんがれ
795デフォルトの名無しさん:2009/10/08(木) 19:51:16
>>794

#このようにしてもできません
from Tkinter import *

root = Tk()
p = PhotoImage(file = "hoge.gif")
Label(root,image = p).pack(expand=True,fill=BOTH)
root.mainloop()
796デフォルトの名無しさん:2009/10/08(木) 23:49:26
from Tkinter import *
import PIL.Image, PIL.ImageTk
EDGE = [-6, -4, -2][1]
class Root(Tk):
  def __init__(self):
    Tk.__init__(self)
    self.p = PIL.Image.open('hoge.gif')
    self.i = PIL.ImageTk.PhotoImage(self.p)
    self.l = Label(self, image=self.i, relief=RAISED)
    self.l.pack(expand=True, fill=BOTH)
    self.l.bind('<Configure>', self.change_size)
  def change_size(self, ev):
    (w, h) = (ev.width + EDGE, ev.height + EDGE)
    self.i = PIL.ImageTk.PhotoImage(self.p.resize((w, h)))
    self.l.configure(image=self.i)
    print 'resized %d %d' % (w, h)
Root().mainloop()

縁の幅を間違うと勝手にサイズが・・・orz
797デフォルトの名無しさん:2009/10/09(金) 13:00:06
>>796
ありがとうございます。
縁の幅と言うのはどこを指しているんですか?
798デフォルトの名無しさん:2009/10/09(金) 16:24:51
wxPythonの話題はここでいいですか?
wxPythonにおけるコントロールやパネルという用語の概念が整理できていません
Appは複数のFrameを抱えることができて
FrameはPanelを持ちPanelはControlを持つということでしょうか?
799デフォルトの名無しさん:2009/10/09(金) 20:31:57
中身が全て半角英字である正規表現はどー書けば良いのでしょうか?
800デフォルトの名無しさん:2009/10/09(金) 21:17:40
[a-zA-Z]+
801デフォルトの名無しさん:2009/10/09(金) 21:24:07
こんなん?

^[a-zA-Z]*$
802デフォルトの名無しさん:2009/10/09(金) 21:36:47
それは空文字列にもマッチするぞ
803デフォルトの名無しさん:2009/10/10(土) 01:59:03
GUIを使うと関数だらけになってコードが見にくくなる・・・
Tkinterも例外じゃない・・・(TT
804デフォルトの名無しさん:2009/10/10(土) 02:14:06
wxPython + XRCed で快適生活
805デフォルトの名無しさん:2009/10/10(土) 07:29:06
コンストラクタをオーバーロードしたいんだけど、どうやればいい?
Baseクラスを継承してて、ctorの引数をそのままBaseのctorに渡したい
def __init__( self, argv4Base ):
 Base.__init__( self, argv4Base );
def __init__( self ):
 Base.__init__( self );
こんなことをやりたいんだけど、
def __init__( self, *argv ):
 if len(argv)>0: Base.__init__( argv[0] );
806デフォルトの名無しさん:2009/10/10(土) 07:30:19
途中で書き込んだ。続き。
def __init__( self, *argv ):
 if len(argv)>0: Base.__init__( self, argv[0] );
else: Base.__init__( self );
なんてctorの中でifで切り分ける方法以外ない?
メタプログラミング使うようなcoolな方法おしえてくだしあ
807デフォルトの名無しさん:2009/10/10(土) 08:20:44
**kwargs
808デフォルトの名無しさん:2009/10/10(土) 12:54:24
>>800-802
正解はなんでしょうか?教えてください。
809デフォルトの名無しさん:2009/10/10(土) 13:56:34
>>808
コードがお望み?

import re
def isallalpha(s):
    return re.match(r'^[a-zA-Z]+$', s) != None

ついでに正規表現じゃなかったら

def isallalpha(s):
    return all([ c.isalpha() for c in s ])
810デフォルトの名無しさん:2009/10/10(土) 14:58:16
関数呼び出しの中で直接内包表記を使えるぜ。
def isallalpha(s):
  return all(c.isalpha() for c in s)
811デフォルトの名無しさん:2009/10/10(土) 19:28:09
コードの中で次のような順番で書くとNameErrorになります。
some_method()
def some_method:
 pass

このときCのプロトタイプ宣言のような書式はありますか?
それとも先に関数定義してから
if __name__ == '__main__':
 some_method()
のように書くのがPython流でしょうか。
習慣的に、短いテストコードのようなときなど、関数定義を後の方にしておきたい気もして・・・
よろしくお願いします。
812デフォルトの名無しさん:2009/10/10(土) 19:33:41
>>811
>>Cのプロトタイプ宣言のような書式
ない
>>先に関数定義
してから実行するのが普通
doctest.testmod() とか調べるといいよ
813812:2009/10/10(土) 19:52:50
>>812
ありがとうございます。開発ツールも標準でいろいろ揃ってるんですよね。
だんだん試したいと思います!
814デフォルトの名無しさん:2009/10/10(土) 21:28:20
質問です。
私は9月頃から『みんなのPython改訂版』(初版)で習得中の初心者です。
14章のToDo管理アプリケーションが起動しないのですが、
そのままのコードで起動した人はいますか?
(一瞬だけインタラクティブシェルが起動、エラー表示はありません)
また、何が起動しない原因と考えられますか?
初歩的な原因かもしれません。PATHは設定してます。
環境は、WindowsXP Python2.6 Eclipse3.5 Pydev1.4です。
ご回答よろしくお願いします。

スクリプトファイルです。
chapter14.zip (todoapp.py todoitem.py todocontainer.py)
ttp://www1.axfc.net/uploader/Sc/so/44301
キーワード: python

815デフォルトの名無しさん:2009/10/10(土) 22:19:10
>>811
class Test(object):
  def __init__(self):
    self.some_method()
  def some_method(self):
    pass
Test()
816デフォルトの名無しさん:2009/10/10(土) 22:26:37
>>814
root = Tk()
frame = ToDoApp(root)
frame.createwidgets()
root.mainloop()

入力ミスってるっぽいので、あとは自分でよろ。
817>>814:2009/10/11(日) 03:57:03
>>816
ありがとうございます。
本にそのコードは書かれていませんでした。
後で追加します。
818デフォルトの名無しさん:2009/10/11(日) 09:55:00
conn=open('2mega.txt')
data=conn.read()
save=open('save.txt', 'a+')

for line in data.splitlines():
 save.write(line.decode('sjis').encode('utf-8'))
 print line.decode('sjis').encode('utf-8')

文字コード変換を書いてみたら、なかなか終わらず
おかしいなとは思ったのですがそのまま一日放置

今日起きて処理を止めて確認してみるとそこには
12Gigaのテキストファイルがありました…

save.write(data) で書き込もうとするとハング状態になるから
ジェネレータで回して書き出す方針でやろう => なぜか無限ループorz

正しく書くにはどうかけば良いのでしょうか?
819デフォルトの名無しさん:2009/10/11(日) 10:26:26
conn=open('2mega.txt')
data=conn.read()

for line in data.splitlines():
 print line.decode('sjis').encode('utf-8')

うまくいく時とうまくいかない時があるみたいだ
というか上手くいってもこれだと順番に書き出せないのか…
820デフォルトの名無しさん:2009/10/11(日) 10:46:55
infile=open('2mega.txt')
outfile=open('save.txt', 'a+')
for line in infile:
  outfile.write(line.decode('sjis').encode('utf-8')

import codecs
infile=codecs.open('2mega.txt', encoding='sjis')
outfile=codecs.open('save.txt', 'a+', encoding='utf-8')
outfile.writelines(infile)
821デフォルトの名無しさん:2009/10/11(日) 11:14:14
2MBのファイルの中身を読み込んでまるごと
decode -> encodeしたぐらいじゃハングしないだろう
いちいち標準出力に吐いてるから遅かったとかじゃない?

出来上がったファイルが12GBなのは謎
822デフォルトの名無しさん:2009/10/11(日) 12:20:10
Python2.6/XP/512MBで何も考えずにreadしたら400MBくらいでMemoryError吐いたなぁ
どーしてもオンメモリで処理しなきゃいけないとき以外はイテレータ回すべきだね
823デフォルトの名無しさん:2009/10/11(日) 15:36:30
MemoryError の前になんか予兆を検出できないもんかねぇ
824デフォルトの名無しさん:2009/10/11(日) 17:25:08
出来た気がする
825デフォルトの名無しさん:2009/10/11(日) 17:26:26
なんつー曖昧な…
826デフォルトの名無しさん:2009/10/11(日) 17:27:04
エラー:メモリが足りないかもしれないけど足りるかもしれません。
827デフォルトの名無しさん:2009/10/11(日) 18:03:22
>>> for x in range(10000000):
...  pass

1)rangeの数字が充分小さいとき->無事実行完了
2)rangeの数字が充分大きいとき->実行前にMemoryErrorですぐに終了
3)rangeの数字がちょっと大きいとき->時間はそれなりにかかるがちゃんと実行されて終了
4)rangeの数字が限界ぎりぎりの大きさのとき->swap起こしまくってハングアップw
(辛うじてリモートからsshでkill出来たので助かった)

4)が起きないようにしたいんだけど
828デフォルトの名無しさん:2009/10/11(日) 18:17:18
直接OSのシステムコール呼び出せばスラッシングって検出できる?
vmstatとかwindowsならパフォーマンスカウンタでわかるから
当然出来るのか…
829デフォルトの名無しさん:2009/10/11(日) 20:05:34
自分ならめんどいからThreadつくって動かして見込んだ時間に終わらなければkillするな
830デフォルトの名無しさん:2009/10/11(日) 20:10:22
>>827
range->xrangeはどうなん
831デフォルトの名無しさん:2009/10/11(日) 20:18:17
>>830
xrangeは知ってるけど
問題の目的と違うから

っつーか空気嫁w
832デフォルトの名無しさん:2009/10/11(日) 22:57:57
所持期目的がわからない
833デフォルトの名無しさん:2009/10/12(月) 01:25:41
要領を得ない質問して空気嫁とか
思わず吹いてしまったよ
834デフォルトの名無しさん:2009/10/12(月) 11:36:56
wxPython にはHTMLのレンダラが付いてますがこれは何ベースなんでしょうか?
WindowsでIEのエンジンを使って表示させることはできますか?
835デフォルトの名無しさん:2009/10/12(月) 12:36:01
demo の ActiveX_IEHtmlWindow.py が IE 使ってる
836デフォルトの名無しさん:2009/10/12(月) 16:13:52
wxPython、PyGTK、Tkinter、PyQt
GUIってどれ使えばいいかな?
837デフォルトの名無しさん:2009/10/12(月) 16:27:43
PyQtでおk
838デフォルトの名無しさん:2009/10/12(月) 16:32:54
PyScripterでUTF-8(BOM無し)の.pyファイルを開くと、ソース内の日本語部分が文字化けしてしまいます。

PyScripterのバージョンは1.9.9.7、エディタ設定で日本語フォントの指定・文字セットに日本語の指定はしてあります。
一通りググってみたのですが解決には至りませんでした。

既知の現象でしたらアドバイス頂けませんでしょうか。
スレ違いでしたら申し訳ありません。
839デフォルトの名無しさん:2009/10/12(月) 16:41:11
え〜
俺は wxPython がすき
840デフォルトの名無しさん:2009/10/12(月) 16:47:52
>>838
ファイルの頭に # -*- coding: utf-8 -*- はある?
841デフォルトの名無しさん:2009/10/12(月) 17:30:35
PyQt > wxPython > Tkinter > PyGTK

俺は wxPython がすき
842デフォルトの名無しさん:2009/10/12(月) 17:32:15
>>840
申し訳ありません。言葉が足りず語弊がありました。

まず扱っているのはPython3.0で、更に.pyファイルを実行した時の日本語表示に関する問題ではなく、
エディタ内でのファイル読み込み->ソースコード表示時、文字化けが発生するという問題です。

恐らくUTF-8(BOM無し)のファイルを開くときの文字コード認識がおかしいのだと思いますが、
やはりこれはPythonというよりPyScripterの問題の様なのでスレ違いですね…
843デフォルトの名無しさん:2009/10/12(月) 17:36:42
>>840

仰るとおりファイル先頭に文字コード宣言を付加したら、ちゃんと表示されました。

通常ならエディタはファイル自体の文字コードから自動判断してくれるものだと考えていましたが、
PyScripterはファイルの文字コード判断方法が特殊なのですね…

ありがとうございました。
844デフォルトの名無しさん:2009/10/12(月) 17:37:37
>>837>>839>>841
ありがとう
PyQtとwxPython両方共少し使ってみて決めてみる
845デフォルトの名無しさん:2009/10/12(月) 17:41:33
>>843
特殊というか、Pythonのやり方と同じにしただけでしょ。
Python以外のファイルは自動判定するとヘルプに書いてある。
846デフォルトの名無しさん:2009/10/12(月) 17:46:18
>>844
やっぱ標準モジュールは強いって事でTkinter
まあwxの方が楽だけど
xulrunner使いたいけどビルド環境整える時点で面倒になった
847デフォルトの名無しさん:2009/10/12(月) 21:39:22
>>843
UTF-8は自動判定は難しいよ。
だからMSはBOMを付けてるんだよ。
848デフォルトの名無しさん:2009/10/12(月) 23:21:11
>>846
楽ってのはwxの方が最初から色々用意されてるって意味?
849デフォルトの名無しさん:2009/10/12(月) 23:39:06
>>848
VisualStudioとかDelphiとか使ったことある人にはwxは触りやすい
Tkinterはtcl/tk使ったことないと取っつきにくい気がする
850デフォルトの名無しさん:2009/10/12(月) 23:45:38
windowsでpy2exeでexe化するとき
wxPythonだとすっきりまとまるのに
Tkinterだとサブディレクトリが出来て使っていない色んなモジュールまでいっぱい付いてくるのが嫌
851デフォルトの名無しさん:2009/10/13(火) 00:06:49
ほんとユニコード仕様はうんこすぎる。
852デフォルトの名無しさん:2009/10/13(火) 00:16:48
理由を示さずたたいてるのは大抵Ruby厨
853デフォルトの名無しさん:2009/10/13(火) 00:33:24
rubyって最近まで$CODE代入するしかなかったんだよね
やっと
# -*- coding: utf-8 -*-
って書けるようになった
854デフォルトの名無しさん:2009/10/13(火) 14:25:06
why wxgtk is used in dropbox client?
855デフォルトの名無しさん:2009/10/13(火) 14:29:41
DropBoxクライアントはwxPythonだと思ってたけど、wxgtkだっけ?
wxWidgetsのいいところは、GPLでもLGPLでもないところだね。
exeひとつにまとめても、クローズにしたい部分のソースはクローズのままにできる。
856デフォルトの名無しさん:2009/10/13(火) 21:24:30
Tkinterのタイトルバーを非表示にすることって可能ですか?
857デフォルトの名無しさん:2009/10/14(水) 15:48:56
ほかの人の書いたコードをメンテナンスしています
リストからのアイテムの削除で del 文を使うとき
(おそらくそう意図していると思われる)

del mylist[1]

じゃなくて

del (mylist[1])

という書き方に出会ったんですが
効果は同じでしょうか?
文なのに () を付ける意味が分からん…のですが
858デフォルトの名無しさん:2009/10/14(水) 16:05:03
関数だと思ったんだろ
859デフォルトの名無しさん:2009/10/14(水) 20:53:28
Rubyのpに相当する関数/メソッドってありますか?
非可視コードを確認するのにいちいちファイルに書き出すのは
非常にめんどくさいのですが・・・
860デフォルトの名無しさん:2009/10/14(水) 20:58:19
861デフォルトの名無しさん:2009/10/14(水) 21:21:37
862デフォルトの名無しさん:2009/10/15(木) 01:12:16
p = print
p 3*9
863デフォルトの名無しさん:2009/10/15(木) 05:56:45
Python用のプロファイラというとどんなものがあるのでしょうか?
できれば PyDev から便利に使えるとありがたいのですが・・・
864デフォルトの名無しさん:2009/10/16(金) 01:11:51
http://menu.2ch.net/bbsmenu.html
ここのhtmlを1行ずつ開くコードを書きました。

<A HREF=http://xxx.2ch.net/yyy/>zzz</A>
となってるのからxxx,yyy,zzzを抜き出して配列に格納したいです。
どのように書くべきでしょうか?
865デフォルトの名無しさん:2009/10/16(金) 01:28:38
俺も自家製2chブラウザ作ってる
>>> content = '<A HREF=http://xxx.2ch.net/yyy/>zzz</A>'
>>> import re
>>> for r in re.finditer('<A HREF=(http://(\w+?)\.2ch\.net/(\w+?)/)>(.*?)</A>', content, re.I):
... r.groups()
('http://xxx.2ch.net/yyy/', 'xxx', 'yyy', 'zzz')
866デフォルトの名無しさん:2009/10/16(金) 01:29:25
>>865
ありがとうございます。。
867デフォルトの名無しさん:2009/10/16(金) 02:55:47
クロールは控えめになw
868デフォルトの名無しさん:2009/10/16(金) 10:12:26
雑談やノイズをスルーする機能と
ぬるぽにがっする機能をおながいします
869デフォルトの名無しさん:2009/10/16(金) 13:11:02
ネットワークを利用するアプリケーションで
twisted.internet.reactor.registerWxApp
をリアクタとして使っているのですが
Qtを対象としたイベントループ兼リアクタはあるのでしょうか?
870デフォルトの名無しさん:2009/10/16(金) 13:12:11
871デフォルトの名無しさん:2009/10/16(金) 13:15:21
PythonとTwisitedが絡んでるのにQtスレ行けって鬼畜すぎる
872デフォルトの名無しさん:2009/10/16(金) 13:40:04
http://twistedmatrix.com/documents/8.2.0/api/twisted.internet.html
これ見ると各種のリアクタがあり,
Windows では win32eventreactor とか使うんだろうなと思うんですが
qtreactor が undocumented で何も記述がなく
使ってる人がいたら情報求むということで…
よろしくお願いします.

正直私はネットワーク処理の部分をtwistedで書くのがメインなので
PyQtと相性が良ければQtに明るいプログラマにGUIを任せたいと思っています.
873デフォルトの名無しさん:2009/10/16(金) 13:42:11
ttp://twistedmatrix.com/trac/wiki/QTReactor
twistedは大分前に窓から投げ捨てたのでどうなるか知らん
874デフォルトの名無しさん:2009/10/16(金) 13:59:45
>>871
QtスレいくとwxPythonスレに行けとかいわれそうで・・・
875デフォルトの名無しさん:2009/10/16(金) 14:03:56
876デフォルトの名無しさん:2009/10/16(金) 14:17:36
一つのリアクタでやらずに
別々のスレッドでやってもいい気もしてきましたが…
まぁあるものなら使ってみようか
877デフォルトの名無しさん:2009/10/16(金) 14:30:29
878デフォルトの名無しさん:2009/10/16(金) 15:05:23
Qtはシグナルによるイベントの伝播
wxPythonはコールバックによるイベント処理
ってことだと思うのですが
どちらの方がデバッグしやすいものなんでしょうか?
特に大規模なGUIになってきた場合
879デフォルトの名無しさん:2009/10/16(金) 15:35:46
Qt4reactorくらいなら自分で書いても大したことが無いような気がしないでもない
880デフォルトの名無しさん:2009/10/16(金) 15:37:23
>>878
たぶんsignal
881デフォルトの名無しさん:2009/10/16(金) 16:15:00
Pythonのクラス定義を下記の様にして、valueアトリビュートを表示するとエラーになってしまいます。

>>>class□Myclass:
def□_ini_(self):
self.value = 0
print "make"

□は半角スペースを表し、インデントで次の行に行く際はエンターを一回押しています。

>>>i = Myclass()
>>>i.value
AttributeError: m instane has no attribute 'value'

まずi = Myclass()を実行しても"make"という行が出てきません。
次の行のi.valueを実行すると上記のエラーがでてしまいます。
クラス定義の仕方で間違っている個所があればお教えください。
よろしくお願いします。
882デフォルトの名無しさん:2009/10/16(金) 16:23:17
_ini_

__init__
883デフォルトの名無しさん:2009/10/16(金) 16:41:24
Windows版のpython2.6にos.mknodが入ってないのはなぜ?

しょうがないからos.systemで代用したが。
884デフォルトの名無しさん:2009/10/16(金) 16:46:38
>>882さん
できました! ありがとうございました!!
885デフォルトの名無しさん:2009/10/16(金) 19:17:11
pythonからmysqlにinsertしたいのですが、どう書けばいいですか?
ググりまくったんですがセレクトしか出てこなくて。
886デフォルトの名無しさん:2009/10/16(金) 19:36:43
ぼくらを乗せてしゅぽしゅぽしゅぽぽ
887デフォルトの名無しさん:2009/10/16(金) 19:45:52
すいません質問です。御助言をお願いします。以下はWindows Vista SP1 のコマンドプロンプト上で行いました。
http://pyinline.sourceforge.net/をインストールし、ここに書いてあるサンプルをexample.pyとして
実行しようとしましたら、エラーとなりました。
----example.pyここから
import PyInline, __main__

m = PyInline.build(code="""
double my_add(double a, double b) {
return a + b;
}""",
targetmodule=__main__, language="C")

print my_add(4.5, 5.5) # Should print out "10.0"
----ここまで
C:\src>python example.py
running build
running build_ext
Traceback (most recent call last):
File "C:\src\example.py", line 7, in <module>
targetmodule=__main__, language="C")
File "C:\Python25\Lib\site-packages\PyInline\__init__.py", line 38, in build
return b.build()
File "C:\Python25\Lib\site-packages\PyInline\C.py", line 45, in build
self._compile()
File "C:\Python25\Lib\site-packages\PyInline\C.py", line 265, in _compile
raise BuildError(e)
PyInline.BuildError: error: Python was built with Visual Studio 2003;
extensions must be built with a compiler than can generate compatible binaries.
Visual Studio 2003 was not found on this system. If you have Cygwin installed,
you can try compiling with MingW32, by passing "-c mingw32" to setup.py.

そのためbuildフォルダと、site-packagesフォルダにできたファイルを削除してから、(続きます)
888887の続きです:2009/10/16(金) 19:47:12
そのためbuildフォルダと、site-packagesフォルダにできたファイルを削除してから、

C:\src\PyInline-0.03>python setup.py build -c "mingw32"
C:\Python25\lib\distutils\dist.py:247: UserWarning: 'licence' distribution optio
n is deprecated; use 'license' warnings.warn(msg)
running build
running build_py
creating build
creating build\lib
creating build\lib\PyInline
copying PyInline\C.py -> build\lib\PyInline
copying PyInline\c_util.py -> build\lib\PyInline
copying PyInline\__init__.py -> build\lib\PyInline


C:\src\PyInline-0.03>python setup.py install --skip-build
C:\Python25\lib\distutils\dist.py:247: UserWarning: 'licence' distribution option is deprecated; use 'license' warnings.warn(msg)
running install
running install_lib
creating C:\Python25\Lib\site-packages\PyInline
copying build\lib\PyInline\C.py -> C:\Python25\Lib\site-packages\PyInline
copying build\lib\PyInline\c_util.py -> C:\Python25\Lib\site-packages\PyInline
copying build\lib\PyInline\__init__.py -> C:\Python25\Lib\site-packages\PyInline
byte-compiling C:\Python25\Lib\site-packages\PyInline\C.py to C.pyc
byte-compiling C:\Python25\Lib\site-packages\PyInline\c_util.py to c_util.pyc
byte-compiling C:\Python25\Lib\site-packages\PyInline\__init__.py to __init__.pyc
running install_egg_info
Writing C:\Python25\Lib\site-packages\PyInline-0.03-py2.5.egg-info

として、再びサンプルを実行したところ、上記と同じエラーになってしまいました(続きます)
889887:2009/10/16(金) 19:53:54
実行時のフォルダに新しいフォルダが作られ、そこに

_PyInline_a5843fcd5b05a69bb7ab356b82740227.c 
----ここから----
// Generated by PyInline
// At Fri Oct 16 19:33:58 2009

#include "Python.h"

/* User Code */

double my_add(double a, double b) {
return a + b;
}

static PyObject *
_a5843fcd5b05a69bb7ab356b82740227_my_add(PyObject *self, PyObject *args)
{
(後略)
----ここまで----
のようなファイルが作られていました。

環境は、
\src>mingw32-gcc --version
mingw32-gcc (GCC) 3.4.5 (mingw-vista special r3)
です。またCygwinは入ってますがVisual Studioはインストールされておりません。
Pythonは2.5.4です。
長々とスレを汚してしまい申し訳ありません。
890デフォルトの名無しさん:2009/10/17(土) 04:34:51
>>887-889
PyInline.build() の引数に distutils_args=["-c", "mingw32"] を加えてみたらどうかな。
891デフォルトの名無しさん:2009/10/17(土) 07:29:54

ttp://www.nishiohirokazu.org/archived_coreblog/585
PyInlineを学ぶのに要する労力をCで拡張ライブラリを書く方法を学ぶのに回したほうがいいのではないかと思うが…。
892デフォルトの名無しさん:2009/10/17(土) 07:33:46
>>891
手段が目的なんだ、目的のための手段じゃないんだ
893887:2009/10/17(土) 11:15:55
みなさんレス有難うございます。

>>890さん
成功しました!
running build
running build_ext
building '_PyInline_a5843fcd5b05a69bb7ab356b82740227' extension
creating build
creating build\temp.win32-2.5
creating build\temp.win32-2.5\Release
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python25\include -IC:\Python25\PC -c _PyInline_a5843fcd5b05a69bb7ab356b82740227.c
 -o build\temp.win32-2.5\Release\_pyinline_a5843fcd5b05a69bb7ab356b82740227.o
writing build\temp.win32-2.5\Release\_PyInline_a5843fcd5b05a69bb7ab356b82740227.def
creating build\lib.win32-2.5
C:\MinGW\bin\gcc.exe -mno-cygwin -shared -s build\temp.win32-2.5\Release\_pyinline_a5843fcd5b05a69bb7ab356b82740227.o build\temp.win32-2.5\Release\_PyInline_a5843fcd5b05a69bb7ab356b82740227.def
 -LC:\Python25\libs -LC:\Python25\PCBuild -lpython25 -lmsvcr71 -o build\lib.win32-2.5\_PyInline_a5843fcd5b05a69bb7ab356b82740227.pyd
10.0

PyInline自体のビルドではなくてPyInlineが行うビルドが問題になっていたという認識でいいのでしょうか。

>>891さん、>>892さん
Cの簡単なテストに使おうかとおもいましたが、
ステップ実行して身の丈を思い知らされました・・
distutilsなど、もっと勉強しようとおもいます。
894デフォルトの名無しさん:2009/10/17(土) 13:59:49
pythonで時間差を置いて処理をしていきたいのですが、何かいいアイディアはありますか?
895デフォルトの名無しさん:2009/10/17(土) 14:01:59
Tkinterで「ボタンを押すとファイルを開くダイアログが表示される」と
いうよくあるファイル選択画面をを作りたいのですが、
http://d.hatena.ne.jp/Cassiopeia/20070819/1187479725にある例文を
無理矢理関数にしてボタンを押したときの処理にその関数を指定しても、
関数は呼び出されるものの、関数内の tk = Tkinter.Tk() が処理されません。
初心者的な内容かもしれませんが、アドバイス頂けませんでしょうか。


from Tkinter import *
from tkFileDialog import *
import Tkinter
import tkFileDialog

root = Tk()
root.option_add("*font", ("FixedSys", 14))
root.title("テスト")

def load_file():

tk = Tkinter.Tk()
tk.withdraw() # 小ウィンドウを表示しないようにする。
args = { "initialdir" : "/home/",
"filetypes" : [("テキストファイル", "*.txt")],
"title" : "テスト"
}

botton01 = Button(root, text = "ボタン",command = load_file)
botton01.pack()
root.mainloop()
896デフォルトの名無しさん:2009/10/17(土) 15:29:55
>>894
cron
897デフォルトの名無しさん:2009/10/17(土) 19:40:46
>>895
tk = Tk()
898デフォルトの名無しさん:2009/10/17(土) 20:59:27
>>895
釣られたの鴨試練が
def load_file():
args = {
'initialdir': '/home/',
'filetypes': [('テキストファイル', '*.txt')],
'title': 'テスト'}
filenames = tkFileDialog.askopenfilenames(**args)
print 'selected: [%s]' % ','.join(filenames)


#※ load_fileの中で
# tk = Tkinter.Tk()
# tk.withdraw() # 小ウィンドウを表示しないようにする。
#は不要

#※ tkFileDialog.askopenfilenamesを呼ぶのを忘れている
899895:2009/10/17(土) 21:52:29
>>897
>>898
ありがとうございます。
>>898で教えていただいたやり方でできました。ありがとうございます!
まだまだ勉強したてで、根本的な理解が足りないようなので勉強しなおしてきます。

900デフォルトの名無しさん:2009/10/18(日) 21:53:24
オライリーのpythonクイックリファレンスってどうですか?
901デフォルトの名無しさん:2009/10/18(日) 22:04:33
kuso
902デフォルトの名無しさん:2009/10/18(日) 22:10:13
本のいいリファレンスってないですかね?
903デフォルトの名無しさん:2009/10/18(日) 22:17:39
あえて長いURL
http://www.amazon.co.jp/Python-Essential-Reference-Developers-Library/dp/0672329786/

旧版みたいに日本語版も出るといいね
904デフォルトの名無しさん:2009/10/18(日) 22:46:07
>>903
ありがとう。
読めなくもないがめんどいw
905デフォルトの名無しさん:2009/10/19(月) 15:41:37
py2exeはPython3.x系に未対応らしいですが、
Python3.x系のソースコードをWindowsの実行ファイル形式に変換する方法はありますか?
906デフォルトの名無しさん:2009/10/19(月) 15:59:39
py32exe
907デフォルトの名無しさん:2009/10/19(月) 16:04:30
pyinstaller
908デフォルトの名無しさん:2009/10/20(火) 03:16:50
うがー日本語を使うなと言わんばかりの糞仕様は何とかならんのか・・・
ただでさえ文字コードがらみはめんどくさいのにencode/decodeでコードが冗長になるし
さらに変換を間違うと表示が化けるどころか例外で止まるってもう勘弁してヽ(`Д´)ノ
デバッグがめんどくさいPython組み込み系のコードとかコンソールに何も出したくなくなる
909デフォルトの名無しさん:2009/10/20(火) 03:49:26
>表示が化けるどころか例外で止まる

コンソールじゃなくてログファイルに
codec 経由せずに出すのが正解
ログは tail -f で見てれば良い
910デフォルトの名無しさん:2009/10/20(火) 03:50:24
ちなみに使ってる Python のバージョンに寄ってかなり違うからね
911デフォルトの名無しさん:2009/10/20(火) 07:59:55
何も検出せずにただ文字化けするよりも、きちんと不正な処理を
検出してエラーを出してくれるほうが何倍も楽だと思うんだけど。
912デフォルトの名無しさん:2009/10/20(火) 08:03:55
DSでpython動かしてるひといませんか?
forとかifがどうやってもエラーになってしまう
913デフォルトの名無しさん:2009/10/20(火) 12:48:56
改行コードの問題じゃないかとエスパーしてみる。
もっともCPythonはCRLFでもLFでも行けたはずだが。
914デフォルトの名無しさん:2009/10/20(火) 13:10:56
:
915デフォルトの名無しさん:2009/10/20(火) 15:54:20
self.combo = XRCCTRL(self, 'Combo')←wxComboBox
とした場合、self.comboのchoicesにlist=["a","b","c"]を設定することは出来ますか?
916デフォルトの名無しさん:2009/10/20(火) 16:31:14
#self.combo.Clear()
self.combo.AppendItems(["a","b","c"])
917915:2009/10/20(火) 16:50:20
>>916
出来ました。ありがとうございました。
918915:2009/10/20(火) 18:40:19
すいません、もう一つだけ質問させてください。
同じくwxComboBoxのchoicesにlistを追加することについてですが
listに日本語が含まれた瞬間デコードエラーが出てしまいます。
日本語の追加は出来ないのでしょうか?
919デフォルトの名無しさん:2009/10/20(火) 18:42:27
unicodeでおk
920915:2009/10/20(火) 19:21:24
すいません、出来ました。ありがとうございました。
921デフォルトの名無しさん:2009/10/21(水) 01:56:51
50までの素数をリストに入れたいんですけどうまくいきません。
アドバイスよろしくお願いします。

ls = range(3,51)
for a in ls:
for b in range(2,a):
if (a%b) != 0:
continue
else:
del ls[a-3]


922デフォルトの名無しさん:2009/10/21(水) 02:12:48
>del ls[a-3]
はなにをやろうとしてるんだろう?
ループ中にリストの要素削除とかめんどいことはやんないほうがいいと思うよ

普通に考えれば結果のリストを用意して、
ある数字が素数と判定出来たらそこに入れるとかでいいはずだろ?
923デフォルトの名無しさん:2009/10/21(水) 02:26:21
>>921
エラトステネスの篩(ふるい) Python でぐぐっちゃいなよ
924デフォルトの名無しさん:2009/10/21(水) 03:29:35
from itertools import ifilter, count
def primes():
  g = count(2)
  while True:
    p = g.next()
    yield p
    g = ifilter(lambda n, p=p: n % p, g)

l=[]
for p in primes():
  if p <= 50: l.append(p)
  else: break
925デフォルトの名無しさん:2009/10/22(木) 00:52:26
すいません、出来ました。ありがとうございました。
926デフォルトの名無しさん:2009/10/22(木) 10:39:16
どんどん出来て行く





それに比べて俺と言ったら…
927デフォルトの名無しさん:2009/10/22(木) 18:06:08
初心者です。>>921を考えて見ました。
もっと短くするにはどうしたらいいですか?

#coding=utf-8
def primenumber(n):
for c in range(2, n):
if n%c == 0:
break
if c == n-1:
return n
else:
return u"素数ではない"
ls = [2]
for n in range(3, 51):
ls.append(primenumber(n))
if u"素数ではない" in ls:
ls.remove(u"素数ではない")
print ls
928927:2009/10/22(木) 18:10:09
すみません。
コピペでインデントが外れました。

#coding=utf-8
def primenumber(n):
for c in range(2, n):
if n%c == 0:
break
if c == n-1:
return n
else:
return u"素数ではない"
ls = [2]
for n in range(3, 51):
ls.append(primenumber(n))
if u"素数ではない" in ls:
ls.remove(u"素数ではない")
print ls
929デフォルトの名無しさん:2009/10/22(木) 18:13:51
全角スペースか &amp; でインデントすれ
930927:2009/10/22(木) 18:15:17
何回もすみません。
半角空白でインデントができないので全角にしました。

#coding=utf-8
def primenumber(n):
  for c in range(2, n):
    if n%c == 0:
      break
  if c == n-1:
    return n
  else:
    return u"素数ではない"
ls = [2]
for n in range(3, 51):
  ls.append(primenumber(n))
  if u"素数ではない" in ls:
    ls.remove(u"素数ではない")
print ls
931デフォルトの名無しさん:2009/10/22(木) 18:31:14
>半角スペース消える
半角でインデントして置換するか、
もしくは専ブラの機能使えば意外といけたりする

>>930
primenumber関数の戻り値がカオスなので単に素数かどうか判定する関数にして、
名前もそれらしいものにしたほうがいいかと。
出力はリスト内包表記を使えばシンプルになる。

def is_prime(n):
for c in range(2, n):
if n%c == 0:
return False
return True

print [x for x in range(2,51) if is_prime(x)]
932デフォルトの名無しさん:2009/10/22(木) 18:32:41
言った端からインデント消えててマヌケなので。

def is_prime(n):
    for c in range(2, n):
        if n%c == 0:
            return False
    return True

 print [x for x in range(2,51) if is_prime(x)]
933927:2009/10/22(木) 20:05:08
>>932
ありがとうございます!15行が7行になりました!
(補足:5行目コードと、リストに2を追加しました。)

def is_prime(n):
  for c in range(2, n):
    if n%c == 0:
      return False
  if c == n-1:
    return True
print [2] + [x for x in range(3,51) if is_prime(x)]
934デフォルトの名無しさん:2009/10/22(木) 22:09:28

import cgi,re

q=(正規表現)
line=(1行のデータ)
for r in re.finditer(q,line):
print r.group(0)
print r.group(1)
print r.group(2)
print r.group(3)
のように書いて正規表現でマッチさせたいのですがうまくいきません。
コマンドプロンプトで動かすとうまくいきますが、cgiにしてやるとダメです。
上から1行ずつ動かしていって、どうやら
for r in re.finditer(q,line):
を書くとエラーがでました。
原因はなんでしょうか?
935デフォルトの名無しさん:2009/10/22(木) 22:18:51
936デフォルトの名無しさん:2009/10/22(木) 22:21:53
>>935
ありがとうございます。

やってみたところバージョンは2.4.3らしいです。
もしかして対応していないのでしょうか?」
937デフォルトの名無しさん:2009/10/22(木) 22:53:55
11.3 cgitb -- Traceback manager for CGI scripts
http://www.python.org/doc/2.4.3/lib/module-cgitb.html
938デフォルトの名無しさん:2009/10/22(木) 22:59:53
正規表現かCGIについて根本的に勘違いしているに一票
939デフォルトの名無しさん:2009/10/22(木) 23:38:17
>>934
>を書くとエラーがでました

本当に助けてほしいんだったら、
まず、そのエラーの内容をそのままコピペしてくれ。
940デフォルトの名無しさん:2009/10/23(金) 00:03:14
cgitb 使ってないみたいだし、
internal server error が返ってくるだけのような
941デフォルトの名無しさん:2009/10/23(金) 08:25:24
ソースとURL貼るのがマナー
942デフォルトの名無しさん:2009/10/23(金) 20:52:16
cgitb使っているのですが、うまく機能してくれません。
AddHandler cgi-script-debug .cgiでやっているのですが、これで見たところエラーは無いようですが
実行してみるとスクリプトエラーがでます。どうしたらいいでしょうか?

ちなみにxreaです

Script Error
The script did not produce proper HTTP headers.
Please see the error log to see the detail of the errors.
Depending on the server configuration, you can also run thisscript under CGIWrap debugging.
Usually, either rename or linkthe script temporarily to a file which ends with .cgidextension, or add a AddHandler cgi-script-debug .cgiline to your .htaccess file.
943デフォルトの名無しさん:2009/10/23(金) 20:54:25
クロージャなんですが
def func1():
i = {'cnt': 0}
def _func1():
i['cnt'] += 1
return i['cnt']
return _func1

def func2():
i = 0
def _func1():
i += 1
return i
return _func1

func1みたいにリストもしくは辞書を使って書くと思った通りに動くんですが冗長に見えます
しかしfunc2みたいに書くとUnboundLocalErrorになってしまいます
もうちょっとすっきり書く方法って無いですかね?
944デフォルトの名無しさん:2009/10/23(金) 21:18:38
945デフォルトの名無しさん:2009/10/23(金) 21:21:05
>>942
content-type
946デフォルトの名無しさん:2009/10/23(金) 21:24:15
>>945
content-typeは記述していますが、うまくいきません・・・
947デフォルトの名無しさん:2009/10/23(金) 21:36:07
ソース貼れよ
948デフォルトの名無しさん:2009/10/23(金) 21:38:38
次、shebang
949デフォルトの名無しさん:2009/10/23(金) 21:59:21
>>943
def func2():
   def _func2():
     _func2.i += 1
     return _func2.i
   _func2.i = 0
   return _func2
950デフォルトの名無しさん:2009/10/23(金) 22:02:54
content-typeの\nを書き忘れてました。
お騒がせしました
951デフォルトの名無しさん:2009/10/23(金) 22:31:55
zuko----
952943:2009/10/24(土) 01:47:38
>>949
なるほど・・・ありがとうございました
953デフォルトの名無しさん:2009/10/24(土) 11:24:27
くだすれPython(超初心者用) その5
http://pc12.2ch.net/test/read.cgi/tech/1256350845/
954デフォルトの名無しさん:2009/10/24(土) 18:22:25
sql = "SELECT id,name FROM testnet WHERE user_id=user_id AND board_id=board_id AND year=year"
mysqlでこのようなselect文からヒットした結果をrow[0],row[1]に入れたいのですがいい方法はありますか?
955デフォルトの名無しさん:2009/10/24(土) 18:34:28
普通の方法で十分だと思う。
956デフォルトの名無しさん:2009/10/24(土) 19:19:45
だよね
957デフォルトの名無しさん:2009/10/24(土) 19:36:59
>>955
すいません。
教えてください
958デフォルトの名無しさん:2009/10/24(土) 19:42:43
MySQL-pythonを入れたのか?
ひょっとしたらODBCだったりするのか?
あるいは?

面倒糞いので答えない
959デフォルトの名無しさん:2009/10/24(土) 19:46:30
クレクレ厨にエサを与えては逝けません

データ取れた後は
文字コードの質問や
データ型の質問が
出て来ると予想
960デフォルトの名無しさん:2009/10/24(土) 19:49:48
MySQLです。
データがとれればそれでいいのでお願いします
961デフォルトの名無しさん:2009/10/24(土) 20:02:47
962デフォルトの名無しさん:2009/10/24(土) 23:49:43
import sqlite3

con = sqlite3.connect('testsqlite3.sl3')
con.row_factory = sqlite3.Row
cur = con.cursor()
cur.executescript('''create table test (id integer, val varchar(8));''')
con.commit()
s = '''insert into test (id, val) values (%d, '%s');'''
cur.executescript(s % (3, 'abc'))
cur.executescript(s % (2, 'xyz'))
cur.executescript(s % (1, 'def'))
con.commit()
cur.execute('''select id, val from test order by val;''')
for row in cur:
  print row['val'], row['id']
cur.close()
con.close()
963デフォルトの名無しさん:2009/10/25(日) 00:09:44
ありがとうございました!!!
964デフォルトの名無しさん:2009/10/25(日) 08:53:35
実行効率を測定するツールは有りますか?
965デフォルトの名無しさん:2009/10/25(日) 12:45:20
27.6. timeit ? Measure execution time of small code snippets
http://docs.python.org/library/timeit.html
32.12. dis ? Disassembler for Python bytecode
http://docs.python.org/library/dis.html
966デフォルトの名無しさん:2009/10/25(日) 14:08:14
ありがとうございました
967デフォルトの名無しさん:2009/10/26(月) 02:06:24
32bit整数の範囲で
nとn^2+2がともに素数となるnを求めてください
素数テーブル
ビッグエンディアン ttp://www.opendogs.org/pub/pn_be.dat.gz
リトルエンディアン ttp://www.opendogs.org/pub/pn_le.dat.gz
968デフォルトの名無しさん:2009/10/26(月) 02:15:17
n < 2^32 なのか n^2+2 < 2^32 なのか、どっちなのかな
前者ならPythonじゃ現実的な時間内に終わらないような
969デフォルトの名無しさん:2009/10/26(月) 04:01:49
素数テーブル見て素数かどうか調べるので
n^2+2が素数テーブルの最大値以下
ということでよろしくおながいします
970デフォルトの名無しさん:2009/10/27(火) 16:50:42
pass
971デフォルトの名無しさん:2009/10/27(火) 21:40:03
m>=0

n=3m, (3m)^2+2 = 9m^2+2 = 3の倍数+2  ({3m: m>1} != 素数)
n=3m+1, (3m+1)^2+2 = 9m^2+6m+3 = 3の倍数 != 素数
n=3m+2, (3m+2)^2+2 = 9m^2+12m+6 = 3の倍数 != 素数
972デフォルトの名無しさん:2009/10/28(水) 01:54:38
pass
973デフォルトの名無しさん:2009/10/29(木) 11:34:04



岡田外務大臣キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
h‍ttp‍:‍/‍/‍q‍b5.2‍ch.net/t‍est/rea‍d.cgi‍/sak‍u2ch/1256‍630318/1



早く記念カキコしないと埋まっちゃうwww
974デフォルトの名無しさん:2009/10/30(金) 21:35:30
日本語をmysqlにinsertしたいのですが、UnicodeEncodeErrorとなってしまいます。
調べてみると日本語をアスキーとして扱っている事から起きるエラーとのことですが、
どうしたらエラーを回避できるのでしょうか?
975デフォルトの名無しさん:2009/10/30(金) 22:50:07
>>974
.encode('utf-8')
976デフォルトの名無しさん:2009/10/31(土) 01:17:35
mysql> show variables like '%char%'; の結果は?

my.ini の中で
[mysql]
default-characterset = utf8
[mysqld]
default-characterset = utf8
977デフォルトの名無しさん:2009/10/31(土) 19:58:26
>>975
エンコードしてもダメみたいです。。
978デフォルトの名無しさん:2009/10/31(土) 20:56:07
>>977
utf8を使うとして、>>976のようにMySQLを設定
python側は、MySQLdb.connectのところでcharset= "utf8"
入れる文字列もutf8にエンコードで問題ないと思う。
db.execute("SET NAMES utf8")とかも意味あるかも
979デフォルトの名無しさん:2009/10/31(土) 22:52:50
>>978
ありがとうございます

charset='utf-8'
c.execute("SET NAMES utf8")
q.encode('utf8')
したのですが、

q.encode('utf8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0x92 in position 76: ordinal not in range(128)
だそうです。
ちなみにqはselect文です。
980デフォルトの名無しさん:2009/10/31(土) 23:02:57
もし
q = 'select ほげほげ from ふがふが where はげ=True;'
なら
ソースの2行目に
# -*- coding: utf-8 -*-
を書いた上で
c.execute(q)

あるいは
# -*- coding: cp932 -*-
を書いた上で
c.execute(q.decode('cp932').encode('utf-8'))

そうじゃなくて
q = u'select ほげほげ from ふがふが where はげ=True;'
なら
c.execute(q.encode('utf-8'))
981デフォルトの名無しさん:2009/10/31(土) 23:39:00
>>980
ありがとうございます。何度もすいません。
*selectじゃなくてinsertでした。。
修正して実行すると、
q=u"INSERT INTO menu(name,id,name_j) VALUES (%s,%s,%s)"%(l_name,l_id,l_name_j)
UnicodeDecodeError: 'ascii' codec can't decode byte 0x92 in position 0: ordinal not in range(128)
となってしまいます。
l_name、l_idは英数字のみの変数、l_name_jは日本語を含む変数です。
それぞれ、shift-jisのhtmlファイルから正規表現で抜いたものです。
コーディングは# -*- coding: utf8 -*-としています。
982デフォルトの名無しさん:2009/11/01(日) 00:11:05
こんなんかな
db = MySQLdb.connect(host= DB_HOST, user = DB_USER, passwd = DB_PASS, db= DB_NAME, charset= "utf8")
db_cursor = db.cursor()
db_cursor.execute("SET NAMES utf8")

l_name_j_utf8 = l_name_j.decode("Shift_JIS").encode("UTF-8")
db_cursor.execute("INSERT INTO menu(name,id,name_j) VALUES (%s,%s,%s)", (l_name,l_id,l_name_j_utf8))
983デフォルトの名無しさん
>>982
おおおおおおおおお
いきました!!サンクスですwwww
本当に大感謝です。。