くだすれPython(超初心者用) その12at TECH
くだすれPython(超初心者用) その12 - 暇つぶし2ch116:デフォルトの名無しさん
11/12/07 15:31:43.88
>>113
何て本

117:デフォルトの名無しさん
11/12/07 15:49:17.95
本はあまりオススメできないWebで勉強しろって>>1に書いてもいいかもしれんね

118:デフォルトの名無しさん
11/12/07 15:59:23.71
嘘書いてあったり
内容が古くなってたり
おまけに日本語についての考慮がない本とか
なんでお薦めになってるのか理解不能なのもある

119:デフォルトの名無しさん
11/12/07 17:44:09.90
>>114
この程度の誤植なら修正する必要ないと思ったんじゃないか。
前行で import sqrt してるわけだし。

120:デフォルトの名無しさん
11/12/07 18:51:33.32
math.pow()は別のところでimportしてるんだろか

Pythonなら普通 ** 演算子で済ませると思うし
それを言うなら、二乗の和の平方根(ユークリッド距離)計算したいんなら単に
math.hyport(4.5-4.2, 1-1)
でいいわな

なんつうか、いろいろ解せない「本」ではあるな

121:デフォルトの名無しさん
11/12/07 18:52:17.29
ごめんtypoった
math.hypot(4.5-4.2, 1-1)
の間違い

122:109
11/12/07 19:00:16.28
>>112
クラスは、未だ単純な構造体代わり(関連する変数の集合体)にしか
使った事がないので、関数でネストさせずに_付き命名の方向にします。

丁寧な回答、ありがとうございました。

123:デフォルトの名無しさん
11/12/07 19:14:40.49
powは組み込み関数版がある

124:デフォルトの名無しさん
11/12/07 19:58:50.31
>>123
あ、そーか
どうせ**演算子で使うから組み込みになってるのかな

125:デフォルトの名無しさん
11/12/07 20:18:09.14
>>121
著者乙()

126:デフォルトの名無しさん
11/12/08 00:53:43.92
>>116
「集合知プログラミング」だね。誤植がとにかく多い。

127:デフォルトの名無しさん
11/12/08 22:26:17.10
Python3は2との互換性が無いとの記事を読みました
自分はPythonに関しては今触り始めたばかりで、使っているのはcentOS6に入っている2.6.6なのですが
Python3は今どうなのでしょうか?
まだ3.2なので、Python2系の方が安定性とか考えるとやはりいいのでしょうか?
それとも、まだPython初学者であるので最初から3に行った方がいいでしょうか?
個人的にはPHPにしろMySQLにせよ新しいバージョンをと思っているのですが、
まだバージョンが3.2と浅いということと、後方互換性がないという致命的なものがあるので
どうなのかなと思いまして
処理速度とか、今あるライブラリ、フレームワークなどが後方互換性のなさから使えないとかあれば困る
とかあればアドバイスを頂きたいのですが


128:デフォルトの名無しさん
11/12/08 23:18:43.76
安定性は3つ目の数字っすよ
URLリンク(docs.python.org)

129:デフォルトの名無しさん
11/12/08 23:58:03.10
リンクありがとうございます
どうやら英文によるとライブラリなどの適応はPython3はまだ問題ありということらしいですね
皆さんは、やっぱ2系を使っているのでしょうか?

>安定性は3つ目の数字っすよ
というのは、3,2,2の最後の部分の事を言っているのでしょうか?
それとも、リンク先に何か数字があったのでしょうか?


130:デフォルトの名無しさん
11/12/09 00:38:13.73
古い仕様を「先に」覚える必要はない

131:デフォルトの名無しさん
11/12/09 00:53:29.75
2で何の問題もないけど、3にはどんなメリットがあるの

132:デフォルトの名無しさん
11/12/09 01:20:03.06
>>128 は素人

133:デフォルトの名無しさん
11/12/09 01:22:44.68
2.xについては
2.4以前なら致命的だけど
2.5以降なら何使っても問題ないよ

3.xについては
>今あるライブラリ、フレームワークなどが後方互換性のなさから使えないとかあれば困る
とかあるよ

134:デフォルトの名無しさん
11/12/09 04:09:25.15
これも合わせて参考に。

URLリンク(wiki.python.org)




135:デフォルトの名無しさん
11/12/09 09:45:07.71
>>130
新しい仕様が「普及しない」かもしれないのに?

136:デフォルトの名無しさん
11/12/09 11:12:44.90
Python は Perl とは違うのだよ Perl とか Ruby とか

137:デフォルトの名無しさん
11/12/09 15:40:48.88
結局皆Python2.X使ってるの?

138:デフォルトの名無しさん
11/12/09 15:51:53.24
py3kが普及しないと思ってる奴なんてほとんどいないはず
今は代表的なライブラリの対応待ちとお前移行しろよいやお前からやれよって牽制し合ってる状態

139:デフォルトの名無しさん
11/12/09 16:04:52.68
まあ西暦3000年ごろには普及するとは思うが。

140:デフォルトの名無しさん
11/12/09 16:36:48.75
djangoもzopeも全然Python3に移行できてない事実を考えれば、おのずと答えはわかる。

141:デフォルトの名無しさん
11/12/09 16:48:56.15
Python3は黒歴史になるのかな・・・・・

142:デフォルトの名無しさん
11/12/09 21:33:00.55
Python 3 Wall of Shame
URLリンク(python3wos.appspot.com)

143:デフォルトの名無しさん
11/12/10 02:19:20.45
linux環境で端末を開いたとき、[xxx@yyy]$のようにPCによって異なる表示がされると思いますが、
このxxx@yyyの部分をファイル名にコピーする(xxx@yyy.txtなど)ようなアルゴリズムを書きたいのですが、
全く検討もつきません。PCごとにxxx@yyyの部分が変わるようにしたいです。
考えていただけませんでしょうか?よろしくお願いします。

144:デフォルトの名無しさん
11/12/10 02:40:24.63
from subprocess import Popen, PIPE
def bq(argv): return Popen(argv, stdout=PIPE).communicate()[0]
'%s@%s' % (bq(['whoami'].rstrip(), bq(['hostname'].rstrip())

せっかく書いたので貼ったけどもっとまともな回答が付くと思う

145:デフォルトの名無しさん
11/12/10 03:10:00.91
ありがとうございます。
tmp.txtをxxx@yyy.txtに変える場合はどうすればいいですか?
初心者で上の文がよくわからないので・・・

146:デフォルトの名無しさん
11/12/10 04:34:30.85
HOSTNAMEとか環境変数が設定されてる環境なら

import os
filename = "%s@%s.txt" % (os.environ['USER'], os.environ['HOSTNAME'])

147:デフォルトの名無しさん
11/12/10 07:15:49.73
D:\work>python --version
Python 2.7.2

148:デフォルトの名無しさん
11/12/10 09:23:46.64
Python '75

149:デフォルトの名無しさん
11/12/10 11:53:47.77
username = os.getlogin()
hostname = socket.gethostname()

150:デフォルトの名無しさん
11/12/10 12:28:14.33
argparseとか、configparserとか
何でparse[r]にrがついたり、つかなかったりするん。
打つときいつも迷う

151:デフォルトの名無しさん
11/12/10 15:11:02.69


152:デフォルトの名無しさん
11/12/10 18:40:09.63
forを使った、リスト内包文に関して教えてください
foo = [ x * 2 for x in [0,1,2] ]
これは
foo = [ x * 2 for x in range(3) ]
と同じ[0, 2, 4]となりますが、これらはforによって得られたxを前の式に入れるという事は分かります

しかし、次の
loc = [ [ random.random(), random.random() ] for i in range(n) ]
という形が理解できません
例えばこの時、n=3であれば3つのリストがprintによって出力されます

locの[ random.random(), random.random() ]式内にはiという文字が入ってもいないのに
なぜこの場合、要素数になって、それが反映されているのでしょうか?
例えば、PHPなどのようにfor()にて第2引数で処理要素数がしていされている形であれば分かるのですが、
このPythonの記述法はどこからそれらが導かれているのか理解ができませんでした

153:デフォルトの名無しさん
11/12/10 18:51:00.29
>>152
[ random.random(), random.random() ]を三回繰り返してるだけ

154:デフォルトの名無しさん
11/12/10 19:16:18.53
>>153
返答ありがとうございます

printしてみたら、[ random.random(), random.random() ]が3回表示されたので、
挙動は分かったのですが、何故そうなるのかが分かりません
Pythonの場合、for()等で他の言語のように第2引数によって条件などが入りませんが、
そのおかげでこの挙動が自分には理解が出来ません

foo = [ x * 2 for x in range(3) ]の場合は、x * 2にforで得られたxの値が入るに対し、
2つ目のlocの式は何故n回だけ実行されるのかが分かりません

URLリンク(python.g.hatena.ne.jp)
このサイトなどで書かれているのもやはり、x,y等の対応する変数が存在するので挙動は分かるのですが、
locのようなものを解説しているサイトや本を見つけられませんでした


155:デフォルトの名無しさん
11/12/10 19:26:35.76
>>154
for ループの仕組みから理解できていないんじゃないか?
for i in [0, 1, 2] の場合、0, 1, 2を順番にiに代入していき、全て終わったらループが止まる
そのlocの例の場合はiが使われていないだけ

loc = [[ random.random(), i ] for i in range(3) ] とでもしてみれば分かりやすいかな?

156:デフォルトの名無しさん
11/12/10 19:33:13.00
>>155
あっ、ようやく分かりました
ありがとうございました

157:デフォルトの名無しさん
11/12/10 19:56:05.83
python setup.py buildとpython setup.py installはどう違うのですか?
webで検索していると、ライブラリによってはインストール時にbuildの場合とinstallの場合があるようですが

158:デフォルトの名無しさん
11/12/10 19:57:39.11
WindowsでPythonをbatファイルの替わりに使いたいんだけど、
batでdosコマンドを実行したときのように
実行経過を表示することはできるのでしょうか?

159:デフォルトの名無しさん
11/12/10 20:48:38.43
?

160:デフォルトの名無しさん
11/12/10 22:30:23.27
[r["text] for result in search_results for r in result["results"]]

というコードがあるのですが左から順にfor文の内容が実行されていってるようなのですが
リスト内包表記では右から実行される訳ではないんでしょうか?

161:デフォルトの名無しさん
11/12/10 22:41:59.21
簡単な例で試すといいよ

>>> [(i, j) for i in [1, 2, 3] for j in [4, 5, 6]]
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

162:デフォルトの名無しさん
11/12/10 22:44:56.32
左からで正しいよ
[f(x,y) for x in xs for y in ys if cond(x, y)]
こういうのは
ループで言うと、
for x in xs: for y in ys: if cond(x, y): yield f(x,y)
これと一緒だと思えばいい
要はyieldする式が先頭かケツかの違いだけで、普通のループと同じ読み方ができる



163:デフォルトの名無しさん
11/12/10 22:54:27.12
>>161-162
回答ありがとうございます。
どうやら重大な勘違いをしていたようで助かりました。

164:デフォルトの名無しさん
11/12/10 23:04:33.40
>>157
ビルドは環境を構成するだけ (buildディレクトリ)
コンパイルしたりするのはここ。

インストールはsite-packages等へビルドされた環境をコピー
この時ビルドがまだならビルドする。

インストール以外にも配布用のパッケージを作成したりインストーラを生成したりもできる。

165:デフォルトの名無しさん
11/12/12 20:57:14.04
>>158
馬鹿には無理

166:デフォルトの名無しさん
11/12/12 21:40:17.79
以下のソースを作成し、

import csv
reader = csv.reader(file("some.csv", "rb"))
for row in reader:
print row



以下のように実行するとエラーが出ます。
なぜか原因が全くわかりません。

$python csv.py
Traceback (most recent call last):
File "csv.py", line 1, in <module>
import csv
File "/home/aaa/csv.py", line 2, in <module>
reader = csv.reader(file("some.csv", "rb"))
AttributeError: 'module' object has no attribute 'reader'

なんでだ・・・

167:デフォルトの名無しさん
11/12/12 21:50:13.36
csv.pyの名前を変える

168:デフォルトの名無しさん
11/12/12 21:51:33.12
>>167
それ、さっきやりましたがダメでした。

169:デフォルトの名無しさん
11/12/12 21:55:23.67
print csv.__file__
をやってみる。

170:デフォルトの名無しさん
11/12/12 22:45:03.45
>>166
fileじゃなくてopen?

×
reader = csv.reader(file("some.csv", "rb"))


reader = csv.reader(open("some.csv", "rb"))


csv弄る用事があるのを思い出したw

171:デフォルトの名無しさん
11/12/12 23:27:25.60
いろいろセンスのなさが目立つな

172:デフォルトの名無しさん
11/12/12 23:28:04.27
わざとやってるんじゃなかったのか。

173:デフォルトの名無しさん
11/12/12 23:33:23.10
>>170
openは内部的にfileを呼んでるだけだから、
その2つの例はまったく同じことをやっているだけ。

174:デフォルトの名無しさん
11/12/13 01:47:58.64
csv.pyc が残ってる可能性がある。(コンパイル済のキャッシュ)

2.xであれば、ファイル内に日本語含む場合は、csv内の文字コードが・・・
なんて場合に備えて codecs.open がいいかもしれない。

175:デフォルトの名無しさん
11/12/13 17:35:59.02
なんでshebangの意味を教えてくれなかったんだ
linuxでやるときもとりあえず書いて実行する時は$python oppai.pyってやってたわ
それとか
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import matplotlib.font_manager as fm
font = fm.FontProperties(fname=u'c:\\windows\\fonts\\arialuni.ttf')
みたいな
windowsでは意味のない行やん。なんで教えてくれなかったんだ

176:デフォルトの名無しさん
11/12/13 17:39:52.45
もしかしたらで違ってるかもしれないけど、質問しなかったからじゃないか

177:デフォルトの名無しさん
11/12/13 17:46:31.27
質問はしなかった(´・ω・`)
C習う時に#include<stdio.h>は「おまじない」と言われるみたいになんとなく受け入れてた
くそう。import numpy;(len("python ")-len("./"))*numpy.inf分のタイプ数をロスしたわぁ

178:デフォルトの名無しさん
11/12/13 18:07:33.45
構文ハイライト等のコード判別でshebang読むのとかあるから、書いて損はないよ。

自分にとっても、後々、別の処理系・言語をやる場合に、
似たような構文の他の言語と読み間違えるのを防げる。

179:デフォルトの名無しさん
11/12/13 18:35:06.15
>タイプ数をロスしたわぁ
……。

180:デフォルトの名無しさん
11/12/13 19:02:28.41
PEP 397 -- Python launcher for Windows
URLリンク(www.python.org)
PEP 397 compatible launcher for Python under Windows
URLリンク(bitbucket.org)

とかあるから一行目shebang、二行目encoding、次に__doc__置くのは
習慣付けてもいいと思う
shebangきちんと動かすんだったら改行コードもLFにする必要あるけど
標準ライブラリはCRLFだったりするしそこまでする必要はないかな

181:デフォルトの名無しさん
11/12/13 19:18:03.39
タイプ数を節約したいということなら、雛形使って書き始めると良い

182:デフォルトの名無しさん
11/12/13 20:20:37.39
dabbrev

183:デフォルトの名無しさん
11/12/14 00:08:31.69
>>175
2行目はWindowsでも意味はある

184:デフォルトの名無しさん
11/12/14 02:51:50.84
python - ./ ってことは実行時のタイプ数?shebangがないとカレントのファイル直接実行できないけど

python に警告制御等のオプション付きで実行する事があるかもしれないから。
パスの通った場所に置くならともかく、デバッグ時なら実行権限与えたりしない。

複数 python 入ってると shebangで指定される python がどれかわからなくなるかもしれないので
実行する時わざわざ $ python ... で実行するメリットもある。

何度も繰り返し実行するというならシェルの履歴使う。最短なケースでは僅か2タイプで済む。


shebangは書く python foo.py で実行で全然問題ないよ。

タイプ数は、エディタ(雛形挿入)やシェル(履歴)を使いこなせば節約できる。

185:デフォルトの名無しさん
11/12/14 16:20:49.52
日本語勉強しなおせ

186:デフォルトの名無しさん
11/12/14 19:49:10.26
日本語のshebangは何だろう

187:デフォルトの名無しさん
11/12/14 19:52:55.17
殻爆

188:デフォルトの名無しさん
11/12/14 23:05:44.60
井桁爆弾

189:デフォルトの名無しさん
11/12/15 16:01:23.72
#拝啓

190:デフォルトの名無しさん
11/12/15 23:43:28.80
PythonのFrameworkについて教えてください
Djangoとかあるのは知っているのですが、今現在一番使われているものや、個々の違いなどを教えて頂けませんでしょうか?
PHPの場合はCakePHPが一番人気で楽だけど実装が決まってしまう、ZendFrameworkは3番人気だけど、ガチガチにならず各コンポーネントがライブラリのように使えるとかです
宜しくお願いします

191:デフォルトの名無しさん
11/12/15 23:44:01.44
Djangoでいいお

192:デフォルトの名無しさん
11/12/15 23:45:12.02
>>190
板違い
URLリンク(kohada.2ch.net)

193:デフォルトの名無しさん
11/12/15 23:49:16.07
djangoはオワコン
URLリンク(itpro.nikkeibp.co.jp)


194:デフォルトの名無しさん
11/12/15 23:57:11.28
個人的にはFWでも上記で書いたようなZednFrameworkのようなタイプが好きなのですが、
PythonのFWは結構ガチガチ(そのFWから抜けるようなものを実装しようとすると難しい、柔軟性が低い)な感じでしょうか?
本屋に行ってみたのですが、Python系の本は他からすると少ないですが、フレームワークは更に少なかったです

195:デフォルトの名無しさん
11/12/15 23:57:55.39

URLリンク(www.slideboom.com)
URLリンク(stackoverflow.com)
URLリンク(opensourcemissions.wordpress.com)
URLリンク(cakephp.seesaa.net)
URLリンク(www.relevancefound.com)
URLリンク(jasonleveille.com)
URLリンク(blip.tv)
URLリンク(madeout.blogspot.com)
URLリンク(d.hatena.ne.jp)
URLリンク(www.oiax.jp)

196:デフォルトの名無しさん
11/12/15 23:59:03.54
>>194
wsgi とか Wekrzeug とか でぐぐれ

197:デフォルトの名無しさん
11/12/15 23:59:59.54
馬鹿には無理

198:デフォルトの名無しさん
11/12/16 22:12:52.87
PythonとMySQLを連携させるにはいくつかライブラリ(モジュール)があるようですが、
どれが一番使われて、いいのでしょうか?
安定性、速度など(トレードオフあもしれませんが)を重視したいです

PythonはcentOSに入っている2.6です
TRAC導入時に以前、SQLite用にはpysqliteを入れてはいたのですが
PythonはSQLiteの情報の方が見つかりやすい気がします

199:デフォルトの名無しさん
11/12/16 22:16:04.11
>>197
自己紹介乙!

200:デフォルトの名無しさん
11/12/16 22:27:27.67
>>193
2006年の情報って…

201:デフォルトの名無しさん
11/12/17 03:12:55.30
>>198
URLリンク(taichino.com)

202:デフォルトの名無しさん
11/12/17 23:30:37.35
TurboGearsって
URLリンク(www.turbogears.org)
のどこからダウンロードするんですか?
見当たらないのですが

203:デフォルトの名無しさん
11/12/17 23:34:00.33
>>202
URLリンク(www.turbogears.org)

204:デフォルトの名無しさん
11/12/18 19:27:03.49
>>203
ありがとうございます
しかしなんかややこしそうですね・・・

Djangoは普通にダウンロード出来ましたが

205:デフォルトの名無しさん
11/12/18 22:23:41.51
スレちというか板ち

【Python】TurboGearsスレ Part 1【Framework
スレリンク(php板)

206:デフォルトの名無しさん
11/12/22 19:09:13.58
centOSでIDLEがないのでyum listで調べてみたら、出てきませんでした
何かpython-toolsがどうたらとか海外のサイトに書かれていました
じゃぁpython-toolsとは何ぞや、と思って検索するに、なぜかVisual Studioしか出来ません
centOSのリポジトリ内に存在するのは確認しました

centOSにてIDLEを使用するにはどのようにすればいいのでしょうか?
また、python-toolsとはどのようなものなのでしょうか?

207:デフォルトの名無しさん
11/12/23 03:03:07.11
>>206
IDLEが欲しい理由ってどんなの?

208:デフォルトの名無しさん
11/12/23 19:45:59.93
IDLE使ってないの?
俺は使ってるけど
俺の使う理由は色、インデント、コピペだな
ターミナルからのpythonコマンドではIDLEに慣れると使いにくい

209:デフォルトの名無しさん
11/12/23 20:39:18.45
別にEmacsでもPyDevでもPyScripterでも
好きなのを使えばよろし

210:デフォルトの名無しさん
11/12/24 01:35:00.86
すいません、ローカルにあるCSVファイルを読み込んで、WEBブラウザに
表で表示できるシステムを作りたいのですが、Zopeなんかを使えば
良いんでしょうか。サンプルソースなんかれば場所を教えてもらえると助かります。

211:デフォルトの名無しさん
11/12/24 01:52:27.35
URLリンク(www.python.jp)
の訳文についてなんですが、

丸め値を 1 増やしたので、この値は実際には 1/10 より少し小さいことに注意してください;

の部分が小さいではなく、大きいではないでしょうか?
原文は

Note that since we rounded up, this is actually a little bit larger than 1/10;

なので信憑性は高いです。

212:デフォルトの名無しさん
11/12/24 05:28:29.13
>>210
それくらいならZopeなんか使わんでも出来るだろ

213:デフォルトの名無しさん
11/12/24 11:19:37.31
>>212
超初心者なので・・・すいません。
いろいろと調べながら考えたのですが、csvファイルを読み込んで、それをprintで出力するような
スクリプトをつくれば良いということでしょうか。

214:デフォルトの名無しさん
11/12/24 11:30:28.85
WebサーバにCGIスクリプトとして実行させるのがお手軽だと思う
雛形はこんな感じ

import csv
# ...csvを読みこんでHTMLに整形
print "Content-Type: text/html;"
print
print html

215:デフォルトの名無しさん
11/12/24 11:33:16.18
import csv

f = csv.reader(open('a.csv'))
print('<html>\n<head></head>\n<body>')
print('<table>')
for l in f:
print('<tr>')
for td in l:
print('<td>{}</td>'.format(td))
print('</tr>')
print('</table>')
print('</body>\n<html>')

216:215
11/12/24 11:34:32.41
最後で<html>閉じてない。
そこだけ修正しといて

217:デフォルトの名無しさん
11/12/24 13:00:22.12
import random
random.uniform()
みたいに、pythonってモジュール名を頭につけてコマンドを書かなきゃいけないじゃないですか?
何でこういう形式なんでしょうか
C++とかはincludeした後、そのまま関数を使えるのに

218:デフォルトの名無しさん
11/12/24 13:07:18.00
名前が衝突しないようにでしょう

from randam import uniform
from randam import *

というのもあるから調べるといいよ

219:デフォルトの名無しさん
11/12/24 13:11:05.71
>>218
ありがとうございます!

220:デフォルトの名無しさん
11/12/24 16:30:52.37
>>214, 215

以下のソースでうまくいきました。
ありがとうございました。


import csv

csvfile = open("a.csv")
f = csv.reader(csvfile, delimiter=' ')

print "Content-type: text/html"
print

print('<html>\n<head></head>\n<body>')
print('<table>')
for l in f:
print('<tr>')
for td in l:
print('<td>{}</td>'.format(td))
print('</tr>')
print('</table>')
print('</body>\n</html>')



221:デフォルトの名無しさん
11/12/24 16:38:00.42
>>217
>C++とかはincludeした後、そのまま関数を使えるのに

namespace を知らんのか

222:デフォルトの名無しさん
11/12/25 00:28:28.91
usingはおまじないか

223:デフォルトの名無しさん
11/12/25 00:46:12.94
めりくり

224:デフォルトの名無しさん
11/12/28 01:06:07.42
質問お願いします。
文字列の"test"をtuple("test")とすると
("t", "e", "s", "t")と分割されてしまい困っています。
これをタプル化したときに分割されないようには出来ないでしょうか?

225:デフォルトの名無しさん
11/12/28 01:07:44.02
できますん

226:デフォルトの名無しさん
11/12/28 01:08:15.65
("test",)

227:デフォルトの名無しさん
11/12/28 20:40:24.66
文字コードに対応する文字があるか判別する方法教えてください・・・。

0x41と 0x80 を区別したい。



228:デフォルトの名無しさん
11/12/28 21:56:54.11
デコードしてみて例外を捕まえる

229:デフォルトの名無しさん
11/12/28 22:00:53.06
助かります。

230:デフォルトの名無しさん
11/12/29 11:28:46.60
pythonからシェルコマンドを実行するには os.system などを使うそうですが、
これにpythonの変数を渡すにはどうやるんでしょうか?
たとえば
os.system("rm hoge.txt")

file="hoge.txt"
os.system("rm ", file)
みたいにできないでしょうか?

231:デフォルトの名無しさん
11/12/29 11:48:03.91
>>230
プログラミング自体、初心者なのかな?
os.systemに渡してるのはただの文字列だから、
そういう文字列を作っちゃえばOK。例えばこんな感じ。
file = "hoge.txt"
command = "rm " + file
os.system(command)

慣れてきたら
os.system("rm " + file)
とかでもいい。

232:デフォルトの名無しさん
11/12/29 12:17:09.11
win32comでExcelを扱うときの質問。

import win32com.client
xapp = win32com.client.Dispatch("Excel.Application")

として、Excelを使おうとするとき、すでにExcelが起動していると
そのプロセスを掴んでしまうようなんだけど、もうひとつExcelを
起動するようにするにはどうしたらいいんだろう。

VBScriptで次のようにすると、既存のExcelプロセスとは別に
プロセスが起動するよね。そういうことをやりたい。
Set xapp = CreateObject("Excel.Application")

知ってる方おしえてー

233:230
11/12/29 12:24:17.82
>>231
>os.systemに渡してるのはただの文字列だから、
アッー!そうでした・・・。ちょっと恥ずかしすぎる質問でした。
ありがとうございました。

234:デフォルトの名無しさん
11/12/29 12:28:33.31
どういう用途で使うのか知らないけど、
その変数が外来だとするとセキュリティー的に怖いことをやろうとしてるよ。

* rmコマンドへ渡す引数の注意点: ルートのパスと -rf オプションを指定された場合。
* パイプで別のコマンドが実行可能。
* 変数に意図しない空白が含まれてる場合、別々の引数として解釈される。

もし、変数は固定で安全だとと思う場合でも、何かのミスで変数が上書きされて
意図しないコマンドが実行されるというリスクがあるので、早めに対策するのをお勧めです。


参考
URLリンク(www.python.jp) の警告 シェル・インジェクションの項

235:デフォルトの名無しさん
11/12/29 13:25:57.33
os.system よりも subprocess.Popen ですよ

236:デフォルトの名無しさん
11/12/29 13:26:29.73
>>232
無理

237:デフォルトの名無しさん
11/12/29 14:07:55.34
>>236
それマジ?ありがとう

238:デフォルトの名無しさん
11/12/29 15:43:18.71
>>232
win32com.client.DispatchEx("Excel.Application")

239:デフォルトの名無しさん
11/12/29 22:09:10.69
>>238
できた。ありがとう!

240:デフォルトの名無しさん
11/12/29 23:32:56.35
Exとかやる気ねえなw

241:デフォルトの名無しさん
11/12/30 00:06:23.86
まあ本家のWin32APIには"ほにゃららExEx()"とかもあるしね・・・

242:デフォルトの名無しさん
11/12/30 08:56:53.08
viのスレかと重た

243:デフォルトの名無しさん
12/01/01 12:19:42.25
Python でcgiを作りたいと思います。
ウェブブラウザーの画面に表示されたボタンを押すと、そのボタンの色が変わるようなサンプルを探して
いるのですが、なかなか見つかりません。なんかヒントをもらえると助かります。

244:デフォルトの名無しさん
12/01/01 12:24:46.85
その程度なら javascript 使え

245:デフォルトの名無しさん
12/01/01 12:42:19.33
print "Content-Type: text/html;\n"
print """<html>
<head><title>change button color</title></head>
<body><button onclick="this.style.backgroundColor = 'black';">click me</button>
</body>
</html>"""

サンプルはDHTMLでぐぐるといっぱいでてくるはず

246:sage
12/01/01 14:09:41.97
あけまして、おめでとうございます。
namedtupleの名前・値の一覧を取り出す方法教えてください。
dictでいう、dict.items() dict.keys() deict.values()
のようなイメージです。よろしくお願いします。

247:246
12/01/01 14:15:43.90
sage間違えました。

248:デフォルトの名無しさん
12/01/01 14:51:46.30
>>246
URLリンク(www.python.jp)

249:246
12/01/01 15:41:23.87
>>248
ありがとうございます。
 _asdict() で辞書に変換してできました。

 まだじっくり読んでいないのですが、name-index-valueの一覧も
 ここを読見込めば出来る様になるのでしょうか。
 第2段階として
 タプル扱いだとindex-value、辞書にするとname-value、
 これを一つの表として出力したいのです。

250:デフォルトの名無しさん
12/01/01 18:20:39.31
>>249
直接的な方法は書いてないかな。。
_fieldsでキーの一覧を得られるので、後はビルトイン関数のenumerateやzipを組み合わせるといい。

for index,value in enumerate(data):

for key,value in zip(data._fields, data):

for index,(key,value) in enumerate(zip(data._fields, data)):


251:246
12/01/01 19:31:08.06
>>250
 ありがとうございます。できました。
 名前と値を個別に取り出してzipで組み合わせて、enumerateの値をindexと見做す。
 という事のようですが、考えつきませんでした。

 現在、引数がlist型なら形式A、tuple型なら形式B、dict型なら形式Cという
 デバッグ表示用関数(ネストに対応できていませんが)を練習として作っています。
 namedtupleなら形式D、という事をしたいのですが、型の判別方法が判りません。
 tupleとnamedtupleを区別する方法を教えてください。typeではダメでした。
 typesやisinstanceを調べてみても判りませんでした。
 重ね重ね申し訳ありませんが、お願いします。

252:デフォルトの名無しさん
12/01/01 20:43:33.19
>>251
これはよくはまるポイントかもしれない。

namedtupleはクラスではなくて、tupleを直接継承したクラスを生成する * 関数 * なので。
また、現状では namedtupleのみに 共通するベースクラスがなく、isinstanceでは通常のtupleとの区別が付きません。
(※ URLリンク(bugs.python.org))

例えば今回のケース(_fieldsを使う場合)なら、こうかな

if isinstance(obj, tuple):
  if hasattr(obj, "_fields"):
    namedtuple用のコード
  else:
    通常のtuple用のコード


hasattrは、このケースのみの対策というわけではなく、通常の型を判別して処理を別ける場合でも、
isinstanceの代わりに属性の有無のみでチェックする方法がよく使われます。


253:246
12/01/01 22:02:39.85
>>252
 try: expect: で試行錯誤していました。hasattrの方がスマートです。
 やっと本質的なコードに入れます。
 ありがとうございました。

254:デフォルトの名無しさん
12/01/01 22:21:17.05
hoge/__init__.pyとhoge/_hoge_main.pyの2ファイルからなるhogeパッケージで、カスタム例外
クラスhoge.Errorとこのクラスを継承したサブクラスを作成し、_hoge_main.pyからraiseしている
のですが、_hoge_main.py内で、
class Error(Exception): pass
のように定義すると、Tracebackの最後で、
hoge._hoge_main.Error
と表示されてしまいます。できれば、
hoge.Error
と表示されるようにしたいのですが、どのような方法が良いでしょうか? 自分で思いついたのは、
・__init_.py で、各Errorクラスを定義し直して、_hoge_main.Error = Errorで上書きする
・_hoge_main.pyの各Errorクラスの定義で__module__ = 'hoge' とする
の2つですが、あまり良い方法には思えませんでした。
Pythonのバージョンは3.2です。

255:デフォルトの名無しさん
12/01/01 22:48:08.68
>>254
 __repr__ メソッドを上書きする。

第3者にとってはモジュールのパスが判り辛くなるかもしれないので、その点は気をつけて。

256:255
12/01/01 22:59:41.08
読み違えたかもしれない。
hoge.Error がimportされた先のパスで表示されてしまうって問題?

257:デフォルトの名無しさん
12/01/01 23:13:49.82
> hogeパッケージで、カスタム例外 クラスhoge.Errorとこのクラスを継承したサブクラスを作成し、...

> _hoge_main.py内で、class Error(Exception): pass のように定義すると、
> Tracebackの最後で、 hoge._hoge_main.Error と表示されてしまいます。

よく読むと、Errorがどこで定義されてるのかわからなくなった(汗
2重に定義しようとしてる?

hoge/__init__.py で定義すれば hoge.Error だし
hoge/_hoge_main.py で定義すれば hoge._hoge_main.Error と表示されます。

推測だけど、やりたい事はこう?
hoge/__init__.py で Error クラスを定義して、hoge/_hoge_main.py で from . import Error

258:254
12/01/01 23:30:31.06
上手く説明できなくてすみませんでした。
やりたい事は>>257の最後に書かれている通りであっているのですが、
hoge/__init__.pyで、from . import _hoge_main しているのに、hoge/_hoge_main.py でも
from . import Error したら、2つのモジュールが互いにimportするからマズいのでは?と思って
他の方法を探していたのでした。
from . import Errorしても問題が無ければ、そうしたいのですが大丈夫でしょうか?

259:デフォルトの名無しさん
12/01/02 00:49:45.14
>>258

相互 import では幾つか注意が必要なので、出来れば避けた方がいいです。

相互 import で気をつける点は、トップレベルが実行される時点ではまだimportするモジュールの属性を参照出来ない事。
つまりfrom/importが出来ない。import hogeとして、hoge.Errorを関数内で使うようにする。

後、気になったのは、hoge/_hoge_main.py を直接実行したりしないかという点だけど・・・(名前にmainとあるので)
その場合は from . import Error が出来ないかな。

他の対策。遅延import
 * それ程頻繁に呼び出される関数でなければ、関数内で import する。

260:デフォルトの名無しさん
12/01/02 10:20:02.06
>>244
javascriptですか。

>>245
とりあえず動きました。
ありがとうございました。

実はインターネット上のサーバーの監視するものを作っていまして、本体はなんとかpythonで
作れたのですが、webブラウザからそのスクリプトを実行する簡素なフロントエンドを作ろうと考えています。

その場合、フロントエンドはpython よりも javascriptの方が適しているのでしょうか。調べているのですが、
なかなか結論が出なくて。

261:デフォルトの名無しさん
12/01/02 11:31:31.92
python でいいよ
ていうか両方使っちゃだめなのか?

262:デフォルトの名無しさん
12/01/02 11:32:16.33
老若男女、猫も杓子もインターネットを使うようになった今日、
無料情報と有料情報の違いを知らない人が多すぎる。
無料情報は、大半が釣りだと思っておいて間違いない。

263:デフォルトの名無しさん
12/01/02 12:39:17.87
釣りを釣りだと分からない人に、無料情報を使うのは難しい

264:デフォルトの名無しさん
12/01/02 12:45:09.43
おまいらも初詣とか行くときは釣りに気をつけろよ

265:デフォルトの名無しさん
12/01/02 16:27:36.16
>>251
Python 3.2.2 (default, Sep 29 2011, 23:09:11)
> import collections
> nt = collections.namedtuple('Point', 'x y')
> t = tuple()
> nt.__class__
<class 'type'>
> t.__class__
<class 'tuple'>
> isinstance(t, type)
False
> isinstance(nt, type)
True
> isinstance(t, tuple)
True
> isinstance(nt, tuple)
False

Python 2.7.2+ (default, Oct 4 2011, 20:03:08)
> import collections
> nt = collections.namedtuple('Point', 'x y')
> t = tuple()
> isinstance(nt, tuple)
False
> isinstance(t, tuple)
True
> isinstance(nt, type)
True
> isinstance(t, type)
False


266:デフォルトの名無しさん
12/01/02 17:23:06.82
>>265

namedtuple使ったことないのかな?
tはタプルのインスタンスだけど、その nt はタプルを継承した"クラス"
インスタンス同士で区別が付くかどうかを比較しないと意味がないよ。

> n = nt(0,0)
> isinstance(n, type)
False
> isinstance(n, tuple)
True

267:デフォルトの名無しさん
12/01/02 18:02:55.24
>>266
使ったことなかったです。
2度目の正直で

>>> import collections
>>> nt = collections.namedtuple('Point', 'x y')
>>> p = nt(0, 0)
>>> t = tuple()
>>> t.__class__
<class 'tuple'>
>>> p.__class__
<class '__main__.Point'>
>>> type_p = type(p)
>>> p1 = nt(1, 1)
>>> isinstance(p1, type_p)
True
>>> isinstance(p, type_p)
True
>>> isinstance(t, type_p)
False

(・∀・)デキタ!!

268:デフォルトの名無しさん
12/01/02 18:09:06.62
>>267の追加
>>> nt2 = collections.namedtuple('Space', 'x y z')
>>> s = nt2(1, 2, 3)
>>> type_s = type(s)
>>> type_s
<class '__main__.Space'>
>>> isinstance(s, type_s)
True
>>> isinstance(s, type_p)
False
>>> isinstance(p, type_s)
False
>>> isinstance(p, type_p)
True
>>> isinstance(t, type_s)
False
>>> isinstance(t, type_p)
False
(・∀・)イイ!

269:デフォルトの名無しさん
12/01/02 18:19:19.91
連投すまんとです

>>> isinstance(s, (type_p, type_s))
True
>>> isinstance(p, (type_p, type_s))
True
>>> isinstance(t, (type_p, type_s))
False

(・∀・)カンペキ!!

270:デフォルトの名無しさん
12/01/02 18:33:18.75
>>> isinstance(t, tuple)
True
>>> isinstance(p, tuple)
True
>>> isinstance(s, tuple)
True
>>> tuple == type(t)
True
>>> tuple == type(p)
False
>>> tuple == type(s)
False
>>> isinstance(t, tuple) and tuple == type(t)
True
>>> isinstance(p, tuple) and tuple == type(p)
False
>>> isinstance(s, tuple) and tuple == type(s)
False

最後のTrue, Falseでtuple, namedtupleを見分けることが
(・∀・)デキタ!!

271:デフォルトの名無しさん
12/01/02 21:08:25.94
>>270
おめ・・・と言いたいところだけど残念、もう一歩。

そのコードで判別できるのは タプルかタプルを継承したクラスのインスタンスかどうかなので、
例えば、namedtupleで生成したクラス以外の タプルを継承したクラスの場合を考えてみよう。

class Foo(tuple): pass

> x = Foo()
> isinstance(x, tuple) and tuple == type(x)
False

これだと namedtupleと同じ結果だから、
xは namedtuple用のコードで処理されることになるけど _fields属性がないので AttributeError になる。
対して _fieldsの有無でnamedtupleかどうかを判別してれば、通常のタプルとして処理されるのでエラーにはならない。


namedtupleで作られるクラスが共通のインターフェースでも継承してくれれば
もっと判り易く判別するコードが書けるようになるはずなのだけどね。※1

その辺りの議論はここにあって (No way to find out if an object is an instance of a namedtuple) URLリンク(bugs.python.org)
> Detecting _fields is the simplest thing we can do right now.
ということで _fields での判別が、現状(<3.2)では最も簡単な判別方法と締められてる。

# ※1 ただし、Pythonでは厳密な型チェックよりも、
# ダックタイピングの利点を活かす為、規格のみのチェックの方が好まれる。

272:デフォルトの名無しさん
12/01/02 22:11:25.05
(´・ω・`)ショボーン (´;ω;`)ウッ…

273:デフォルトの名無しさん
12/01/03 00:26:36.71
>>272
ドンマイ。やりたいことの意図はわからなくはないよ。

isinstance(obj, INamedTuple) みたいな判別をしたい場合の参考にどうぞ
namedtupleにインターフェースっぽいものを仕込むサンプル。

URLリンク(ideone.com)

274:デフォルトの名無しさん
12/01/05 01:30:26.44
>>> a = bytes.fromhex('00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f')
>>> print('{:s}'.format(a))
b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

bytesを表示した時に全てhexで表示して欲しいんですが、
良い対処方法はないでしょうか?

\t と表示されるのではなく、\x09の様に表示して欲しいのです。
binary data を扱っている時に表示桁数が揃っているとdebugし易いんです。

275:デフォルトの名無しさん
12/01/05 03:50:30.64
>>274
プレフィクスに拘らないなら binascii.hexlify

問題の原因・・・エスケープシーケンスの処理は bytes型のrepr関数内で行われてるので、
対処方法は、それさえ避けるようにすればok。方法はいくつか考えられるけど、
デバッグ用途なら reprモジュール使って独自にフォーマットする例を挙げてみる。

from reprlib import Repr
class DebugRepr(Repr):
  def repr_bytes(self, obj, level):
    return "b'{}'".format("".join(map("\\x{:02x}".format, obj)))

repr = DebugRepr().repr
print(repr(a))

勿論、bytes型限定であれば、上記のrepr_bytesを普通の関数にして使ってもいい。

276:デフォルトの名無しさん
12/01/05 13:47:35.71
binascii.hexlifyでいくことにしました。
ありがとうございました。

binascii.b2a_qp(a)がいい感じだったんですけどねぇ。。。

>>> import binascii
>>> binascii.hexlify(a)
b'000102030405060708090a0b0c0d0e0f'
>>> binascii.b2a_uu(a)
b'0 $" P0%!@<("0H+# T.#P \n'
>>> binascii.b2a_base64(a)
b'AAECAwQFBgcICQoLDA0ODw==\n'
>>> binascii.b2a_qp(a)
b'=00=01=02=03=04=05=06=07=08=09\n=0B=0C\r=0E=0F'
>>> binascii.rledecode_hqx(a)
b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'
>>> print(a)
b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'
>>> binascii.rlecode_hqx(a)
b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'
>>> binascii.b2a_hqx(a)
b'!!%#!`3&"JF)#3S,$!d1$`'

277:デフォルトの名無しさん
12/01/05 21:45:36.35
[5,2,1,0,5]のようなリストがあるとき、最大値の要素番号を取得するにはどうしたらいいでしょうか?
上のリストのように最大値を持つものが2つ以上ある場合は0,4のどちらでもokです。
できるだけ高速に取得したいです

278:デフォルトの名無しさん
12/01/05 22:23:05.09
maxとindex使えばいいだけですね。すれ汚し失礼しました

279:デフォルトの名無しさん
12/01/05 23:45:26.14
dive into python 3の日本語版サイトが英語になってる。
HTMLのリンクも切れてる。読んでた途中の俺涙目。

280:デフォルトの名無しさん
12/01/06 00:04:56.74
Mark Pilgrim半失踪の煽りを喰らったか

281:デフォルトの名無しさん
12/01/06 00:16:38.61
>>279 レポジトリなかったかな・・とぐぐってみた。中身確かめてないけど
hg clone URLリンク(code.google.com)

282:デフォルトの名無しさん
12/01/06 00:30:36.50
>>281の生存確認
clone後にbuild_ja.pyを実行しないといけないけれどlocal環境で読めてます。

資料系のsiteはscrapbookの使用をお勧めします。
それかnetに繋げれなくても、local環境で参照できるように設定しておくとか。

>>280
Mark Pilgrim失踪の話を初めて聞いたのですが顛末を教えて頂けないでしょうか?

283:デフォルトの名無しさん
12/01/06 14:53:08.91
>>282
ローカルの設定にとまどいましたが日本語版の生成ができました!
ありがとうございます。
重要なものはローカルにとっておくように習慣つけようと思います。

284:デフォルトの名無しさん
12/01/07 12:40:42.61
Python(Windows版)インストールに関してご存知の方がいれば教えてください.
バージョンは2.5でも3.2でも変わらないのですが,msiを実行した直後にWindowsInstallerのエラーが出て以上終了します.
もしかしたらOSが未対応なのかもしれなくて,WindowsXPのMedia Center Edition SP3です.
このOSではPython環境を導入できないのでしょうか?

285:デフォルトの名無しさん
12/01/07 13:14:09.79
msiが壊れてるとか(MD5を確認)、64bit版だったりとか、ウィルス対策ソフトが邪魔してるとか

286:デフォルトの名無しさん
12/01/07 13:47:51.31
>>284
エラー内容を書け

287:デフォルトの名無しさん
12/01/07 21:04:38.43
>>286
python-3.2.2.msi
"Install for all users"を選択した後にエラー.

特に提示できそうな内容がないんだけど,WindowsInstallerのエラー署名に関して.
AppName: msiexec.exe
ModName: msihnd.dll

PythonがMedia Center Editionに対応してないと明記されているページが見つからないので,
もしあれば教えてください.諦めが付きます.

288:デフォルトの名無しさん
12/01/07 21:09:40.73
for all users ってことは管理者権限でインスコしないといけないんじゃない?
もし他の選択肢(for current userとか)があればそっちを試してみるとか

289:デフォルトの名無しさん
12/01/07 21:19:26.94
>>288
レスthx
管理者権限だし,試せる選択肢は全て試し済ですね.

290:デフォルトの名無しさん
12/01/07 21:23:57.21
WindowsInstallerのバージョンは?

291:デフォルトの名無しさん
12/01/07 21:44:23.75
>>290
msiexecで確認した.
V4.5.6001.22159

292:デフォルトの名無しさん
12/01/07 21:46:53.74
cygwinにもpython付いてるよ

293:デフォルトの名無しさん
12/01/07 22:19:54.22
エラーの原因がわからないと何ともいえないので、まずは詳細ログ出力

msiexec /i python-3.2.2.msi /L*v python.log

Media Center Editionは知らないので他の方に任せた。

他に気になった点、
2.5って公式では今はソースのみ配布になってるはずだけど、
MSIということはactivepythonの方だったりする?

294:デフォルトの名無しさん
12/01/07 22:26:19.81
2.5.4のmsiなら落とせるよ
URLリンク(www.python.org)

295:デフォルトの名無しさん
12/01/07 23:00:56.59
>>294
それはセキュリティfixの当たってない古いバージョン

activepythonだったら 2.5.6 の msi がある
URLリンク(www.activestate.com)


296:デフォルトの名無しさん
12/01/07 23:05:48.60
>>293
こんなログの吐き方があるんだ.
勉強になります.

ログは吐いたけど出力量が多いのと端末情報も多少入ってるので全upは厳しいかも.

何かgrepしたい文字列とかないですか?

ちなみにログの最後は以下で終わってる.
MSI (c) (A4:50) [23:00:15:979]: Note: 1: 2235 2: 3: ExtendedType 4: SELECT `Action`,`Type`,`Source`,`Target`, NULL, `ExtendedType` FROM `CustomAction` WHERE `Action` = 'SelectDirectoryDlg'

297:デフォルトの名無しさん
12/01/07 23:43:41.36
grep -i error

298:デフォルトの名無しさん
12/01/08 00:53:23.34
>>296

関連あるかどうか分からないけど、追加で確認事項 wscript.exeのバージョン確認

MSI内のカスタムアクションでwscriptが使われてるらしく、
WScriptのバージョンアップでインストールが成功した報告例あり。

URLリンク(mail.python.org)


MSIログは、"Return value 3" になってるとこを検索。エラーで失敗してるアクション)

299:デフォルトの名無しさん
12/01/08 01:50:53.65
インストーラーをNASとかローカルHDD以外から実行するとエラーになるのあったりするけどその辺はどう?

300:デフォルトの名無しさん
12/01/08 02:27:02.55
よろしくお願いします
txt = "abc123, aaaaa, abc3210"
txtのような文章があるときに、re.compile('abc(\d+)')のような正規表現でsearchをかけています。
この場合に、最初に一致したものだけでなく、txtに含まれる一致するもの全てを取り出したいのですが、どのように書けばいいのでしょうか?



301:デフォルトの名無しさん
12/01/08 02:53:28.89
findall,finditerを使う

302:デフォルトの名無しさん
12/01/08 13:49:37.47
>>298
WScript.Echo("WScript.Version:" & WScript.Version)
5.7

303:デフォルトの名無しさん
12/01/08 18:02:27.96
他に誰か同じOSの人いればそれで試してもらった方が早いと思うけど。

304:デフォルトの名無しさん
12/01/09 02:41:15.02
Dive Into Python 3の日本語訳直ってるね

305:デフォルトの名無しさん
12/01/09 16:35:28.76
python-twitterでGetFollowers()を使うと
twitter.Api instance must be authenticatedのエラーが出るようになった。。。
Oauth関連が原因なんでしょうか…原因分かる人いたらよろしくお願いします。

306:デフォルトの名無しさん
12/01/09 17:07:35.54
>>304
ほんとだ
金曜日にローカルで日本語版作ったけど結局待てば直ってたわけかw

307:デフォルトの名無しさん
12/01/10 00:31:33.89
>>306
>>279で書いた時みたいに涙目にならないようにlocal環境構築しておく。
急げ、後悔先に立たずだ

308:デフォルトの名無しさん
12/01/11 18:03:06.04
tkinterのテキストボックスを検索してタグを付けたいのすが、下記のコードだと正規表現を使うと、当たり前ですがキーワードの長さが取得出来ません。"(Y|y)ou"は当然7文字カウントしてしまいます。どうしたら検索結果ぴったりにタグが付けられるのか全く思いつきません。
from tkinter import *
def search_it(keyword_from,widget):
...if "C" not in widget.mark_names():
......widget.mark_set("C","1.0")
...try:widget.tag_delete("it")
...except:pass
...keyword=keyword_from.get()
...keyword_length=len(keyword)#正規表現を使うとlengthがおかしなことになる。
...ini=widget.search(keyword,"C",exact=False,regexp=True)
...end=ini+"+"+str(keyword_length)+"chars"
...widget.tag_add("it",ini,end)
...widget.tag_config("it",foreground="#FF0000",font="arial 18 bold")
...widget.mark_unset("C")
...widget.mark_set("C",end)
...widget.see(ini)
root=Tk()
ent=Entry(root)
ent.pack()
btn=Button(root,text="search",command=lambda:search_it(ent,tex))
btn.pack()
tex=Text(root)
tex.pack()
root.mainloop()

import 2ch
try:2ch.tell_me_a_hint(search_it)#お願いします。
except:pass

309:デフォルトの名無しさん
12/01/11 18:12:47.46
>>308
モジュール名の先頭に数字は使えない
URLリンク(www.python.jp)

310:デフォルトの名無しさん
12/01/11 18:35:11.93
>>308
Tkinter.Text.searchで得られるのは文字が見つかった開始位置のみだよね?

マッチした文字に対して長さを調べるか、終了位置を別に調べるようにする。
多分、re.search使った方が簡単。

他の方法。他の正規表現の内容次第だけど、大文字小文字の区別のみなら
Tkinter.Text.search の nocase=True オプションで正規表現使わずに済ませられる。

311:308
12/01/11 20:13:08.36
>>309
素早い添削有難うございます。すっかり忘れていました。
>>310
教えて頂いたオプションで済みそうですが、reを使ってトライしてみます。
有難うございます。

312:310
12/01/11 20:35:39.55
>>311
countオプションでマッチした長さを得られるみたい
だけど、値の受け取り方が・・・Tcl/Tk知らないとちょっと解りにくいね

cnt = tkinter.IntVar()
ini = widget.search(keyword,"C",exact=False,regexp=True,count=cnt)
keyword_length = cnt.get()

NOTE: re.searchだとPythonの正規表現、regexp=TrueではTclの正規表現が使われる。
pythonからはre.searchの方が柔軟に使えそうだけど、pyhon<=>tk間での文字コード絡みの問題はどうなってるのか知らない。

313:308
12/01/11 21:14:03.01
>>312
わー‼できたー!
重ねて御礼申し上げます。
コードの意味は確かによく分かりません。

314:デフォルトの名無しさん
12/01/13 13:25:54.59
なんでこんなことになってるの?

>>> False <= 2
True
>>> False <= -2
False
>>> int(False)
0
>>> int(True)
1
>>> 1 == True
True
>>> 0 == True
False
>>> True + 1
2
>>> 1 + True
2
>>> n = 1
>>> n += True
>>> n
2
>>> m = True
>>> m += True
>>> m
2
>>> x = True
>>> x
True
>>> x += 0
>>> x
1

315:デフォルトの名無しさん
12/01/13 13:28:26.00
>>> True and True
True
>>> True and 1
1
>>> True * True
1
>>> True / True
1.0
>>> True ** True
1
>>> 1.0 == True
True
>>> 1.01 == True
False

正直、迷惑なんですけど
特に最後の
>>> 1.0 == True
True
のくせに
>>> 1.01 == True
False
とか

    ∧___∧    / / / /
  ⊂( ・∀・)  、,Jし //  パン
   (几と ノ   )  て.
  //'|ヽソ 彡  Y⌒Y `Д´) ←Guido
/ノ / | \ 彡
ヽ/、/ヽ/ ヽ/   

316:デフォルトの名無しさん
12/01/13 14:49:21.83
いや、別に。

317:デフォルトの名無しさん
12/01/13 15:12:15.41
なにが迷惑なのかまったくわからん

318:デフォルトの名無しさん
12/01/13 15:18:19.22
何がおかしいのか分からない

319:デフォルトの名無しさん
12/01/13 15:36:57.71
boolはintのサブクラス
というか1.0とTrueを比較したいと思うことがあんまりない

320:デフォルトの名無しさん
12/01/13 16:08:08.43
>>> bool(1.01)
True
>>> bool(1.0)
True

321:デフォルトの名無しさん
12/01/13 16:34:29.39
こういうことか

>>> float(True)
1.0

322:デフォルトの名無しさん
12/01/13 16:56:00.12
ワロタ
>>314-315 は CS を知らんのだな

>>> True and 3
3
>>> True & 3
1
>>> 3 and True
True
>>> 3 & True
1
>>> True and 2
2
>>> True & 2
0
>>> 2 and True
True
>>> 2 & True
0


323:デフォルトの名無しさん
12/01/13 17:03:02.30
short-circuitのの話ではなくTrueとFalseを1と0と同じように扱ってるところを
疑問に感じてるんだろう

324:デフォルトの名無しさん
12/01/13 17:05:34.63
というか&&じゃやなくて&か…CSって何の略?

325:デフォルトの名無しさん
12/01/13 17:10:31.84
customer satisfaction

326:デフォルトの名無しさん
12/01/13 17:10:50.82
>CSって何の略

と言ってるようではお里が知れるというもの

327:デフォルトの名無しさん
12/01/13 17:14:12.82
>>326
くだすれでそんなドヤ顔されても困っちゃいますYO
とっとと何の略か答えてどうぞ

328:デフォルトの名無しさん
12/01/13 17:49:51.64
> CS =ChinShu
>  DIを観測すると頻繁に観測される特異状態。β波を大量に発する。
>  近年、β波は低下してきている。
URLリンク(kumagaya.tumblr.com)

あー、あのころが懐かしいよ

329:デフォルトの名無しさん
12/01/13 17:52:05.94
certified secretary

330:デフォルトの名無しさん
12/01/13 18:37:09.34
主に互換性の為(シーケンスのインデックスにブール値が使われたりもする)
ブール値の算術演算は許容されてるけど、ブール値の直接比較はやらないようにとスタイルガイドで言及してるよ。

bool型がどうしてそうなってるか、詳しく知りたければPEP読んで
URLリンク(www.python.org)


331:デフォルトの名無しさん
12/01/13 19:14:30.26
python2.7.2 windows xp です。

状況
キーに英単語・数字・数値 が使われている辞書をキー順でソートしたい。
数値は、int・float・long いずれも使用されている。

ソート条件
1: 英字は、大文字・小文字を区別しない。
sorted(dic.items(), key=lambda x: str(x[0]).lower())
2: 数字は、数値と区別しない(数値として扱い小→大)。
3: ソート自体は文字コード順で行う(3系でも動くよう比較値の型を統一)。

質問1
1と2と3が両立する、sortedに渡すためのkey関数が浮かびません。
レシピをお願いします。
質問2
数値・数字を下記の様な文字列に変換するstr.format()の書き方を教えてください。
小数点前と小数点後の可能な最大桁数も知りたいです(元が数値なので制限があるかと)。
Python 2.7ja1 documentationの書式指定ミニ言語仕様を読みましたが、
具体的な書き方が解かりませんでした・・・。
2:の解決に数値・数字とも最大桁数に揃えて文字列扱いすれば…と思った次第です。

0.12 0000.120
1 0001.000
1.2 0001.200
1.234 0001.234
11 0011.000
12.34 0012.340

質問もうまく書けていないと思いますが、よろしくお願いします。

332:331
12/01/13 19:20:58.80
すいません。最後の例が解かりずらいので。下記です。

format前
0.12
1
1.2
1.234
11
12.34

format後
0000.120
0001.000
0001.200
0001.234
0011.000
0012.340

333:デフォルトの名無しさん
12/01/13 20:07:37.19
'%08.3f'

334:デフォルトの名無しさん
12/01/13 20:44:33.03
>>331
これでほしいものになってるかちょっと分からんけど……
keyfunc()は以下のようなタプルを返す関数
1.23 -> ('', 1.23)
'Python2.72' -> ('python\0', 2.72)
'1 + 1 = 2' -> ('\0 + \0 = \0', 1.0, 1.0, 2.0)

import re
pattern = re.compile('\d+(?:.\d+)?')
def keyfunc(x):
    if not isinstance(x, basestring): return ('', x)
    xs = []
    def matched(m):
        xs.append(float(m.group()))
        return '\0'
    s = pattern.sub(matched, x)
    return tuple([s.lower()] + xs)

335:デフォルトの名無しさん
12/01/13 20:58:55.60
ああこれじゃダメだな、ごめんごめん

336:デフォルトの名無しさん
12/01/14 01:01:17.66
>>331 質問1

以下、手抜きコードだけど、たたき台くらいにはなるかな?
考え方の基本は334と同じ、複数の条件でソートする場合はタプルを返す関数を渡すとすっきりする。

# for key,val in sorted(dic.items(), key=keyfunc):

def keyfunc(keyval):
  key,_ = keyval
  try:
    n = float(key)
    s = ""
  except (TypeError, ValueError):
    n = float("NaN")
    s = key.lower()
  return (s, n)

参考:
辞書順ソートで数字は数値として比較する(例 バージョン番号つきファイル名のソート)
URLリンク(codepad.org)

337:336
12/01/14 06:57:24.77
"inf" や "nan" って文字列も数値扱いになるので、
float(key) の例外のみでの判断はまずいかもしれない。

型が混在する場合、3.xでのbytes型の扱いに注意。3.xではそれぞれ別のキーになる。
print({"foo": 1, b"foo": 2})

338:デフォルトの名無しさん
12/01/14 14:04:16.98
まじか
これはひどい

339:331
12/01/14 15:58:15.31
>>333-337
ありがとうございます。動きました。
>>335-335
>"inf" や "nan" って文字列も数値扱いになるので~。
3行(INF、NAN、 try中のif文)追加してみました。
目的は達しますが何だか…今はこれしか浮かびません。
def keyfunc(keyval):
INF = float("inf")
NAN = float("nan")
key,_ = keyval
try:
n = float(key)
if (n == INF) or (n != n):raise TypeError
s = ""
except (TypeError, ValueError):
n = float("NaN")
s = key.lower()
return (s, n)
すいません追加質問です。return (s, n) をreturn (n, s) にしてみたところ、
下記の様に?な結果がでました。理由が判る方、解説をお願いできないでしょうか。
1
1.234
ABC
1.2(str)
KING
JUN
0.12(str)

340:331
12/01/14 16:01:24.81
>>335-335 → >>336-337 です。
全角を使ったのですが、インデントが全然効いていません…。


341:デフォルトの名無しさん
12/01/14 16:17:05.01
馬鹿には無理

342:デフォルトの名無しさん
12/01/14 16:19:31.30
>>341
自己紹介乙

343:デフォルトの名無しさん
12/01/14 19:41:42.99
>>340
&nbsp;

344:デフォルトの名無しさん
12/01/14 20:03:36.08
tracerouteを行なった結果をテキストファイルに出力したものをから、後ろの3つの数字だけを
別のテキストファイルに出力したいのですがどのように書けばよいかわかりません。
テキストは以下のような形になっています。よろしくお願いします。
traceroute to ja.wikipedia.org (208.80.152.2), 30 hops max, 60 byte packets
1 ntt.setup (192.168.1.1) 0.121 ms 0.134 ms 0.159 ms
2 118.23.8.17 (118.23.8.17) 6.037 ms 6.577 ms 7.064 ms
3 118.23.5.137 (118.23.5.137) 4.971 ms 5.388 ms 5.368 ms
4 122.1.164.213 (122.1.164.213) 7.556 ms 9.341 ms 11.167 ms
5 60.37.55.165 (60.37.55.165) 6.195 ms 6.151 ms 6.154 ms
6 60.37.27.89 (60.37.27.89) 6.470 ms 5.355 ms 5.761 ms
7 ae-5.r21.tokyjp01.jp.bb.gin.ntt.net (129.250.11.53) 5.790 ms 7.090 ms 6.670 ms
8 as-2.r21.snjsca04.us.bb.gin.ntt.net (129.250.4.44) 114.218 ms 113.157 ms 113.279 ms
9 equinixexchange.ir1.sanjose-ca.us.xo.net (206.223.116.85) 122.223 ms 122.167 ms 122.115 ms
10 vb2001.rar3.la-ca.us.xo.net (207.88.13.110) 125.873 ms 132.449 ms 125.843 ms
11 vb15.rar3.dallas-tx.us.xo.net (207.88.12.45) 149.345 ms 149.826 ms 149.540 ms
12 207.88.14.42.ptr.us.xo.net (207.88.14.42) 182.000 ms 182.215 ms 181.906 ms
13 w006.z207088246.xo.cnc.net (207.88.246.6) 187.915 ms 187.107 ms 187.082 ms
14 rr.pmtpa.wikimedia.org (208.80.152.2) 186.903 ms 186.520 ms 186.758 ms

345:デフォルトの名無しさん
12/01/14 20:14:19.14
エポックからのミリ秒文字列をdatetimeに変更したいのですがどうしたらよいでしょうか。


346:デフォルトの名無しさん
12/01/14 21:07:59.69
>>339

ソート結果がおかしくなる原因:float("nan")
NANは不定値なのでこういう振る舞いをする。当然ソート結果はおかしくなる。

NAN >= 0 # False
NAN <= 0 # False
NAN == NAN # False
NAN is NAN # True

文字列の時は数値が比較されることはないはずなので
float型ならなんでもいいと思ってて、不用意にnanいれてしまったのが原因かな。

タプルを返す時は、なるべく要素数と型を揃えた方が都合が良いんだけど、
気にならなければ、文字列の場合は1要素のタプルを返すでもok

一応、文字の時・数値の時で 要素数と型を揃えたタプル(n, s) を返す場合だと、
例えば、文字列の時に返す数値(n)を float("-inf") や float("inf") とすると、
文字優先・数値優先のソートが可能になります。

347:デフォルトの名無しさん
12/01/14 21:16:08.78
>>344
import re, fileinput
findall_ms = re.compile(r"(\d+\.\d+) ms").findall
for line in fileinput.input():
  print(" ".join(findall_ms(line)))

# python findall_ms.py < a.dat > b.dat



348:331
12/01/14 23:22:57.11
>>346 重ね重ねありがとうございます。

>NANは不定値なのでこういう振る舞いをする。当然ソート結果はおかしくなる。
n!=n(NaN!=NaN)という条件を書いているのだから気付くべきでした。

文字列のinf、NaNは下記で回避
INF = float("inf")
NAN = float("nan")←不要に気付いたので削除します。
if (n == INF) or (n == -INF) or (n!=n): raise TypeError
文字列の時に返す数値
float("inf")
で、先に進める事にします。この後もキーがタプルの場合の処理。要素が日本語の時は
文字コードではなくその文字を表示。ネストしていたらどうするか等、問題山積みです。
デバック用自家製pprintの道は険しいです。
またお世話になる事は確実です。今後もよろしくお願いします。

349:デフォルトの名無しさん
12/01/14 23:28:34.42
>>347
ありがとうございます。

350:デフォルトの名無しさん
12/01/15 04:49:14.94
>>345
datetime.fromtimestamp

351:デフォルトの名無しさん
12/01/15 08:38:28.51
floatで変換するのがダメならast.literal_eval使う手もある

352:デフォルトの名無しさん
12/01/15 16:20:52.01
VPythonって何?

353:デフォルトの名無しさん
12/01/15 19:19:12.34
UNIX系OSのシェルで実行するPythonスクリプトを作成しているのですが、
パイプを使った標準入力の受け取り方について良い方法を探しています

echo "hoge" | ./test.py
で、"hoge"を取得して処理をしたいという状況です

sys.stdinを使用して取得まではできたつもりなのですが、
単純に ./test.py といったパイプ無しでの実行のときに一定時間後落ちます
パイプでの標準入力が無い場合は別の処理をしたいのですが、良い方法がありますでしょうか

よろしくお願いします

354:デフォルトの名無しさん
12/01/15 19:32:38.64
すみません、できたっぽいですorz

勘違いしてるといけないので一応、書いておきますと
sys.stdin.isatty()
を確認しました

355:デフォルトの名無しさん
12/01/16 02:28:29.56
>>351
他の単語で不都合が出そう Trueとか

>>348
ソートに使う関数(1度のソートで複数回呼ばれる)ってことで、出来るだけシンプルにしようと思ったんだけど
他の型にも対応する&デバッグ専用であればパフォーマンスより拡張性優先にした方がいいかな。

try/except による判別では、対応する型が増えるとネストが深くなりそうなので
明示的に、型による分岐にした方が良さそうです。率直に記述するなら if isinstance の列挙。
URLリンク(codepad.org)

>自家製pprint
簡単な実装方法としては、pprint.PrettyPrenter や repr(reprlib).Repr のサブクラスを作って拡張する方法があるよ。

356:デフォルトの名無しさん
12/01/16 18:10:16.42
突然だけど、このページの文字コードの解説が分かりやすかった
URLリンク(lab.hde.co.jp)

357:デフォルトの名無しさん
12/01/17 10:16:41.48
スレリンク(tech板:339番)

339 :デフォルトの名無しさん:2008/08/23(土) 08:36:00
    PythonのUnicodeEncodeErrorを知る
    URLリンク(lab.hde.co.jp)

    よくまとまってた。あとで読む

358:331(348)
12/01/17 21:13:41.51
>>355
コードサンプルありがとうございます。参考にさせて頂きます。

359:デフォルトの名無しさん
12/01/17 23:43:18.40
setdefaultencoding 禁止

360:デフォルトの名無しさん
12/01/18 21:46:40.56
elementtreeに読み込まれたxmlの任意のelementを取得し、
そのelementの親となっているelementを返すコードを書きたいのですが検討が付きません。
サンプル等教えて頂けないでしょうか?

361:デフォルトの名無しさん
12/01/18 23:19:16.66
ElementTreeの要素は親要素への参照を持たないので
ひと手間かける必要がある
URLリンク(effbot.org)

でもlxmlなら直接書ける
URLリンク(lxml.de)
>>> root is root[0].getparent() # lxml.etree only!
True

362:360
12/01/18 23:47:03.94
>361
ご回答有難うございます。
ElementTree以外のxmlライブラリ利用も考えてみましたが、
なるべく標準ライブラリで済ませたいため今回はlxmlは見送ろうと思います。

363:デフォルトの名無しさん
12/01/21 00:24:47.15
list = [apple1,apple3,apple4,apple2,banana2,banana1,banana5,banana3,banana4]

こんな感じで末尾に数字つきの文字列のリストがあったとして
これをapple1,apple2,apple3,apple4,banana1,banana2....という風に
リスト内の順番を数字順に並び替えるにはどうするのが1番早く出来ますでしょうか?

364:デフォルトの名無しさん
12/01/21 00:27:57.70
L = ['apple1','apple3','apple4','apple2','banana2','banana1','banana5','banana3','banana4']
L.sort()

365:デフォルトの名無しさん
12/01/21 00:54:39.63
>>364
なんと1瞬・・・pyてょnすげーです
ありがとうございます・・・

366:デフォルトの名無しさん
12/01/22 01:36:40.63
while 文の中で、かなり時間のかかる処理を行うのですが、キーボードから入力で、breakさせ
たいと考えています。どんなやり方があるでしょうか。

367:デフォルトの名無しさん
12/01/22 01:45:09.69
Ctrl+C

368:デフォルトの名無しさん
12/01/22 04:09:42.80
URLリンク(d.hatena.ne.jp)
URLリンク(www.slideshare.net)


369:デフォルトの名無しさん
12/01/27 17:58:23.24
PYTHONとC++との組み込みと使い方に詳しいページってありますかね?

370:デフォルトの名無しさん
12/01/27 18:05:31.70
特定のシステム上のpythonが使えるメモリの上限値を調べる事って出来ますか?
具体的にはandroid端末のsl4a上で使えるpythonのメモリの上限値を調べたいです

371:デフォルトの名無しさん
12/01/30 22:29:53.24
住所の文字列を渡して、google mapがブラウザに表示されるスクリプトを探しているのですが
どっかに無いでしょうか?

372:デフォルトの名無しさん
12/01/30 23:19:47.06
>>371
import webbrowser, urllib
webbrowser.open('URLリンク(maps.google.co.jp)' + urllib.quote(u'東京都千代田区永田町1丁目7番1号'.encode('utf-8')))

373:デフォルトの名無しさん
12/01/31 23:48:02.65
URLリンク(www.nslabs.jp)

このサイトを見て次のようにプログラムを組んだのですが、うまくいきません。

# -*- coding:utf-8 -*-
import Tkinter

def on_clicked():
print "ボタンが押された!"

window = Tkinter.Tk()
button = Tkinter.Button(window, text = "押してください。", command = on_clicked)
button.pack()
window.mainloop()

本当だったら、端末からスクリプトを実行したら、ウィンドウが出て、ボタンを押すと”ボタンが押された!”と表示されるはずなのですが…

374:デフォルトの名無しさん
12/01/31 23:53:05.34
失礼。どうなるか書くのを忘れてました。
実行したら何も出ずに終了してしまいます。
あまりにもくだらない質問かもしれませんが、ご教授おねがいします。

375:デフォルトの名無しさん
12/01/31 23:59:43.70
>>373
端末って本当に端末?アイコンをダブルクリックで実行とかしてない?
とりあえずOSとPythonのバージョンを

376:デフォルトの名無しさん
12/02/01 00:05:07.20
>>375
あぁ…。ほんと色々書くの忘れてますね…。申し訳ない。

Ubuntu Linux 11.10
Python 2.7

です。

端末から実行してます。
対話モードで四則演算とか
簡単なスクリプト

print "hoge"

とかならできるので、端末の使い方を誤っているわけではないと思います。

377:デフォルトの名無しさん
12/02/01 00:22:10.65
ああ、そういうことか。インデントするのはprint文だけでいいよ
>>373だとon_clicked関数を定義するだけで呼びださないスクリプトになってる

def on_clicked():
    print "ボタンが押された!"

window = Tkinter.Tk()
button = Tkinter.Button(window, text = "押してください。", command = on_clicked)
[...]


378:デフォルトの名無しさん
12/02/01 00:42:14.08
>>377
できました!
ありがとうございます。

今回の失敗は、

def on_clicked():
print "ボタンが押された!"

で関数を定義して、その続きもインデントしたままだと、その内容もon_clicked関数の中身として処理されてしまう。
という解釈でいいでしょうか。

379:デフォルトの名無しさん
12/02/01 00:55:18.69
>>378
です。
> 字下げするのを止めたところがその関数の終わりになります。

380:デフォルトの名無しさん
12/02/01 01:01:07.43
>>379
ありがとうございます。
少しかじった程度のC言語のノリで字下げしまくってたら、Pythonでそれは命取りでした。
字下げを使うというのがPythonの大きな特徴だと言うのに…。

助かりました。ありがとうございます。

381:デフォルトの名無しさん
12/02/01 01:42:02.28
>>380
できたならいいけど。
C言語のノリで字下げって、Cでも普通はそんな字下げはしないよ……

Cでは`}'を入力したらエディタが勝手に字下げを1段戻してくれたけど、
Pythonでは`}'を入力するかわりに字下げを戻すんだ。

382:デフォルトの名無しさん
12/02/01 16:44:39.87
Pythonの書きやすさは、エディタの能力によって大きく左右される。

383:デフォルトの名無しさん
12/02/01 17:02:38.15
>>373の行頭からの連続した半角空白がインデントされて見えてる人いる?
いたら環境教えてほしい

384:デフォルトの名無しさん
12/02/01 17:22:13.92
v2cだと半角spcすら見えない
2ch mateで1個分

385:デフォルトの名無しさん
12/02/01 17:34:17.52
>>383
dat を直接見ればよかろう。
Jane Style なら >>373 にカーソルを合わせれば見えるし。

386:デフォルトの名無しさん
12/02/01 18:18:10.45
>>384
> 2ch mateで1個分
ああやっぱりそういうブラウザあるのか。どうもありがとう

興味ある人向け
URLリンク(www.asahi-net.or.jp)

387:デフォルトの名無しさん
12/02/02 04:19:08.62
インデントなら navi2ch 最強。


388:デフォルトの名無しさん
12/02/02 18:15:56.95
Dive into Python を読んでいますが、
>>> by = b'd'
をそのままコピペすると
>>> >>> by = b'd'
File "<stdin>", line 1
>>> by = b'd'
^
SyntaxError: invalid syntax
というエラーが出てしまいます
by = b'd'
だけコピペするのが面倒なのですが何か良い方法はありませんか?
>>> sys.ps2
'... '
>>> sys.ps1
'>>> '
というので設定すればいけるのかな?と思いましたがよく分かりませんでした。

389:デフォルトの名無しさん
12/02/02 18:32:01.75
URLリンク(www.diveintopython.net)

390:デフォルトの名無しさん
12/02/02 18:33:04.82
そのくらいコピペじゃなくて自分で入力しよう

391:デフォルトの名無しさん
12/02/02 18:33:33.83
>>389
PCが物故割れた

392:デフォルトの名無しさん
12/02/02 21:55:31.54
Tkinter の raise と lower の使い方がよくわかりません。
下のTcl/Tkスクリプトと同じ動作をTkinterで実現するにはどうしたら良いでしょうか?

#!/bin/sh
# the next line restarts using wish \
exec wish "$0" "$@"

set flag 0
canvas .c0 -bg "white"
canvas .c1 -bg "green"
pack .c0
pack .c1 -in .c0

bind . <1> {if {$flag == 0} {lower .c1; set flag 1} else {lower .c0; set flag 0}}

393:デフォルトの名無しさん
12/02/03 19:34:33.48
1/6000 * 1/3000 * ... ぐらいの桁の掛け算を何度も繰り返すのですが
桁落ち、アンダーフローなどが心配で、対数か何かを使ってどうにか出来ないでしょうか?
ふざけた質問だと思いますがよろしくお願いします。

394:デフォルトの名無しさん
12/02/03 19:42:45.79
有理数として表現できるなら、
fractions
一択

詳しくは、
URLリンク(diveintopython3-ja.rdy.jp)
ネイティブデータ型 - Dive Into Python 3 日本語版

有理数の事で悩んでいたんなら、>>393は少なくとも
URLリンク(diveintopython3-ja.rdy.jp)
に一通り目を通さなければならない。

時間に余裕があるなら、こっちも
URLリンク(diveintopython3-ja.rdy.jp)

395:デフォルトの名無しさん
12/02/03 19:48:41.45
>>394
fractions見てみましたが使えそうです。
早い回答ありがとうございました。

また一度Dive Into Python3も熟読してみます。



396:デフォルトの名無しさん
12/02/03 19:50:16.64
>>394を修正

有理数として表現できるなら、fractions 一択
2.7でも3.0でも使えるよ。

有理数の事で悩んでいたんなら、>>393は少なくとも
URLリンク(diveintopython3-ja.rdy.jp)
に一通り目を通さなければならない。

他の便利な型について詳しくは、
URLリンク(diveintopython3-ja.rdy.jp)
ネイティブデータ型 - Dive Into Python 3 日本語版

時間に余裕があるなら、こっちも
URLリンク(diveintopython3-ja.rdy.jp)

397:396
12/02/03 19:55:53.94
>>395
実は私も最初から読んでいる所なんだ。
で、昨日ちょうど読んだ後だったから、こんなに速い回答が出来たんだ。

ああ、もうっ!

有理数として表現できるなら、fractions 一択
2.7でも3.0でも使えるよ。

有理数の事で悩んでいたんなら、>>393は少なくとも
URLリンク(diveintopython3-ja.rdy.jp)
に一通り目を通さなければならない。

他の便利な型について詳しくは、
URLリンク(diveintopython3-ja.rdy.jp)
ネイティブデータ型 - Dive Into Python 3 日本語版

時間に余裕があるなら、こっちも
URLリンク(diveintopython3-ja.rdy.jp)

398:デフォルトの名無しさん
12/02/03 20:07:13.56
どんだけーw

399:デフォルトの名無しさん
12/02/03 21:02:30.45
>>395
これも読もう

ユニットテスト - Dive Into Python 3 日本語版:
URLリンク(diveintopython3-ja.rdy.jp)

400:デフォルトの名無しさん
12/02/03 21:22:29.16
関数の定義の仕方によってはそうでない使い方も出来ますが、
デコレータは一般的にはクロージャみたいなものになるという解釈でいいでしょうか。

関数Aを関数Bで包んだ場合は、関数B内で定義した関数Cを返すようなので。

401:デフォルトの名無しさん
12/02/05 13:33:00.30
以下のように、先頭に整数文字列の値を使って

25, 大阪府
2, 青森県
1, 北海道
47, 沖縄県

以下のようにソートしたいと考えています。

1, 北海道
2, 青森県
25, 大阪府
47, 沖縄県

python でスマートにソートするにはどんな方法が考えられますかね。

402:デフォルトの名無しさん
12/02/05 13:51:03.67
>>> L = ["25, 大阪府", "2, 青森県", "1, 北海道", "47, 沖縄県"]
>>> L.sort(key=lambda e: int(e.split(',')[0].strip()))
>>> print '\n'.join(L)
1, 北海道
2, 青森県
25, 大阪府
47, 沖縄県


403:デフォルトの名無しさん
12/02/05 15:57:36.13
pythonの勉強をしようと思い
URLリンク(coreblog.org)
ここのみんなのPythonってのを呼んでサンプルを実行してるんですが

46ページの

ドキュメントルートのcgiserver.py↓
import SimpleHTTPServer
SimpleHTTPServer.test()

を実行して

cgi-bin/test.py↓
#!/usr/bin/env python
print "Content-type: text/html\n"
print "<html><body>Python is awesome !</body></html>"

にブラウザでアクセス(URLリンク(127.0.0.1:8000))しても
test.pyの中身が表示されるだけ(つまりファイルは見えている)でpythonとして動いてくれないです。

cygwinでやってるのですが、それが駄目とかってありますか?
OS:Windows7 pythonのバージョン2.6です。

cgiserver.pyを実行しているログには↓のようなものが出ます
$ python server.py
Serving HTTP on 0.0.0.0 port 8000 ...
********** - - [05/Feb/2012 15:52:51] "GET /cgi-bin/test.py HTTP/1.1" 200 -
********** - - [05/Feb/2012 15:52:51] code 404, message File not found
********** - - [05/Feb/2012 15:52:51] "GET /favicon.ico HTTP/1.1" 404 -

何か原因が分かりましたらお願いします

404:デフォルトの名無しさん
12/02/05 16:09:00.45
>>403
どこのページかくらい書けよ
SimpleHTTPServerじゃなくてCGIHTTPServer

405:403
12/02/05 16:15:21.51
>>404
動きました。ありがとうございます。
前のページのプログラムと同じと思い込んでいました。


一応ページは書いておいたつもりでしたが↓
URLリンク(coreblog.org)
ここのみんなのPythonってのを呼んでサンプルを実行してるんですが

46ページの


406:デフォルトの名無しさん
12/02/05 16:39:17.45
ローカル環境(ampps)でDjangoのお勉強したいんですがインストールの仕方がわかりません、誰かAMPPS使ってる方いませんか?

407:デフォルトの名無しさん
12/02/05 16:51:40.89
>>401
L = ['25, 大阪府', '2, 青森県', '1, 北海道', '47, 沖縄県']
L.sort()

408:デフォルトの名無しさん
12/02/05 17:29:19.42
>>401
import sys
print '\n'.join([','.join(r) for r in sorted([s.split(',') for s in sys.stdin.read().splitlines()], key=lambda x: int(x[0]))])


409:デフォルトの名無しさん
12/02/05 17:45:20.26
repr(), str()って何が違うんでしょうか?
str()だけあればいいと思いますが。

410:デフォルトの名無しさん
12/02/05 18:15:08.39
>>409
URLリンク(www.python.jp)

str() 関数は、値を表現するときに人間にとって読みやすい形式の文字列を返します。
一方、 repr() は、インタプリタが読めるような (あるいは、等価な値を表現するための
構文がない場合には SyntaxError を送出させる) 表現にするためのものです。
人間が利用するための特別な表現をもたないオブジェクトでは、 str() は repr() と
同じ値を返します。数値や、リストや辞書などの構造体のような多くの値は、どちらの
関数でも同じ表現になります。文字列と浮動小数点は特別で、二つの別個の表現と
なります。

411:デフォルトの名無しさん
12/02/05 18:57:56.35
>>409
かなりぶっちゃけた言い方をすると
str()がユーザー向け、repr()がプログラマ向け
の文字列を得るために使う

412:デフォルトの名無しさん
12/02/05 18:59:02.60
理念的にはevalしたときに元通りになるのがrepr

413:デフォルトの名無しさん
12/02/05 19:41:49.36
>>412
おお、カッコいい

414:デフォルトの名無しさん
12/02/05 20:06:14.21
rep = repr(obj)
ev = eval(rep)
obj == ev

さあ、結果や如何に!

415:デフォルトの名無しさん
12/02/05 20:08:19.37
>>> obj = 'abc'
>>> rep = repr(obj)
>>> ev = eval(rep)
>>> obj == ev
True
>>> id(obj)
3075397632
>>> id(ev)
3075397632

416:デフォルトの名無しさん
12/02/05 20:15:41.41
>>> import datetime
>>> obj = datetime.datetime.now()
>>> rep = repr(obj)
>>> ev = eval(rep)
>>> obj == ev
True

417:デフォルトの名無しさん
12/02/05 20:22:26.30
repr(float('inf')) がおかしいって誰が言ってた

418:392
12/02/06 06:54:34.43
どなたか分かる方はいらっしゃらないでしょうか?

419:デフォルトの名無しさん
12/02/06 07:21:08.82
c0 = tk.Canvas(...)
c0.lower()

420:デフォルトの名無しさん
12/02/06 11:01:51.32
>>417
言ったのは多分以前の自分。
nanもダメ。

421:デフォルトの名無しさん
12/02/06 11:33:24.13
理念的って書いてあるじゃない

422:デフォルトの名無しさん
12/02/06 13:56:47.83
'float("inf")'を返せばいいんじゃね

423:デフォルトの名無しさん
12/02/06 14:17:54.28
そりゃ観念的だね

424:デフォルトの名無しさん
12/02/06 14:58:32.30
>>419
下のようにしたのですがダメでした。
何が悪いのでしょうか?

from Tkinter import *
root = Tk()
c0 = Canvas(root, bg = 'white')
c1 = Canvas(root, bg = 'green')
c0.pack()
c1.pack(in_ = c0)
c1.lower()
root.mainloop()

425:デフォルトの名無しさん
12/02/06 15:39:43.14
お昼ごはんに理念のわかめスープ飲んだ

>>424
from Tk import *
Misc.lower(c1)

Tkinter.pyのソースコードにそれっぽいことが書いてあるから
参照したらいいかも

426:デフォルトの名無しさん
12/02/06 15:40:29.24
あ、まちがえた。from Tkinter import *

427:デフォルトの名無しさん
12/02/06 18:15:59.48
>>425
お陰様で無事動きました。
ありがとうございました!

Tcl/Tkの経験があればTkinterも何となくわかるかと思っていたのですが、
かえって違いに戸惑ってしまってます。
そのうち慣れるでしょうけど、それまでは苦労しそうです。

428:デフォルトの名無しさん
12/02/06 22:32:31.34
海外のアルゴリズムを教える題材にPythonを使うのが多いらしいのですがそういうサイトはあるのでしょうか
C言語のアルゴリズムの本読んでるんすけど難しいです

429:デフォルトの名無しさん
12/02/06 22:48:52.35
海外と国内のとひとつずつ
URLリンク(greenteapress.com)
URLリンク(www.geocities.jp)

430:デフォルトの名無しさん
12/02/06 23:33:39.52
>>429
さっそくありがとうございます。
地道にやっていこうと思います。

431:デフォルトの名無しさん
12/02/07 07:24:23.27
MacでPythonをやるにはどういった開発環境が良いでしょうか?
Ankiというソフトウェアをビルドしようとしています

432:デフォルトの名無しさん
12/02/07 07:52:26.26
Mac ならシステムに最初から Python がはいってるから、そのままで OK だけ
ど、特定のバージョンが必要とかの場合は MacPorts から入れるのが簡単。
PyQt4 とか Beautiful Soup とかが必要のようだけど、MacPorts だとそれもま
とめてインストールできる。



433:デフォルトの名無しさん
12/02/07 19:37:57.86
>>432
有難うございます
難しいですが少しずつ理解して行きたいです

434:デフォルトの名無しさん
12/02/07 23:54:45.89
外部サイトのRSSから自動でスクレイピングして画像やテキストの一部を自分のサイトの指定の場所に表示したいんですが、どういう手順でやればよろしいのでしょうか

ちなみについさっきローカルでDjangoインスコしたばかりのド素人です(^q^)
はじめてのLL言語れす(*^o^*)
教えておにーちゃん!

435:デフォルトの名無しさん
12/02/08 00:12:10.51
そーいうの不愉快だから止めた方がいいよ

436:デフォルトの名無しさん
12/02/08 00:36:14.79
>>434
同じようなの作ってるけどbeautifulsoupとmechanizeでやってみてるよ

437:デフォルトの名無しさん
12/02/08 00:42:32.20
>>435
すいませんでした。反省します。

>>436
そしてありがとうございますおにーちゃん

438:デフォルトの名無しさん
12/02/08 20:50:57.39
>>> [[10]]
[[10]]
>>> ((10))
10
なにこの違い
困るんですけどw

439:デフォルトの名無しさん
12/02/08 20:52:47.49
釣り針でかすぎるけど、困る例を一つでも挙げれたら100万円やる

440:デフォルトの名無しさん
12/02/08 20:56:39.37
リストのリストから最大値&最小値を見つける関数があってですな
439のタプルのケースを食わせるとあきまへんねん

441:デフォルトの名無しさん
12/02/08 20:59:13.44
>>> ((10,),)
((10,),)

442:デフォルトの名無しさん
12/02/08 20:59:56.96
((10,),)

443:デフォルトの名無しさん
12/02/08 21:03:53.06
>>440
URLリンク(www.python.jp)

444:デフォルトの名無しさん
12/02/08 21:05:31.30
だよな、最初438がタプルを使おうとしてるとは思わなくて何がしたいのか理解不能だった

445:デフォルトの名無しさん
12/02/09 01:17:52.17
((10,),)

446:デフォルトの名無しさん
12/02/09 15:50:27.48
((((;゚Д゚))))

447:デフォルトの名無しさん
12/02/09 16:58:22.47
数字が1桁から2ケタへと移行する場合のsortがうまくいきません。
どうしたら直りますか

#1~2ケタの数字の場合
list=["apple2","apple10","apple11","apple1","apple4","apple5","apple6","apple3","apple15","apple7","apple8","apple12","apple13","apple9","apple14"]
list.sort()
print list

>result
>['apple1', 'apple10', 'apple11', 'apple12', 'apple13', 'apple14', 'apple15', 'apple2', 'apple3', 'apple4', 'apple5', 'apple6', 'apple7', 'apple8', 'apple9']

#1桁の数字のみの場合
list=["apple2","apple1","apple4","apple5","apple6","apple3","apple7","apple8","apple9"]
list.sort()
print list

>result
>['apple1', 'apple2', 'apple3', 'apple4', 'apple5', 'apple6', 'apple7', 'apple8', 'apple9']

#数字を全て2ケタにした場合
list=["apple02","apple10","apple11","apple01","apple04","apple05","apple06","apple03","apple15","apple07","apple08","apple12","apple13","apple09","apple14"]
list.sort()
print list

>result
>['apple01', 'apple02', 'apple03', 'apple04', 'apple05', 'apple06', 'apple07', 'apple08', 'apple09', 'apple10', 'apple11', 'apple12', 'apple13', 'apple14', 'apple15']



448:デフォルトの名無しさん
12/02/09 17:03:07.72
>>447
「python 自然順ソート」でググれ

449:デフォルトの名無しさん
12/02/09 17:07:27.02
>>447
L.sort(key=lambda x: int(x[5:]))

x[5:]が手抜きっぽくて嫌なら

import re
L.sort(key=int(re.match(r'apple(\d+)', x).groups(1)))

"apple01"を作るときに"apple%02d" % numとかでゼロパディングするのもいい

450:449
12/02/09 17:11:24.29
あれなんか二番目がおかしい。ごめん
L.sort(key=lambda x: int(re.match(r'apple(\d+)', x).groups(1)))

451:デフォルトの名無しさん
12/02/09 19:16:07.76
apple限定かい!

PHP の natsort って、おもしろいけど本当に役に立つのかねえ。
1.05 と 1.5 はバージョン番号なら同一視してほしいけど、
ふつうの小数では別に扱ってほしいし。




452:デフォルトの名無しさん
12/02/09 20:51:57.58
>>448
ググってみます。
>>451
apple限定じゃないほうが良いです。。

453:デフォルトの名無しさん
12/02/09 23:19:07.74
>>452
import re
L.sort(key=int(re.match(r'[^\d]*(\d+)', x).groups(1)))

454:デフォルトの名無しさん
12/02/09 23:31:12.60
re.search(r'\d+\Z', ...)

455:デフォルトの名無しさん
12/02/10 01:13:25.90
>>454
iPhoneでみるとなんかモザイクみたいだ

456:デフォルトの名無しさん
12/02/11 12:14:21.84
test={
'a':{'j':'1'},
'b':{'i':'2'},
'c':{'k':'3'},
}
を数字の箇所の値で降順にソートしたいのです。
つまり
c k 3
b i 2
a j 1
と表示されるようにしたいのですが、
どのようにすればいいのでしょうか?


457:デフォルトの名無しさん
12/02/11 13:03:48.26
>>456
sorted(test.items(), key=lambda item: item[1].items()[0][1], reverse=True)

458:デフォルトの名無しさん
12/02/11 13:16:58.83
>>457
はやっ!
   。 。
  / / ポーン!
( Д )
辞書の辞書(辞書の入れ子)のsortってこうするんですね。
うまくいきました。ホントに助かりましたm(_ _)m


459:デフォルトの名無しさん
12/02/12 00:35:41.47
python3だと、items()はリストじゃなくてビューオブジェクトを返すから、items()[0]ができないけどね。

460:デフォルトの名無しさん
12/02/13 02:10:48.93
IDLEは起動しないわ
TkinterはDLLロードエラー出るわ
糞だな

461:デフォルトの名無しさん
12/02/13 02:41:49.89
>>460
これ入れたら直る
URLリンク(www.microsoft.com)

462:デフォルトの名無しさん
12/02/13 03:21:26.47
えすぱぁ

463:デフォルトの名無しさん
12/02/13 16:26:12.19
Python3.2.2でvirtualenvで環境を作ろうとするとエラーになります。
Python3.2.2をインストールした後、distributeをインストール、easy_installでpipをインストール
pipでvirtualenvをインストールして、エラーらしいエラーは出ないで終わりましたが、
virtualenvで環境を作ろうとするとエラーになります。
環境はwin7で、virtualenvを引数無しで実行するとヘルプメッセージが表示されるので、インストールは成功しているみたいです。
どなたか解決策をご存じの方はいらっしゃいませんでしょうか?

E:\Data\Python>python -m virtualenv main
New python executable in main\Scripts\python.exe
Fatal Python error: Py_Initialize: unable to load the file system codec
LookupError: no codec search functions registered: can't find encoding

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
ERROR: The executable main\Scripts\python.exe is not functioning
ERROR: It thinks sys.prefix is 'e:\\data\\python' (should be 'e:\\data\\python\\
main')
ERROR: virtualenv is not compatible with this system or executable
Note: some Windows users have reported this error when they installed Python for
"Only this user". The problem may be resolvable if you install Python "For all
users". (See URLリンク(bugs.launchpad.net))



次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch