>1 乙
辞書型で、値の最大値のキー値を求めたいのですが、スマートなやり方ないですか?
d = {0:1,1:2,2:3,4:5,6:7}
list(d.keys())[ list(d.values()).index(max(d.values())) ]
6
もっとスマートな方法ないですか?
Python3.1です
>>> from operator import itemgetter
>>> max(d.items(), key=itemgetter(1))
(6, 7)
>>> max(d.items(), key=itemgetter(1))[0]
6
超初心者的には遅そうで心配
max(d.items(),key=lambda x:x[1])[0]
ってのでも出来るんですね
出来れば処理速度が早いのがいいです
Cythonでコンパイルして利用します
type()で返ってくる<type 'type'>の解釈を教えてください。
>>2 勝手に2.X推奨すんなボケ。
男なら迷わず3.Xだろ。
女子供はひっこんでろ。
さくらのサーバが2、6じゃん
2.Xマンセー
漢なら仮想鯖借りて、自分でOSからいれろ。
3.3のα以前版でも入れ放題だぞ!
超初心者用が復活した途端に質問者のレベルが跳ねあがったのは気のせいか
そしてお勉強スレのレベルがますます下がるのはいつものこと
いちょつ
超低レベルってsocket.*とかの話?
こんなに需要があるとは思わなかった()
もっと早くたてとけばよかった()
>>16 質問者のPythonレベルが低いってことだろjk
Pythonで書く利点を最大限に活かすために
まず最初に覚えるべきことって何ですか?
import this
もっと役に立つモジュールおしえてよ
import __hello__
insert 006P
_winreg
風のうさぎちゃん
class Foo(object):
のobjectって何者ですか
一体何を継承しているんですか
継承ツリーの頂点に位置するのがobjectクラス
__str__みたいにオブジェクトなら誰でも持ってるメソッドが定義してある
dir(object())して出てくるのがたぶんそれ
クラスってインスタンスを継承することも出来るんですか
class Foo():
foo = Foo
class Fooo(foo)みたいな
何の意味があるんですか
結局同じオブジェクトを参照してるだけじゃないの?
stringモジュールにascii_lowercaseなんてものがあるとは知らなかった
今までaからzを手打ちしてて文字が抜けたことが何度も・・・
ascii_lowercase知らなかったことは、別に問題ないけど、
>今までaからzを手打ちしてて
そこで車輪を発明しようと考えるのは、ちょっと反省したほうがいいぞ・・・
この世にはコピペという便利なものがあってだな
>>32 string.base64 はさすがにないな
こっちのスレのほうが建設的になるのはいつものこと。
デストラクタをわざわざ呼び出すことが少ないからね
CUDAスレPython(超初心者用)
かと思った。
Pythonのソースコードを見ていると
class Foo1():
...def __init__(self)
class Foo2(Foo):
...def __init__(self)
......Foo1.__init__(self)
こんな感じで、派生先のクラス内の初期メソッドで
継承元のクラスの初期メソッドを実行してるのをよく見かけるんですが
これってどういうことなんでしょうか。
そもそも初期化ってどんな場合に必要あるんでしょうか。
あと、pythonのソースで、classのの名前の例がFooになってることが多いと思うんですが
このFooってのは何かの略なんでしょうか?
41 :
40:2011/11/26(土) 01:29:37.06
class Foo1():
...def __init__(self)
class Foo2(Foo1):
...def __init__(self)
......Foo1.__init__(self)
まちがえた、こうです
pass
class Foo1(object):
def __init__(self, hoge):
return hoge
class Foo2(Foo1):
def __init__(self, fuga):
return super(Foo2, self).__init__(fuga)
まちがえた、こうです
>>43 super使ってもどうせ自クラスの名前は入力しないといけないようだけど、それ使う利点ってあるの?
>>44 TypeError: __init__() should return None, not 'int'
>>47 super(self.__class__, self).__init__(*args, **kw)
いけるみたいです
>>> class Foo1(object):
... def __init__(self):
... pass
... def whoami(self):
... print self.__class__
...
>>> class Foo2(Foo1):
... def __init__(self):
... super(self.__class__, self).__init__()
...
>>> f1 = Foo1()
>>> f2 = Foo2()
>>> f1.whoami()
<class '__main__.Foo1'>
>>> f2.whoami()
<class '__main__.Foo2'>
>>> class Foo1(object):
... def __init__(self):
... pass
... def whoami(self):
... print self.__class__
... def whoismyparent(self):
... super(self.__class__, self).whoami()
...
>>> class Foo2(Foo1):
... def __init__(self):
... super(self.__class__, self).__init__()
...
>>> f1 = Foo1()
>>> f2 = Foo2()
>>> f1.whoami()
<class '__main__.Foo1'>
>>> f2.whoami()
<class '__main__.Foo2'>
>>> f1.whoismyparent()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 7, in whoismyparent
AttributeError: 'super' object has no attribute 'whoami'
>>> f2.whoismyparent()
<class '__main__.Foo2'>
>>> class Foo1(object):
... def __init__(self):
... pass
... def whoami(self):
... print self.__class__
... def whoismyparent(self):
... print super(self.__class__, self).__class__
...
>>> class Foo2(Foo1):
... def __init__(self):
... super(self.__class__, self).__init__()
...
>>> f1 = Foo1()
>>> f2 = Foo2()
>>> f1.whoami()
<class '__main__.Foo1'>
>>> f2.whoami()
<class '__main__.Foo2'>
>>> f1.whoismyparent()
<type 'super'>
>>> f2.whoismyparent()
<type 'super'>
>>39 >>29 はクラスの実体ではなくクラスを直接fooと結びつけてるね
だからfooはFooのインスタンスでなくFooそのものじゃね
53 :
47:2011/11/26(土) 16:13:49.71
>>48 よく考えたら、
super(self.__class__, self).__init__(*args, **kw)
とやってるクラスを継承したら無限ループに陥るので駄目だわ。
ごめん。
super使ってもどうせ自クラスの名前は入力しないといけないようだけど、それ使う利点ってあるの?
python で suコマンドを実行して、パスワードを入力したいのですが、
どこかに見本は無いでしょうか。
シェルスクリプトスレに居た人だ
subprocess.call('su hoge')
58 :
デフォルトの名無しさん:2011/11/27(日) 09:23:00.28
◇ ミ ◇
◇◇ / ̄| ◇◇
◇◇ \ |__| ◇◇
彡 O(,,゚Д゚) /
( P `O
/彡#_|ミ\
</」_|凵_ゝ
【ラッキーAA】
このAAを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください
そうすれば14日後好きな人から告白されるわ宝くじは当たるわ
出世しまくるわ体の悪い所全部治るわでえらい事です
どういう原理で?
Windows7でpython 2.5使ってます
ドキュメントに書かれてるのと結果が違います
import os
print os.name
-> nt
import platform
print platform.system()
-> Microsoft
どうしたら Windows って出てくるの?
>>54 多重継承を使わない場合は
従来の方法でおk
$ python
Python 2.7.2 (default, Oct 25 2011, 04:17:25)
[GCC 4.5.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print os.name
posix
>>> import platform
>>> print platform.system()
Linux
>>>
$ python
Python 2.6.6 (r266:84292, Sep 2 2010, 19:26:16)
[GCC 3.3.6] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print os.name
posix
>>> import platform
>>> print platform.system()
Linux
>>>
$ python
Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01)
[GCC 4.3.4 20090804 (release) 1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'CYGWIN_NT-6.1-WOW64'
>>>
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import os
>>> print os.name
nt
>>> import platform
>>> platform.system()
'Windows'
>>>
IronPython 2.7.1 (2.7.0.40) on .NET 4.0.30319.239
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print os.name
nt
>>> import platform
>>> platform.system()
'cli'
>>>
質問です。
以下のスクリプトを実行してリストから拡張子がmp3のファイルのみ削除したいのですが、実行結果に'test1.mp3'が残ってしまいます。分かる方がいたら教えてください。
環境はWindows xp sp3, python ver 2.7.1 です。
l = ['test0.mp3', 'test1.mp3', 'test2.mp3', 'test3.wma']
for i in l:
if i.endswith(".mp3"):
l.remove(i)
print l
>>>['test1.mp3', 'test3.wma']
l = [i for i in l if not i.endswith('mp3')]
>>68、
>>69、
>>70 さん有難うございます。
期待どおりの結果が得られるようになりました。
一応、上手くいった方のスクリプトも書いておきます。
l = ['test0.mp3', 'test1.mp3', 'test2.mp3', 'test3.wma']
for i in l[:]:
if i.endswith(".mp3"):
l.remove(i)
print l
>>>['test3.wma']
>>> a = (1,2,3)
>>> b = a
>>> a += (4,5,6)
>>> a
(1, 2, 3, 4, 5, 6)
>>> b
(1, 2, 3)
>>> a = [1,2,3]
>>> b = a
>>> a += [4,5,6]
>>> a
[1, 2, 3, 4, 5, 6]
>>> b
[1, 2, 3, 4, 5, 6]
そんなもんなのね・・・
>>> a += (4,5,6)
これって禁止されてないのか
内部的には、まず元オブジェクトを書き換える __iadd__() の実行を試してみて、
それができなければ __add__() 呼んでオブジェクト差し替えしてるみたいです。
list には__iadd__() もあるが、tupleには __add__() しかない。
まぁ、自分でクラス作るときは、__ixxx__() シリーズを作るべきか否か
気をつけましょう、ってことで。
75 :
40:2011/12/02(金) 00:11:31.16
モジュールをimportをするっていうのは
いわゆるPythonが提供しているクラスを読み込んでくるってことですよね?
import random
random.uniform(2,10)
みたいにクラス.メソッド(引数)って感じで呼び出すのが普通なのかと思っていたら
Pythonって
class test():
...def testMethod(self):
......print "test"
っていうクラスとメソッドがあった場合
この状態で直接クラス.関数名(引数)[test.testMethod'()]って呼び出すとエラーが出るじゃないですか
まずt=test()って言う風にインスタンスを作って
その後t,testMethod()って形で呼び出す形式なのが普通なんですかね?
モジュールとかを読み込んだ後に、クラス.関数名(引数)で呼び出せているのは
モジュールの内部で
class test():
...@classmethod
...def testMethod(self):
......print "test"
っていう風に、内部でクラスメソッドとして定義されているからってことですか?
何でこんな風に内部メソッドの呼び出し方が分かれているんでしょうか
インスタンスを作ると必ず初期メソッドが実行されてしまうから
それを避けるために@classmethodがあるということでしょうか?
インスタンスを作るっていうのは、初期メソッドと一緒に、クラスの内部を使いたいという
両方の条件が揃ってる時だけって解釈でいいんでしょうか?
>>75 誤字が多くて何言ってるのかわからん。
JavaScript風のオブジェクト指向しかやったことがないなら
一回Javaの薄い本でも読んでみたら?
importで読み込むのはモジュールであってクラスじゃない
Javaの薄い本…ゴクリ
>>75 んーと、色んなことを混同し過ぎだよ
モジュール名の後の .
クラス名の後の .
インスタンス(つまりクラスから生成されたオブジェクト)の後の .
それぞれを一度、分けて考えてみて
馬鹿には無理
空中に基礎は打てない
>>> class Test(object):
... def __call__(self):
... print 'hoge'
...
>>> Test()()
hoge
なんだこりゃ
85 :
40:2011/12/03(土) 20:57:30.17
基礎ってどうやってみにつければいいの
C++とか覚えればいいの
公式チュートリアルを読む
馬鹿には無理
pythonで基礎は学べるはずだけど
おすすめの入門本はありますか?
2chのスレから画像だけをダウンロードさせるスクリプトを書きたいんですが、
以下でできません。どうすればいいんでしょうか
import urllib
urllib.urlretrieve( '
http://hibari.2ch.net/', '保存先ディレクトリ')
>>92 なんでそれでダウンロードできると思ったか知りたい。
reを使ってjpgとかを抜き出したら
短縮URLは知らん。
馬鹿には無理
普通はdatからだな
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
| i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
_,,,......,,__
/_~ ,,...:::_::;; ~"'ヽ
(,, '"ヾヽ i|i //^''ヽ,,)
^ :'⌒i i⌒"
|( ´∀`) < きのこ のこーのこ げんきのこ ♪
|(ノ |つ
| |
⊂ _ ノ
""U
_,,,......,,__
/_~ ,,...:::_::;; ~"'ヽ
(,, '"ヾヽ i|i //^''ヽ,,)
^ :'⌒i i⌒"
(´∀` )| < エリンギ まいたけ ブナシメジ ♪
⊂| (ノ |
| |
ヽ _ ⊃
.U""
|
| ミ
| ミ サッ!
| ミ
|
まともな回答者がいない
ならば、君がその一人になりたまえ
足し算もできない人が簡単な微積の問題持ってきて解き方教えてと言ってるようなもの
解答(ソース)まで出してる人がいるのにまともじゃないとか失礼だよ
>100 はツンデレ
pythonを覚えると仕事つける?
26男
IT未経験
別に
106 :
デフォルトの名無しさん:2011/12/06(火) 22:03:45.82
超初心者です。
samplenode.txtにかかれたノードを1行ごとに読み込んで、読み込んだノードをlineに代入し、
コマンドのtracerouteをかけて、表示したいのですがうまくいきません。下記のようなものを書いてみました。
よろしくおねがいしよろしくお願いします。
f = open('samplenode.txt')
lines2 = f.readlines()
f.close()
import commands
for line in lines2:
print commands.getoutput('traceroute '+line)
>>106 多分、コマンドの文字列に改行文字が含まれてるからだと思うけど、
どういう風にうまくいかないのかを報告しよう。(エラーが出る、何も表示されない、期待通りの表示がされない、etc)
まずは、line変数の内容を表示してみて。
print line だと見落とすかもしれないので、print repr(line)
改行文字が入ってるので取り除く。 print commands.getoutput('traceroute ' + line.strip())
慣れないうちは、関数の引数のところには式は書かず、一ステップずつ変数にいれていくといいよ。
printデバッグでは改行文字とか見落とす事があるので、インタラクティブ・シェルを活用しよう。
>>> cmd = "traceroute " + line.strip()
>>> cmd
'tracerout x.x.x.x\n'
>>> status,result = commands.getoutput(cmd)
(1, '')
108 :
デフォルトの名無しさん:2011/12/06(火) 22:35:03.62
106です。すいません。次からは報告します。
うまくいきました。改行文字が入っていたことが原因でした。
丁寧な説明、どうもありがとうございました。
windowsXP、2.7.2です。
状況: 関数Bと関数Cは、関数Aからしか呼び出されません。
関数Bと関数Cを関数Aにネストさている場合とさせていない場合に、
挙動の違いはあるのでしょうか?
この状況では、どちらが一般的な記述方法なのでしょうか?
この状況下でのネスト・非ネストのメリット・デメリットを教えてください。
また、使い分けのセオリーなどはあるのでしょうか。
上記のご回答、宜しくお願いいたします。
pass
用語は正しく使わないと伝わらないんじゃね
>>109 基本はネストさせないで書く(Zen of Python より ネストさせなくていいならしない方がいい)
内部的には、ローカル・グローバルになる等の違いはあるけど、
ネストさせるかどうかの判断基準にするようなことではない。
それよりも、「非公開関数はネストにする」といったルールを運用すると、
「関数 B は A と D からのみ呼び出す」といった場合に、困ることになります。
## 内部関数が便利なのは、
* 引数があまりにも多くなる場合に、スコープ内の引数を省略できる。(クロージャ)
* 関数に渡されたパラメータを元に、関数を動的に生成する場合等。(e.g. デコレータ定義)
## 欠点は、とりあえず思いつく限りでは・・・
* (慣れてない人にとって)コードが読みにくくなる事。デバッグが多少面倒になる。
* インデントが深くなる。
* 再利用しにくい。
* ドキュメント・ツールで自動で文書化出来ない。(※ デコレータ定義用途では、functools.wrapsを使えば可)
* 関数の単体テストが出来ない。
> 状況: 関数Bと関数Cは、関数Aからしか呼び出されません。
こういった状況でネストする場合、大抵はクラスで置き換え可能なので、クラス A のメソッド _B, _C というようにする。
クラスにしない場合では、ネストさせずに 関数 A, _B, _C とします。( '_' プレフィクス付の命名で、内部関数と表明する。命名規則について
>>2を読もう)
113 :
デフォルトの名無しさん:2011/12/07(水) 15:17:31.93
ある本に書いてあったのですが、
from math import sqrt
psqrt(pow(4.5-4.2,2)+pow(1-1,2))
のようにすると、
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'psqrt' is not defined
のようなエラーが出ます
これはどのようにすればいいのでしょうか?
Python2.6.6です
114 :
デフォルトの名無しさん:2011/12/07(水) 15:21:46.00
今もう一度やってみて分かったのですが、
これはこの本の誤植のようですね
膨大な誤植の嵐のあるこの本のせいだと分かりました
この件は正誤表にもまだ書かれていないようですが
ご迷惑おかけしました
日記はチラウラで
本はあまりオススメできないWebで勉強しろって
>>1に書いてもいいかもしれんね
嘘書いてあったり
内容が古くなってたり
おまけに日本語についての考慮がない本とか
なんでお薦めになってるのか理解不能なのもある
>>114 この程度の誤植なら修正する必要ないと思ったんじゃないか。
前行で import sqrt してるわけだし。
math.pow()は別のところでimportしてるんだろか
Pythonなら普通 ** 演算子で済ませると思うし
それを言うなら、二乗の和の平方根(ユークリッド距離)計算したいんなら単に
math.hyport(4.5-4.2, 1-1)
でいいわな
なんつうか、いろいろ解せない「本」ではあるな
ごめんtypoった
math.hypot(4.5-4.2, 1-1)
の間違い
122 :
109:2011/12/07(水) 19:00:16.28
>>112 クラスは、未だ単純な構造体代わり(関連する変数の集合体)にしか
使った事がないので、関数でネストさせずに_付き命名の方向にします。
丁寧な回答、ありがとうございました。
powは組み込み関数版がある
>>123 あ、そーか
どうせ**演算子で使うから組み込みになってるのかな
126 :
デフォルトの名無しさん:2011/12/08(木) 00:53:43.92
>>116 「集合知プログラミング」だね。誤植がとにかく多い。
127 :
デフォルトの名無しさん:2011/12/08(木) 22:26:17.10
Python3は2との互換性が無いとの記事を読みました
自分はPythonに関しては今触り始めたばかりで、使っているのはcentOS6に入っている2.6.6なのですが
Python3は今どうなのでしょうか?
まだ3.2なので、Python2系の方が安定性とか考えるとやはりいいのでしょうか?
それとも、まだPython初学者であるので最初から3に行った方がいいでしょうか?
個人的にはPHPにしろMySQLにせよ新しいバージョンをと思っているのですが、
まだバージョンが3.2と浅いということと、後方互換性がないという致命的なものがあるので
どうなのかなと思いまして
処理速度とか、今あるライブラリ、フレームワークなどが後方互換性のなさから使えないとかあれば困る
とかあればアドバイスを頂きたいのですが
129 :
デフォルトの名無しさん:2011/12/08(木) 23:58:03.10
リンクありがとうございます
どうやら英文によるとライブラリなどの適応はPython3はまだ問題ありということらしいですね
皆さんは、やっぱ2系を使っているのでしょうか?
>安定性は3つ目の数字っすよ
というのは、3,2,2の最後の部分の事を言っているのでしょうか?
それとも、リンク先に何か数字があったのでしょうか?
古い仕様を「先に」覚える必要はない
2で何の問題もないけど、3にはどんなメリットがあるの
2.xについては
2.4以前なら致命的だけど
2.5以降なら何使っても問題ないよ
3.xについては
>今あるライブラリ、フレームワークなどが後方互換性のなさから使えないとかあれば困る
とかあるよ
>>130 新しい仕様が「普及しない」かもしれないのに?
Python は Perl とは違うのだよ Perl とか Ruby とか
結局皆Python2.X使ってるの?
py3kが普及しないと思ってる奴なんてほとんどいないはず
今は代表的なライブラリの対応待ちとお前移行しろよいやお前からやれよって牽制し合ってる状態
まあ西暦3000年ごろには普及するとは思うが。
140 :
デフォルトの名無しさん:2011/12/09(金) 16:36:48.75
djangoもzopeも全然Python3に移行できてない事実を考えれば、おのずと答えはわかる。
Python3は黒歴史になるのかな・・・・・
143 :
デフォルトの名無しさん:2011/12/10(土) 02:19:20.45
linux環境で端末を開いたとき、[xxx@yyy]$のようにPCによって異なる表示がされると思いますが、
このxxx@yyyの部分をファイル名にコピーする(
[email protected]など)ようなアルゴリズムを書きたいのですが、
全く検討もつきません。PCごとにxxx@yyyの部分が変わるようにしたいです。
考えていただけませんでしょうか?よろしくお願いします。
from subprocess import Popen, PIPE
def bq(argv): return Popen(argv, stdout=PIPE).communicate()[0]
'%s@%s' % (bq(['whoami'].rstrip(), bq(['hostname'].rstrip())
せっかく書いたので貼ったけどもっとまともな回答が付くと思う
145 :
デフォルトの名無しさん:2011/12/10(土) 03:10:00.91
HOSTNAMEとか環境変数が設定されてる環境なら
import os
filename = "%s@%s.txt" % (os.environ['USER'], os.environ['HOSTNAME'])
D:\work>python --version
Python 2.7.2
Python '75
username = os.getlogin()
hostname = socket.gethostname()
argparseとか、configparserとか
何でparse[r]にrがついたり、つかなかったりするん。
打つときいつも迷う
152 :
デフォルトの名無しさん:2011/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の記述法はどこからそれらが導かれているのか理解ができませんでした
>>152 [ random.random(), random.random() ]を三回繰り返してるだけ
154 :
デフォルトの名無しさん:2011/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回だけ実行されるのかが分かりません
http://python.g.hatena.ne.jp/muscovyduck/20080716/p1 このサイトなどで書かれているのもやはり、x,y等の対応する変数が存在するので挙動は分かるのですが、
locのようなものを解説しているサイトや本を見つけられませんでした
>>154 for ループの仕組みから理解できていないんじゃないか?
for i in [0, 1, 2] の場合、0, 1, 2を順番にiに代入していき、全て終わったらループが止まる
そのlocの例の場合はiが使われていないだけ
loc = [[ random.random(), i ] for i in range(3) ] とでもしてみれば分かりやすいかな?
156 :
デフォルトの名無しさん:2011/12/10(土) 19:33:13.00
>>155 あっ、ようやく分かりました
ありがとうございました
python setup.py buildとpython setup.py installはどう違うのですか?
webで検索していると、ライブラリによってはインストール時にbuildの場合とinstallの場合があるようですが
WindowsでPythonをbatファイルの替わりに使いたいんだけど、
batでdosコマンドを実行したときのように
実行経過を表示することはできるのでしょうか?
?
[r["text] for result in search_results for r in result["results"]]
というコードがあるのですが左から順にfor文の内容が実行されていってるようなのですが
リスト内包表記では右から実行される訳ではないんでしょうか?
簡単な例で試すといいよ
>>> [(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)]
左からで正しいよ
[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する式が先頭かケツかの違いだけで、普通のループと同じ読み方ができる
>>161-162 回答ありがとうございます。
どうやら重大な勘違いをしていたようで助かりました。
>>157 ビルドは環境を構成するだけ (buildディレクトリ)
コンパイルしたりするのはここ。
インストールはsite-packages等へビルドされた環境をコピー
この時ビルドがまだならビルドする。
インストール以外にも配布用のパッケージを作成したりインストーラを生成したりもできる。
以下のソースを作成し、
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'
なんでだ・・・
csv.pyの名前を変える
print csv.__file__
をやってみる。
>>166 fileじゃなくてopen?
×
reader = csv.reader(file("some.csv", "rb"))
○
reader = csv.reader(open("some.csv", "rb"))
csv弄る用事があるのを思い出したw
いろいろセンスのなさが目立つな
わざとやってるんじゃなかったのか。
>>170 openは内部的にfileを呼んでるだけだから、
その2つの例はまったく同じことをやっているだけ。
csv.pyc が残ってる可能性がある。(コンパイル済のキャッシュ)
2.xであれば、ファイル内に日本語含む場合は、csv内の文字コードが・・・
なんて場合に備えて codecs.open がいいかもしれない。
なんで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では意味のない行やん。なんで教えてくれなかったんだ
もしかしたらで違ってるかもしれないけど、質問しなかったからじゃないか
質問はしなかった(´・ω・`)
C習う時に#include<stdio.h>は「おまじない」と言われるみたいになんとなく受け入れてた
くそう。import numpy;(len("python ")-len("./"))*numpy.inf分のタイプ数をロスしたわぁ
構文ハイライト等のコード判別でshebang読むのとかあるから、書いて損はないよ。
自分にとっても、後々、別の処理系・言語をやる場合に、
似たような構文の他の言語と読み間違えるのを防げる。
>タイプ数をロスしたわぁ
……。
タイプ数を節約したいということなら、雛形使って書き始めると良い
dabbrev
python - ./ ってことは実行時のタイプ数?shebangがないとカレントのファイル直接実行できないけど
python に警告制御等のオプション付きで実行する事があるかもしれないから。
パスの通った場所に置くならともかく、デバッグ時なら実行権限与えたりしない。
複数 python 入ってると shebangで指定される python がどれかわからなくなるかもしれないので
実行する時わざわざ $ python ... で実行するメリットもある。
何度も繰り返し実行するというならシェルの履歴使う。最短なケースでは僅か2タイプで済む。
shebangは書く python foo.py で実行で全然問題ないよ。
タイプ数は、エディタ(雛形挿入)やシェル(履歴)を使いこなせば節約できる。
日本語勉強しなおせ
日本語のshebangは何だろう
殻爆
井桁爆弾
#拝啓
190 :
デフォルトの名無しさん:2011/12/15(木) 23:43:28.80
PythonのFrameworkについて教えてください
Djangoとかあるのは知っているのですが、今現在一番使われているものや、個々の違いなどを教えて頂けませんでしょうか?
PHPの場合はCakePHPが一番人気で楽だけど実装が決まってしまう、ZendFrameworkは3番人気だけど、ガチガチにならず各コンポーネントがライブラリのように使えるとかです
宜しくお願いします
Djangoでいいお
個人的にはFWでも上記で書いたようなZednFrameworkのようなタイプが好きなのですが、
PythonのFWは結構ガチガチ(そのFWから抜けるようなものを実装しようとすると難しい、柔軟性が低い)な感じでしょうか?
本屋に行ってみたのですが、Python系の本は他からすると少ないですが、フレームワークは更に少なかったです
>>194 wsgi とか Wekrzeug とか でぐぐれ
馬鹿には無理
PythonとMySQLを連携させるにはいくつかライブラリ(モジュール)があるようですが、
どれが一番使われて、いいのでしょうか?
安定性、速度など(トレードオフあもしれませんが)を重視したいです
PythonはcentOSに入っている2.6です
TRAC導入時に以前、SQLite用にはpysqliteを入れてはいたのですが
PythonはSQLiteの情報の方が見つかりやすい気がします
>>203 ありがとうございます
しかしなんかややこしそうですね・・・
Djangoは普通にダウンロード出来ましたが
206 :
デフォルトの名無しさん:2011/12/22(木) 19:09:13.58
centOSでIDLEがないのでyum listで調べてみたら、出てきませんでした
何かpython-toolsがどうたらとか海外のサイトに書かれていました
じゃぁpython-toolsとは何ぞや、と思って検索するに、なぜかVisual Studioしか出来ません
centOSのリポジトリ内に存在するのは確認しました
centOSにてIDLEを使用するにはどのようにすればいいのでしょうか?
また、python-toolsとはどのようなものなのでしょうか?
IDLE使ってないの?
俺は使ってるけど
俺の使う理由は色、インデント、コピペだな
ターミナルからのpythonコマンドではIDLEに慣れると使いにくい
別にEmacsでもPyDevでもPyScripterでも
好きなのを使えばよろし
すいません、ローカルにあるCSVファイルを読み込んで、WEBブラウザに
表で表示できるシステムを作りたいのですが、Zopeなんかを使えば
良いんでしょうか。サンプルソースなんかれば場所を教えてもらえると助かります。
>>210 それくらいならZopeなんか使わんでも出来るだろ
>>212 超初心者なので・・・すいません。
いろいろと調べながら考えたのですが、csvファイルを読み込んで、それをprintで出力するような
スクリプトをつくれば良いということでしょうか。
WebサーバにCGIスクリプトとして実行させるのがお手軽だと思う
雛形はこんな感じ
import csv
# ...csvを読みこんでHTMLに整形
print "Content-Type: text/html;"
print
print html
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:2011/12/24(土) 11:34:32.41
最後で<html>閉じてない。
そこだけ修正しといて
import random
random.uniform()
みたいに、pythonってモジュール名を頭につけてコマンドを書かなきゃいけないじゃないですか?
何でこういう形式なんでしょうか
C++とかはincludeした後、そのまま関数を使えるのに
名前が衝突しないようにでしょう
from randam import uniform
from randam import *
というのもあるから調べるといいよ
>>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>')
>>217 >C++とかはincludeした後、そのまま関数を使えるのに
namespace を知らんのか
usingはおまじないか
めりくり
質問お願いします。
文字列の"test"をtuple("test")とすると
("t", "e", "s", "t")と分割されてしまい困っています。
これをタプル化したときに分割されないようには出来ないでしょうか?
できますん
("test",)
227 :
デフォルトの名無しさん:2011/12/28(水) 20:40:24.66
文字コードに対応する文字があるか判別する方法教えてください・・・。
0x41と 0x80 を区別したい。
デコードしてみて例外を捕まえる
助かります。
pythonからシェルコマンドを実行するには os.system などを使うそうですが、
これにpythonの変数を渡すにはどうやるんでしょうか?
たとえば
os.system("rm hoge.txt")
を
file="hoge.txt"
os.system("rm ", file)
みたいにできないでしょうか?
>>230 プログラミング自体、初心者なのかな?
os.systemに渡してるのはただの文字列だから、
そういう文字列を作っちゃえばOK。例えばこんな感じ。
file = "hoge.txt"
command = "rm " + file
os.system(command)
慣れてきたら
os.system("rm " + file)
とかでもいい。
win32comでExcelを扱うときの質問。
import win32com.client
xapp = win32com.client.Dispatch("Excel.Application")
として、Excelを使おうとするとき、すでにExcelが起動していると
そのプロセスを掴んでしまうようなんだけど、もうひとつExcelを
起動するようにするにはどうしたらいいんだろう。
VBScriptで次のようにすると、既存のExcelプロセスとは別に
プロセスが起動するよね。そういうことをやりたい。
Set xapp = CreateObject("Excel.Application")
知ってる方おしえてー
233 :
230:2011/12/29(木) 12:24:17.82
>>231 >os.systemに渡してるのはただの文字列だから、
アッー!そうでした・・・。ちょっと恥ずかしすぎる質問でした。
ありがとうございました。
どういう用途で使うのか知らないけど、
その変数が外来だとするとセキュリティー的に怖いことをやろうとしてるよ。
* rmコマンドへ渡す引数の注意点: ルートのパスと -rf オプションを指定された場合。
* パイプで別のコマンドが実行可能。
* 変数に意図しない空白が含まれてる場合、別々の引数として解釈される。
もし、変数は固定で安全だとと思う場合でも、何かのミスで変数が上書きされて
意図しないコマンドが実行されるというリスクがあるので、早めに対策するのをお勧めです。
参考
ttp://www.python.jp/doc/release/library/subprocess.html の警告 シェル・インジェクションの項
os.system よりも subprocess.Popen ですよ
>>232 win32com.client.DispatchEx("Excel.Application")
Exとかやる気ねえなw
まあ本家のWin32APIには"ほにゃららExEx()"とかもあるしね・・・
viのスレかと重た
Python でcgiを作りたいと思います。
ウェブブラウザーの画面に表示されたボタンを押すと、そのボタンの色が変わるようなサンプルを探して
いるのですが、なかなか見つかりません。なんかヒントをもらえると助かります。
その程度なら javascript 使え
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:2012/01/01(日) 14:09:41.97
あけまして、おめでとうございます。
namedtupleの名前・値の一覧を取り出す方法教えてください。
dictでいう、dict.items() dict.keys() deict.values()
のようなイメージです。よろしくお願いします。
247 :
246:2012/01/01(日) 14:15:43.90
sage間違えました。
249 :
246:2012/01/01(日) 15:41:23.87
>>248 ありがとうございます。
_asdict() で辞書に変換してできました。
まだじっくり読んでいないのですが、name-index-valueの一覧も
ここを読見込めば出来る様になるのでしょうか。
第2段階として
タプル扱いだとindex-value、辞書にするとname-value、
これを一つの表として出力したいのです。
>>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:2012/01/01(日) 19:31:08.06
>>250 ありがとうございます。できました。
名前と値を個別に取り出してzipで組み合わせて、enumerateの値をindexと見做す。
という事のようですが、考えつきませんでした。
現在、引数がlist型なら形式A、tuple型なら形式B、dict型なら形式Cという
デバッグ表示用関数(ネストに対応できていませんが)を練習として作っています。
namedtupleなら形式D、という事をしたいのですが、型の判別方法が判りません。
tupleとnamedtupleを区別する方法を教えてください。typeではダメでした。
typesやisinstanceを調べてみても判りませんでした。
重ね重ね申し訳ありませんが、お願いします。
>>251 これはよくはまるポイントかもしれない。
namedtupleはクラスではなくて、tupleを直接継承したクラスを生成する * 関数 * なので。
また、現状では namedtupleのみに 共通するベースクラスがなく、isinstanceでは通常のtupleとの区別が付きません。
(※
ttp://bugs.python.org/issue7796)
例えば今回のケース(_fieldsを使う場合)なら、こうかな
if isinstance(obj, tuple):
if hasattr(obj, "_fields"):
namedtuple用のコード
else:
通常のtuple用のコード
hasattrは、このケースのみの対策というわけではなく、通常の型を判別して処理を別ける場合でも、
isinstanceの代わりに属性の有無のみでチェックする方法がよく使われます。
253 :
246:2012/01/01(日) 22:02:39.85
>>252 try: expect: で試行錯誤していました。hasattrの方がスマートです。
やっと本質的なコードに入れます。
ありがとうございました。
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です。
>>254 __repr__ メソッドを上書きする。
第3者にとってはモジュールのパスが判り辛くなるかもしれないので、その点は気をつけて。
256 :
255:2012/01/01(日) 22:59:41.08
読み違えたかもしれない。
hoge.Error がimportされた先のパスで表示されてしまうって問題?
> 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:2012/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しても問題が無ければ、そうしたいのですが大丈夫でしょうか?
>>258 相互 import では幾つか注意が必要なので、出来れば避けた方がいいです。
相互 import で気をつける点は、トップレベルが実行される時点ではまだimportするモジュールの属性を参照出来ない事。
つまりfrom/importが出来ない。import hogeとして、hoge.Errorを関数内で使うようにする。
後、気になったのは、hoge/_hoge_main.py を直接実行したりしないかという点だけど・・・(名前にmainとあるので)
その場合は from . import Error が出来ないかな。
他の対策。遅延import
* それ程頻繁に呼び出される関数でなければ、関数内で import する。
>>244 javascriptですか。
>>245 とりあえず動きました。
ありがとうございました。
実はインターネット上のサーバーの監視するものを作っていまして、本体はなんとかpythonで
作れたのですが、webブラウザからそのスクリプトを実行する簡素なフロントエンドを作ろうと考えています。
その場合、フロントエンドはpython よりも javascriptの方が適しているのでしょうか。調べているのですが、
なかなか結論が出なくて。
python でいいよ
ていうか両方使っちゃだめなのか?
老若男女、猫も杓子もインターネットを使うようになった今日、
無料情報と有料情報の違いを知らない人が多すぎる。
無料情報は、大半が釣りだと思っておいて間違いない。
釣りを釣りだと分からない人に、無料情報を使うのは難しい
おまいらも初詣とか行くときは釣りに気をつけろよ
>>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
>>265 namedtuple使ったことないのかな?
tはタプルのインスタンスだけど、その nt はタプルを継承した"クラス"
インスタンス同士で区別が付くかどうかを比較しないと意味がないよ。
> n = nt(0,0)
> isinstance(n, type)
False
> isinstance(n, tuple)
True
>>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
(・∀・)デキタ!!
>>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
(・∀・)イイ!
連投すまんとです
>>> isinstance(s, (type_p, type_s))
True
>>> isinstance(p, (type_p, type_s))
True
>>> isinstance(t, (type_p, type_s))
False
(・∀・)カンペキ!!
>>> 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を見分けることが
(・∀・)デキタ!!
>>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)
ttp://bugs.python.org/issue7796 > Detecting _fields is the simplest thing we can do right now.
ということで _fields での判別が、現状(<3.2)では最も簡単な判別方法と締められてる。
# ※1 ただし、Pythonでは厳密な型チェックよりも、
# ダックタイピングの利点を活かす為、規格のみのチェックの方が好まれる。
(´・ω・`)ショボーン (´;ω;`)ウッ…
>>272 ドンマイ。やりたいことの意図はわからなくはないよ。
isinstance(obj, INamedTuple) みたいな判別をしたい場合の参考にどうぞ
namedtupleにインターフェースっぽいものを仕込むサンプル。
ttp://ideone.com/ZVkIv
>>> 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し易いんです。
>>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を普通の関数にして使ってもいい。
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 :
デフォルトの名無しさん:2012/01/05(木) 21:45:36.35
[5,2,1,0,5]のようなリストがあるとき、最大値の要素番号を取得するにはどうしたらいいでしょうか?
上のリストのように最大値を持つものが2つ以上ある場合は0,4のどちらでもokです。
できるだけ高速に取得したいです
278 :
デフォルトの名無しさん:2012/01/05(木) 22:23:05.09
maxとindex使えばいいだけですね。すれ汚し失礼しました
dive into python 3の日本語版サイトが英語になってる。
HTMLのリンクも切れてる。読んでた途中の俺涙目。
Mark Pilgrim半失踪の煽りを喰らったか
>>281の生存確認
clone後にbuild_ja.pyを実行しないといけないけれどlocal環境で読めてます。
資料系のsiteはscrapbookの使用をお勧めします。
それかnetに繋げれなくても、local環境で参照できるように設定しておくとか。
>>280 Mark Pilgrim失踪の話を初めて聞いたのですが顛末を教えて頂けないでしょうか?
>>282 ローカルの設定にとまどいましたが日本語版の生成ができました!
ありがとうございます。
重要なものはローカルにとっておくように習慣つけようと思います。
Python(Windows版)インストールに関してご存知の方がいれば教えてください.
バージョンは2.5でも3.2でも変わらないのですが,msiを実行した直後にWindowsInstallerのエラーが出て以上終了します.
もしかしたらOSが未対応なのかもしれなくて,WindowsXPのMedia Center Edition SP3です.
このOSではPython環境を導入できないのでしょうか?
msiが壊れてるとか(MD5を確認)、64bit版だったりとか、ウィルス対策ソフトが邪魔してるとか
>>286 python-3.2.2.msi
"Install for all users"を選択した後にエラー.
特に提示できそうな内容がないんだけど,WindowsInstallerのエラー署名に関して.
AppName: msiexec.exe
ModName: msihnd.dll
PythonがMedia Center Editionに対応してないと明記されているページが見つからないので,
もしあれば教えてください.諦めが付きます.
for all users ってことは管理者権限でインスコしないといけないんじゃない?
もし他の選択肢(for current userとか)があればそっちを試してみるとか
>>288 レスthx
管理者権限だし,試せる選択肢は全て試し済ですね.
WindowsInstallerのバージョンは?
>>290 msiexecで確認した.
V4.5.6001.22159
cygwinにもpython付いてるよ
エラーの原因がわからないと何ともいえないので、まずは詳細ログ出力
msiexec /i python-3.2.2.msi /L*v python.log
Media Center Editionは知らないので他の方に任せた。
他に気になった点、
2.5って公式では今はソースのみ配布になってるはずだけど、
MSIということはactivepythonの方だったりする?
>>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'
grep -i error
インストーラーをNASとかローカルHDD以外から実行するとエラーになるのあったりするけどその辺はどう?
よろしくお願いします
txt = "abc123, aaaaa, abc3210"
txtのような文章があるときに、re.compile('abc(\d+)')のような正規表現でsearchをかけています。
この場合に、最初に一致したものだけでなく、txtに含まれる一致するもの全てを取り出したいのですが、どのように書けばいいのでしょうか?
findall,finditerを使う
>>298 WScript.Echo("WScript.Version:" & WScript.Version)
5.7
他に誰か同じOSの人いればそれで試してもらった方が早いと思うけど。
Dive Into Python 3の日本語訳直ってるね
python-twitterでGetFollowers()を使うと
twitter.Api instance must be authenticatedのエラーが出るようになった。。。
Oauth関連が原因なんでしょうか…原因分かる人いたらよろしくお願いします。
>>304 ほんとだ
金曜日にローカルで日本語版作ったけど結局待てば直ってたわけかw
>>306 >>279で書いた時みたいに涙目にならないようにlocal環境構築しておく。
急げ、後悔先に立たずだ
308 :
デフォルトの名無しさん:2012/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
>>308 Tkinter.Text.searchで得られるのは文字が見つかった開始位置のみだよね?
マッチした文字に対して長さを調べるか、終了位置を別に調べるようにする。
多分、re.search使った方が簡単。
他の方法。他の正規表現の内容次第だけど、大文字小文字の区別のみなら
Tkinter.Text.search の nocase=True オプションで正規表現使わずに済ませられる。
311 :
308:2012/01/11(水) 20:13:08.36
>>309 素早い添削有難うございます。すっかり忘れていました。
>>310 教えて頂いたオプションで済みそうですが、reを使ってトライしてみます。
有難うございます。
312 :
310:2012/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:2012/01/11(水) 21:14:03.01
>>312 わー‼できたー!
重ねて御礼申し上げます。
コードの意味は確かによく分かりません。
なんでこんなことになってるの?
>>> 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
>>> 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
/ノ / | \ 彡
ヽ/、/ヽ/ ヽ/
いや、別に。
なにが迷惑なのかまったくわからん
何がおかしいのか分からない
boolはintのサブクラス
というか1.0とTrueを比較したいと思うことがあんまりない
>>> bool(1.01)
True
>>> bool(1.0)
True
こういうことか
>>> float(True)
1.0
ワロタ
>>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
short-circuitのの話ではなくTrueとFalseを1と0と同じように扱ってるところを
疑問に感じてるんだろう
というか&&じゃやなくて&か…CSって何の略?
customer satisfaction
>CSって何の略
と言ってるようではお里が知れるというもの
>>326 くだすれでそんなドヤ顔されても困っちゃいますYO
とっとと何の略か答えてどうぞ
certified secretary
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:2012/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
'%08.3f'
>>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)
ああこれじゃダメだな、ごめんごめん
>>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)
参考:
辞書順ソートで数字は数値として比較する(例 バージョン番号つきファイル名のソート)
http://codepad.org/eEXhZoJv
337 :
336:2012/01/14(土) 06:57:24.77
"inf" や "nan" って文字列も数値扱いになるので、
float(key) の例外のみでの判断はまずいかもしれない。
型が混在する場合、3.xでのbytes型の扱いに注意。3.xではそれぞれ別のキーになる。
print({"foo": 1, b"foo": 2})
まじか
これはひどい
339 :
331:2012/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:2012/01/14(土) 16:01:24.81
馬鹿には無理
344 :
デフォルトの名無しさん:2012/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
エポックからのミリ秒文字列をdatetimeに変更したいのですがどうしたらよいでしょうか。
>>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") とすると、
文字優先・数値優先のソートが可能になります。
>>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:2012/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 :
デフォルトの名無しさん:2012/01/14(土) 23:28:34.42
>>345 datetime.fromtimestamp
floatで変換するのがダメならast.literal_eval使う手もある
VPythonって何?
UNIX系OSのシェルで実行するPythonスクリプトを作成しているのですが、
パイプを使った標準入力の受け取り方について良い方法を探しています
echo "hoge" | ./test.py
で、"hoge"を取得して処理をしたいという状況です
sys.stdinを使用して取得まではできたつもりなのですが、
単純に ./test.py といったパイプ無しでの実行のときに一定時間後落ちます
パイプでの標準入力が無い場合は別の処理をしたいのですが、良い方法がありますでしょうか
よろしくお願いします
すみません、できたっぽいですorz
勘違いしてるといけないので一応、書いておきますと
sys.stdin.isatty()
を確認しました
>>351 他の単語で不都合が出そう Trueとか
>>348 ソートに使う関数(1度のソートで複数回呼ばれる)ってことで、出来るだけシンプルにしようと思ったんだけど
他の型にも対応する&デバッグ専用であればパフォーマンスより拡張性優先にした方がいいかな。
try/except による判別では、対応する型が増えるとネストが深くなりそうなので
明示的に、型による分岐にした方が良さそうです。率直に記述するなら if isinstance の列挙。
ttp://codepad.org/E0PEyX7Q >自家製pprint
簡単な実装方法としては、pprint.PrettyPrenter や repr(reprlib).Repr のサブクラスを作って拡張する方法があるよ。
>>355 コードサンプルありがとうございます。参考にさせて頂きます。
setdefaultencoding 禁止
elementtreeに読み込まれたxmlの任意のelementを取得し、
そのelementの親となっているelementを返すコードを書きたいのですが検討が付きません。
サンプル等教えて頂けないでしょうか?
362 :
360:2012/01/18(水) 23:47:03.94
>361
ご回答有難うございます。
ElementTree以外のxmlライブラリ利用も考えてみましたが、
なるべく標準ライブラリで済ませたいため今回はlxmlは見送ろうと思います。
list = [apple1,apple3,apple4,apple2,banana2,banana1,banana5,banana3,banana4]
こんな感じで末尾に数字つきの文字列のリストがあったとして
これをapple1,apple2,apple3,apple4,banana1,banana2....という風に
リスト内の順番を数字順に並び替えるにはどうするのが1番早く出来ますでしょうか?
L = ['apple1','apple3','apple4','apple2','banana2','banana1','banana5','banana3','banana4']
L.sort()
>>364 なんと1瞬・・・pyてょnすげーです
ありがとうございます・・・
while 文の中で、かなり時間のかかる処理を行うのですが、キーボードから入力で、breakさせ
たいと考えています。どんなやり方があるでしょうか。
Ctrl+C
PYTHONとC++との組み込みと使い方に詳しいページってありますかね?
特定のシステム上のpythonが使えるメモリの上限値を調べる事って出来ますか?
具体的にはandroid端末のsl4a上で使えるpythonのメモリの上限値を調べたいです
住所の文字列を渡して、google mapがブラウザに表示されるスクリプトを探しているのですが
どっかに無いでしょうか?
373 :
デフォルトの名無しさん:2012/01/31(火) 23:48:02.65
http://www.nslabs.jp/monkey-python-02.rhtml#s3 このサイトを見て次のようにプログラムを組んだのですが、うまくいきません。
# -*- coding:utf-8 -*-
import Tkinter
def on_clicked():
print "ボタンが押された!"
window = Tkinter.Tk()
button = Tkinter.Button(window, text = "押してください。", command = on_clicked)
button.pack()
window.mainloop()
本当だったら、端末からスクリプトを実行したら、ウィンドウが出て、ボタンを押すと”ボタンが押された!”と表示されるはずなのですが…
失礼。どうなるか書くのを忘れてました。
実行したら何も出ずに終了してしまいます。
あまりにもくだらない質問かもしれませんが、ご教授おねがいします。
>>373 端末って本当に端末?アイコンをダブルクリックで実行とかしてない?
とりあえずOSとPythonのバージョンを
>>375 あぁ…。ほんと色々書くの忘れてますね…。申し訳ない。
Ubuntu Linux 11.10
Python 2.7
です。
端末から実行してます。
対話モードで四則演算とか
簡単なスクリプト
print "hoge"
とかならできるので、端末の使い方を誤っているわけではないと思います。
ああ、そういうことか。インデントするのはprint文だけでいいよ
>>373だとon_clicked関数を定義するだけで呼びださないスクリプトになってる
def on_clicked():
print "ボタンが押された!"
window = Tkinter.Tk()
button = Tkinter.Button(window, text = "押してください。", command = on_clicked)
[...]
>>377 できました!
ありがとうございます。
今回の失敗は、
def on_clicked():
print "ボタンが押された!"
で関数を定義して、その続きもインデントしたままだと、その内容もon_clicked関数の中身として処理されてしまう。
という解釈でいいでしょうか。
>>378 です。
> 字下げするのを止めたところがその関数の終わりになります。
>>379 ありがとうございます。
少しかじった程度のC言語のノリで字下げしまくってたら、Pythonでそれは命取りでした。
字下げを使うというのがPythonの大きな特徴だと言うのに…。
助かりました。ありがとうございます。
>>380 できたならいいけど。
C言語のノリで字下げって、Cでも普通はそんな字下げはしないよ……
Cでは`}'を入力したらエディタが勝手に字下げを1段戻してくれたけど、
Pythonでは`}'を入力するかわりに字下げを戻すんだ。
Pythonの書きやすさは、エディタの能力によって大きく左右される。
>>373の行頭からの連続した半角空白がインデントされて見えてる人いる?
いたら環境教えてほしい
v2cだと半角spcすら見えない
2ch mateで1個分
>>383 dat を直接見ればよかろう。
Jane Style なら
>>373 にカーソルを合わせれば見えるし。
インデントなら navi2ch 最強。
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
'>>> '
というので設定すればいけるのかな?と思いましたがよく分かりませんでした。
そのくらいコピペじゃなくて自分で入力しよう
392 :
デフォルトの名無しさん:2012/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}}
1/6000 * 1/3000 * ... ぐらいの桁の掛け算を何度も繰り返すのですが
桁落ち、アンダーフローなどが心配で、対数か何かを使ってどうにか出来ないでしょうか?
ふざけた質問だと思いますがよろしくお願いします。
>>394 fractions見てみましたが使えそうです。
早い回答ありがとうございました。
また一度Dive Into Python3も熟読してみます。
397 :
396:2012/02/03(金) 19:55:53.94
どんだけーw
関数の定義の仕方によってはそうでない使い方も出来ますが、
デコレータは一般的にはクロージャみたいなものになるという解釈でいいでしょうか。
関数Aを関数Bで包んだ場合は、関数B内で定義した関数Cを返すようなので。
以下のように、先頭に整数文字列の値を使って
25, 大阪府
2, 青森県
1, 北海道
47, 沖縄県
以下のようにソートしたいと考えています。
1, 北海道
2, 青森県
25, 大阪府
47, 沖縄県
python でスマートにソートするにはどんな方法が考えられますかね。
>>> L = ["25, 大阪府", "2, 青森県", "1, 北海道", "47, 沖縄県"]
>>> L.sort(key=lambda e: int(e.split(',')[0].strip()))
>>> print '\n'.join(L)
1, 北海道
2, 青森県
25, 大阪府
47, 沖縄県
403 :
デフォルトの名無しさん:2012/02/05(日) 15:57:36.13
pythonの勉強をしようと思い
http://coreblog.org/ats/minpy-web-is-now-free-to-read ここのみんなの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>"
にブラウザでアクセス(
http://127.0.0.1:8000/cgi-bin/test.py)しても
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 -
何か原因が分かりましたらお願いします
>>403 どこのページかくらい書けよ
SimpleHTTPServerじゃなくてCGIHTTPServer
405 :
403:2012/02/05(日) 16:15:21.51
ローカル環境(ampps)でDjangoのお勉強したいんですがインストールの仕方がわかりません、誰かAMPPS使ってる方いませんか?
>>401 L = ['25, 大阪府', '2, 青森県', '1, 北海道', '47, 沖縄県']
L.sort()
>>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]))])
repr(), str()って何が違うんでしょうか?
str()だけあればいいと思いますが。
>>409 かなりぶっちゃけた言い方をすると
str()がユーザー向け、repr()がプログラマ向け
の文字列を得るために使う
理念的にはevalしたときに元通りになるのがrepr
rep = repr(obj)
ev = eval(rep)
obj == ev
さあ、結果や如何に!
>>> obj = 'abc'
>>> rep = repr(obj)
>>> ev = eval(rep)
>>> obj == ev
True
>>> id(obj)
3075397632
>>> id(ev)
3075397632
>>> import datetime
>>> obj = datetime.datetime.now()
>>> rep = repr(obj)
>>> ev = eval(rep)
>>> obj == ev
True
repr(float('inf')) がおかしいって誰が言ってた
418 :
392:2012/02/06(月) 06:54:34.43
どなたか分かる方はいらっしゃらないでしょうか?
c0 = tk.Canvas(...)
c0.lower()
>>417 言ったのは多分以前の自分。
nanもダメ。
理念的って書いてあるじゃない
'float("inf")'を返せばいいんじゃね
そりゃ観念的だね
424 :
デフォルトの名無しさん:2012/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()
お昼ごはんに理念のわかめスープ飲んだ
>>424 from Tk import *
Misc.lower(c1)
Tkinter.pyのソースコードにそれっぽいことが書いてあるから
参照したらいいかも
あ、まちがえた。from Tkinter import *
427 :
デフォルトの名無しさん:2012/02/06(月) 18:15:59.48
>>425 お陰様で無事動きました。
ありがとうございました!
Tcl/Tkの経験があればTkinterも何となくわかるかと思っていたのですが、
かえって違いに戸惑ってしまってます。
そのうち慣れるでしょうけど、それまでは苦労しそうです。
海外のアルゴリズムを教える題材にPythonを使うのが多いらしいのですがそういうサイトはあるのでしょうか
C言語のアルゴリズムの本読んでるんすけど難しいです
>>429 さっそくありがとうございます。
地道にやっていこうと思います。
MacでPythonをやるにはどういった開発環境が良いでしょうか?
Ankiというソフトウェアをビルドしようとしています
Mac ならシステムに最初から Python がはいってるから、そのままで OK だけ
ど、特定のバージョンが必要とかの場合は MacPorts から入れるのが簡単。
PyQt4 とか Beautiful Soup とかが必要のようだけど、MacPorts だとそれもま
とめてインストールできる。
>>432 有難うございます
難しいですが少しずつ理解して行きたいです
外部サイトのRSSから自動でスクレイピングして画像やテキストの一部を自分のサイトの指定の場所に表示したいんですが、どういう手順でやればよろしいのでしょうか
ちなみについさっきローカルでDjangoインスコしたばかりのド素人です(^q^)
はじめてのLL言語れす(*^o^*)
教えておにーちゃん!
そーいうの不愉快だから止めた方がいいよ
>>434 同じようなの作ってるけどbeautifulsoupとmechanizeでやってみてるよ
>>> [[10]]
[[10]]
>>> ((10))
10
なにこの違い
困るんですけどw
釣り針でかすぎるけど、困る例を一つでも挙げれたら100万円やる
リストのリストから最大値&最小値を見つける関数があってですな
439のタプルのケースを食わせるとあきまへんねん
>>> ((10,),)
((10,),)
((10,),)
だよな、最初438がタプルを使おうとしてるとは思わなくて何がしたいのか理解不能だった
((10,),)
((((;゚Д゚))))
447 :
デフォルトの名無しさん:2012/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']
>>447 「python 自然順ソート」でググれ
>>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:2012/02/09(木) 17:11:24.29
あれなんか二番目がおかしい。ごめん
L.sort(key=lambda x: int(re.match(r'apple(\d+)', x).groups(1)))
apple限定かい!
PHP の natsort って、おもしろいけど本当に役に立つのかねえ。
1.05 と 1.5 はバージョン番号なら同一視してほしいけど、
ふつうの小数では別に扱ってほしいし。
>>452 import re
L.sort(key=int(re.match(r'[^\d]*(\d+)', x).groups(1)))
re.search(r'\d+\Z', ...)
>>454 iPhoneでみるとなんかモザイクみたいだ
test={
'a':{'j':'1'},
'b':{'i':'2'},
'c':{'k':'3'},
}
を数字の箇所の値で降順にソートしたいのです。
つまり
c k 3
b i 2
a j 1
と表示されるようにしたいのですが、
どのようにすればいいのでしょうか?
>>456 sorted(test.items(), key=lambda item: item[1].items()[0][1], reverse=True)
>>457 はやっ!
。 。
/ / ポーン!
( Д )
辞書の辞書(辞書の入れ子)のsortってこうするんですね。
うまくいきました。ホントに助かりましたm(_ _)m
python3だと、items()はリストじゃなくてビューオブジェクトを返すから、items()[0]ができないけどね。
460 :
デフォルトの名無しさん:2012/02/13(月) 02:10:48.93
IDLEは起動しないわ
TkinterはDLLロードエラー出るわ
糞だな
えすぱぁ
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
https://bugs.launchpad.net/virtualenv/+bug/352844)
よくこのエラーが出るけど、
「このユーザーだけ」
って選択した時なんだよね。
あなたが「全てのユーザ」を選択するとこの問題は解決するかもしれない。
専用エディタ導入したけど使い難いな
でも関数の説明が出るのは嬉しい
467 :
デフォルトの名無しさん:2012/02/13(月) 23:27:25.06
カーソルを動かしたいのですが
c言語のgotoxyに対応するような命令ってありますか?
>>469 調べて見たけど結構複雑だな
ubuntuで動作することを祈ろう
>>467 PyScripter
変数名にnとか割り当ててn = 1とかやろうとするとn<SPACE>の時に変換されてて気付いたらよく分からない文字になってたりする
今までIDE使ったことなかったから大変
x打つつもりが、いきなりxrangeになったりするのは、IDEオプションの
Code CompletionのComplete as you typeのチェック外したら出なくなったよ。
俺も使い始めたばかりで、それが正しい対処かわからんけど。
473 :
デフォルトの名無しさん:2012/02/14(火) 23:40:45.75
これでいい野田
反対の産生ー
L = [1, 2]
T = (1, 2)
L == T
>>> False
となるのですが、一度どちらかをlist, tupleに変換しないといけないんでしょうか?
それとも良い方法があったりしますか?
L === T
>>> reduce(lambda x, y: x and (y[0] == y[1]), zip([1,2,3], (1,2,3)), True)
True
>>> reduce(lambda x, y: x and (y[0] == y[1]), zip([1,2,3], (1,9,3)), True)
False
順序気にしないなら
>>> L = [1, 2]
>>> T = (2, 1)
>>> set(L) == set(T)
True
>>476 死ね
>>> L = [1, 2]
>>> T = (1, 2)
>>> L == T
False
>>> L === T
File "<stdin>", line 1
L === T
^
SyntaxError: invalid syntax
>478
そこまでするくらいなら素直に、
tuple(L), list(T)やってろって話ですかね・・・
set()はちょっと検討してみます。
ランバダってなんなの?
ひょっとして無名関数のことかな
λ...
λ人λ人λ人λ人λ人入人λ人λ人λ人入人λ人λ人λ
ランダバダバダバランダバダバダバ
λ
って
え
と似てるな
486 :
デフォルトの名無しさん:2012/02/15(水) 21:51:57.37
ええ
ソートするとき、以下のように"key=lambda"ってのが良くでてきますが、
検索しても意味がわかりません。どなたかヒントをお願いできないでしょうか。
sorted(a, key=lambda x:x[1], reverse=True)
本当によく出てくるの?
>>489、490
ありがとうございます。なんとなくわかってきました!
492 :
デフォルトの名無しさん:2012/02/16(木) 00:06:26.59
494 :
デフォルトの名無しさん:2012/02/16(木) 00:11:03.46
複数のスレで質問してるってこと
分からなければ
googleにマルチってなんですか?って聞いてみて
497 :
デフォルトの名無しさん:2012/02/16(木) 00:19:42.05
申し訳ありません。
数週間このエラーから抜け出せずにいたので、
焦ってしまいました。
気を悪くした方、ごめんなさい。
すすすすすすすすすすす数週間!
499 :
デフォルトの名無しさん:2012/02/16(木) 00:36:55.74
>>498 そうなんです。プログラミングをはじめようと思い、PythonでMatplotlibを使って
グラフなど描いていろいろやろうと思ったのですが、全然うまく行かず…
Google先生に聞いて、いろいろ試したのですが、うまく行かず今日に至った次第です。
必要なモジュールが足りないんだろ
入れて来い
>>499 何だ、君マルチだったのか。
Mac使いだったらMacPortsであっさり
インスコできるはずだから、一旦
Superpack消して入れ直してみなよ。
unicodeのテキストの文字列を
一行づつ画像化して出力したいのですが
文字列を画像化するにはどうしたらいいですか?
PIL画像を作ったり編集したりは出来るのですが
文字を入れる方法が分かりません
ImageMagickを使うとか
504 :
デフォルトの名無しさん:2012/02/17(金) 14:44:10.88
超初歩的な質問で申し訳ないのですが、
テキストの読み込みに関してどう書いていいのかわかりません。
テキストには名前、打数、安打数、本塁打数、と1行毎に書いてありそれが9人分続いているとします。
最終的にoutputは名前、打率、本塁打数と1人1行ずつprintします。
txtの読み込みとループに関して簡単にでいいので解説お願いします。
Python3.2
with open('tech504.txt') as f:
for line in f.readlines():
line = line.rstrip()
sp = line.split('、')
out = sp[:2] + sp[3:]
print('、'.join(out))
tech504.txt
名前1、打数1、安打数1、本塁打数1
名前2、打数2、安打数2、本塁打数2
名前3、打数3、安打数3、本塁打数3
名前4、打数4、安打数4、本塁打数4
名前5、打数5、安打数5、本塁打数5
名前6、打数6、安打数6、本塁打数6
名前7、打数7、安打数7、本塁打数7
名前8、打数8、安打数8、本塁打数8
名前9、打数9、安打数9、本塁打数9
>>506 以下の行は
for line in f.readlines():
以下の行に修正
for line in f:
508 :
502:2012/02/17(金) 16:29:13.54
すいません、どうも
t.txtのunicodeの日本語の文字列が文字化けしてしまいます
どうしたら文字化けせずに画像に出来るのでしょうか?
import Image
import ImageDraw
import ImageFont
# 大きめのキャンヴァスを用意しておく。
img = Image.new('RGB', (600, 400), 'white')
dr = ImageDraw.Draw(img)
# HG 明朝体を使ってみる。
fnt = ImageFont.truetype('hgrme.ttc', 24, encoding='utf-8')
# 長めのテキストを用意する。
f = file("t.txt","r")
text = f.read()
f.close()
width = 0
height = 0
for line in text.splitlines():
ext = dr.textsize(line, fnt)
dr.text((100, height+(400/2)), line, font=fnt, fill='red')
width = max(ext[0], width)
height += ext[1]
# 余白をトリムする。
#img = img.crop((0, 0, width, height))
img.save("test.png")
text = f.read().encode('utf-8')
hgrme.ttcは存在するのか?
普通にunicodeでやったらうまくいったが
513 :
502:2012/02/17(金) 16:57:45.39
514 :
502:2012/02/17(金) 17:01:03.50
>>512 decodeにしてみたけど駄目でした
Message File Name Line Position
Traceback
<module> C:\Users\***\desktop\1.py 27
decode C:\Python26\Lib\encodings\utf_8.py 16
exceptions.UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte
'utf-16'
f.read().decode('utf-16')
517 :
502:2012/02/17(金) 17:06:27.46
>>515 うおおおおお
できましたあああ!!!
有難うございます!!!
ユニコード色々有り過ぎでヤだお
519 :
504:2012/02/17(金) 17:26:40.15
>>506 素早い回答ありがとうございました。
ですが求めている物とは少し違いました。
fileが以下のように各行に1つずつのときに
"名前 打率: .nnn 本塁打: aa"と表示されるようにしたいのです。
tech504.txt
長野
578
164
17
マートン
579
180
13
宮本
474
143
2
説明が悪く大変申し訳ありません。
'\n'.join(out)
じょ、情報を小出しにするなとあれほど。。。
単に興味で聞くだけなんだけど、これなんのために必要だったの?
n = 4
with open('tech504.txt.1') as f:
out = []
for i, line in enumerate(f):
line = line.rstrip()
if i % n == 2:
continue
out.append(line)
if i % n == n - 1:
print("名前: {}, 打率: .{} 本塁打: {}".
format(out[0], out[1], out[2]))
out = []
せめて回答する側はインデントしようよ
524 :
デフォルトの名無しさん:2012/02/17(金) 18:39:44.52
datではインデントされてるよ
525 :
デフォルトの名無しさん:2012/02/17(金) 18:48:18.29
>>522 申し訳ありません。
目的は課題です。求める打者数も項目もずっと多いですが。
for 名前, 打数, 安打数, 本塁打数 in zip(*[iter(open('tech504.txt'))]*4):
print(名前, 打数/安打数, 本塁打数)
どっちもひどい
酔った勢いでかいてみた
# -*- coding: utf-8 -*-
file = "tech504.txt"
person = []
pgroup = []
cnt = 0
# こんなくそデータを処理する仕様はks
# 出題者よデータの変更を求む!
with open(file) as f:
for line in f:
line = line.rstrip()
if cnt <= 3:
person.append(line)
cnt +=1
else:
pgroup.append(person[:])
del person[:]
person.append(line)
cnt = 1
pgroup.append(person[:])
for line in pgroup:
print line[0], " 打率:", float(int(line[1]) / int(line[2])), "本塁打:", line[3]
# coding: utf-8
rec = [] # 名前、打数、安打数、本塁打数
f = open('2ch.txt')
while 1:
line = f.readline().rstrip()
if not line: break
rec.append(line)
if len(rec) == 4:
name = rec[0].decode('utf-8')
ba = round(float(rec[2]) / float(rec[1]), 3)
ba = str(ba)[2:5]
hr = int(rec[3])
print u"名前: %s 打率: .%s 本塁打数: %s" % (name, ba, hr)
rec = []
f.close()
文字列の2次元リストを、x[1]を昇順に、x[2]も昇順なら以下のソースでうまくいくのですが、
x[2]のみ降順ソートする方法がわかりません。
x:(x[1],-x[2])のように-をつけるエラーが出ます。
どうすれば良いでしょうか。
#!/usr/bin/python
# coding: UTF-8
l = [['D', '100', '3000'],
['B', '100', '2000'],
['A', '500', '4000'],
['C', '200', '5000'],
['C', '200', '3000'],
['C', '200', '2000'],
['E', '400', '1000']]
for e in sorted(l, key=lambda x:(x[1],x[2])):
print e[0], e[1], e[2]
-int(x[2])
むやみやたらにキャストすると遅くなるけどね
>>531 ありがとうございました。うまくいきまいした。
もうひとつだけ質問させてほしいのですが、
以下のようなリストがあって、1番目の要素を固定して、2番目の要素だけでソートする
ことは出来るでしょうか。
(元のとおりにきりん、ぞう、ぱんだの順番で並べたい)
ソート前
['きりん', '300', '3000'],
['きりん', '100', '2000'],
['きりん', '500', '4000'],
['ぞう', '400', '5000'],
['ぞう', '200', '3000'],
['ぱんだ', '400', '1000']
['ぱんだ', '200', '2000'],
ソート後
['きりん', '100', '2000'],
['きりん', '300', '3000'],
['きりん', '500', '4000'],
['ぞう', '200', '3000'],
['ぞう', '400', '5000'],
['ぱんだ', '200', '2000'],
['ぱんだ', '400', '1000']
なんか松本引越センターを思い出したw
a0 = [x[0] for x in a]
a.sort(key=lambda x: x[1])
for x0, x in zip(a0, a):
x[0] = x0
自分の頭をひねらない人はプログラムやめたほうがいいよ。
安定ソートの出番ですな
>>533 というか、なんでそんなデータ構造にした?
以下の2次元リストで都道府県に対してindexメソッドを使うことはできますか?
その場合どうすればよいでしょうか。
[1,'東京',0]
[2,大阪,0]
[3,神奈川,0]
>>539 たまには自分の頭で考えてみればいいんじゃないかな?
賛成の反対の反対
>>535 すいません、マジでこれ俺には理解不能です。
もうちょっとやさしく教えてもらえると助かります。
まず1行目からつまずきました。
numpyのarray型で特定の要素だけ加算したりすることは出来ますか?
a = array([[1,2],[3,4]])
a = a[1,1] + 3
で
[[1,2],[3,7]
みたいにしたいのですが,これを行うには行列の大きさを同じにしないと無理でしょうか?
a[1][1] += 3
548 :
950:2012/02/19(日) 00:57:01.58
マトリックスみたいなコンソールにバババっとコードみたいなのが流れる奴って何分で作れますか?
from sys import stdout
from random import shuffle
chrs = 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 @ . < > $ # % _ , '
for i in range(1000):
ls = [c for c in chrs]
shuffle(ls)
for c in ls: stdout.write(c)
>>550を盛大にパクってrandomやstringのヘルプ見つつ10分ほど
Windowsではこれしないと動かないかも
http://support.microsoft.com/kb/101875/ja import sys
from random import randint
from string import ascii_letters, digits, punctuation
chars = ascii_letters + digits + punctuation
chars = chars + ' ' * len(chars)
size = len(chars)
try:
sys.stdout.write('\033[1;32m') # green
while 1: sys.stdout.write(chars[randint(0, size - 1)])
finally:
print '\033[0m' # reset
きりんにも同業他社があるしww
>>551を盛大にパクってWin32APIのヘルプ見つつ10分ほど
cmd.exeで動くバージョン
import sys
from random import randint
from string import ascii_letters, digits, punctuation
from ctypes import *
class CONSOLE_SCREEN_BUFFER_INFO(Structure):
_fields_ = [('w', c_short), ('h', c_short), ('x', c_short), ('y', c_short),
('a', c_int), ('l', c_short), ('t', c_short), ('r', c_short), ('b', c_short),
('maxw', c_short), ('maxh', c_short)]
b = CONSOLE_SCREEN_BUFFER_INFO()
h = windll.kernel32.GetStdHandle(-11)
c = windll.kernel32.GetConsoleScreenBufferInfo(h, byref(b))
windll.kernel32.SetConsoleTextAttribute(h, 10) # green
chars = ascii_letters + digits + punctuation
chars += ' ' * len(chars)
size = len(chars)
while True: sys.stdout.write(chars[randint(0, size - 1)])
windll.kernel32.SetConsoleTextAttribute(h, b.a) # reset
ああ最後の二行こっちで
try:
while True: sys.stdout.write(chrs[random.randint(0, sz - 1)])
finally:
windll.kernel32.SetConsoleTextAttribute(h, b.a)
できました
回答して頂いた方ありがとうございました
死ね,俺死ね
下らないことで詰まってた
俺死ね
では私は生きよう
ではプロセスは子を含めて殺しておこう
浮動小数の比較で
a=1.0
b=1.0
if a <= b :
みたいにするのは、やめたほうがいいですか?
a=1.0 とすると実際は a=1.00000000001 みたいになってて <= の評価が
うまくいかない可能性を危惧しています。とりあえず今のところ問題なさそうなんですが。
Fortranやってたときは、よくこんなふうにやってました。
eps=1e-30
a=1.0-eps
b=1.0
if( a <= b) then
>>> 1/10.
0.10000000000000001
>>> 1/10. == 0.1
True
>>> 1/10. > 0.1
False
>>> 0.1
0.10000000000000001
>>> 0.2
0.20000000000000001
>>> 0.3
0.29999999999999999
>>560 Pythonでも後者のようにしたほうがいいと思う
比較する値の差をとって、それが十分小さいか調べる
decimalモジュールやNumPyが使えるのかもしれないけどよく知らない
564 :
560:2012/02/21(火) 00:46:19.34
>>561 確かにそうなりますね。
結局、気にしないでOKということでいいですか?
気にしないのはダメ
比較対象を有効桁で丸めて比較すれば?
>>560 Python3.2では、i, jはdouble型として扱われていて、
以下のような比較をしていたので、
比較に関する問題で、Cで起き得る問題はPythonでも起き得ると考えていいと思う。
float_richcompare()
{
Compare:
PyFPE_START_PROTECT("richcompare", return NULL)
switch (op) {
case Py_EQ:
r = i == j;
break;
case Py_NE:
r = i != j;
break;
case Py_LE:
r = i <= j;
break;
case Py_GE:
r = i >= j;
break;
case Py_LT:
r = i < j;
break;
case Py_GT:
r = i > j;
break;
}
PyFPE_END_PROTECT(r)
return PyBool_FromLong(r);
}
568 :
560:2012/02/21(火) 01:36:48.21
ありがとうございます。
やっぱり気にすることにします。
実行速度より、誤差が怖いのならdecimal使った方がいいとおも。
とりあえず、1万桁ぐらいの値でも正確に判別できているみたいだから、
decimal使えば?
d1 = Decimal('0.111')
>>> d1._int, d1._exp
('111', -3)
>>> d00 = decimal.Decimal('0.' + '0' * 10000)
>>> d01 = decimal.Decimal('0.' + '0' * 9999 + '1')
>>> d00 < d01
True
>>> d00 > d01
False
>>> d00 == d01
False
>>> d88 = decimal.Decimal('0.' + '8' * 10000)
>>> d89 = decimal.Decimal('0.' + '8' * 9999 + '9')
>>> d89 - d88
Decimal('1E-10000')
>>> d89 > d88
True
>>> d89 == d88
False
>>> d89 < d88
False
なんか、引き算すると28桁までしか精度保証してくれないみたい
>>> d1 = decimal.Decimal('1')
>>> d9 = decimal.Decimal('9')
>>> d1.as_tuple()
DecimalTuple(sign=0, digits=(1,), exponent=0)
>>> d19 = d1 / d9
>>> d19
Decimal('0.1111111111111111111111111111')
>>> d19.as_tuple()
DecimalTuple(sign=0, digits=(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), exponent=-28)
なので、こんな風にしてprecを設定しましょうって書いてあったよ。
>>> from decimal import *
>>> getcontext().prec = 6
>>> Decimal(1) / Decimal(7)
Decimal('0.142857')
>>> getcontext().prec = 28
>>> Decimal(1) / Decimal(7)
Decimal('0.1428571428571428571428571429')
a=1.0
b=1.0
if round(a,1) <= round(b,1) :
>>> f = 0.0
>>> for i in xrange(100):
... f += 0.001
...
>>> f
0.10000000000000007
>>> f = 0.0
>>> for i in xrange(10):
... f += 0.01
...
>>> f
0.099999999999999992
if a <= b :
これじゃだめだな
>>560 Fortranならうまくいくのか?バグ増産してたんじゃね?
>>> f = 0.0
>>> for i in xrange(10):
... f += 0.01
...
>>> f
0.099999999999999992
>>> f - (1e-30)
0.099999999999999992
>>> f = 0.0
>>> for i in xrange(100):
... f += 0.001
...
>>> f
0.10000000000000007
>>> f - (1e-30)
0.10000000000000007
eps=1e-30
とかじゃなく、その言語が提供している定数使おうぜ
Fortranはしらんけど、Pythonはこう、
>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024,
max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021,
min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16,
radix=2, rounds=1)
>>> sys.float_info.epsilon
2.220446049250313e-16
>>> a = 1.0 - sys.float_info.epsilon
>>> b = 1.0
>>> a <= b
True
>>> a == b
False
比較の不等号を反転させて、その結果のnotをとればいいじゃない
はあ?
,,,..-‐‐‐-..,,,
/::::::::::::::::::::::::ヽ _,..-‐‐-..,,,
l::;;-‐‐-:;;::::::::::::ヽ//-‐,,__ /:::::::::::::::::::::ヽ
l:l ヽ:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ
ヽ / :::::::::::::::::::::::::::::::::::::;-'^~~^'‐;;:l
~ヽ/ ::::::::::::::::::::::::::U::ヽミ .ll
/ / ̄^ヽ ::::::::::::::::::::::U:::ヽ ,.ノ ∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧
/ | ・ .| :/ ̄^ヽ:::::::l'^~ .<
‐/-,, ヽ,_,,ノ | ・ |:::::::l <
l ~^'' `‐' ヽ.,_,,ノ :l < | ヽ / ̄ ̄\
'''l^^~~~ / ̄ ̄ヽ -‐‐‐--l- < | ヽ __ |
ヽ、 ,,,, | |||!|||i||!| | ~^'‐..,,_/ < / \ |ノ ―――― /
/ (:::::} | | |ll ll !!.| | ,,,, イ~''' < / \ 丿 アアァァ |
l: ~~ | |!! ||ll| || | {:::::) ::l .< ●
l: | | ! | l ~~ l <
l、 ヽ`ニニ'ノ ,l> V V V V V V V V V V V V V V V V VV V V V V
/^‐-,,____,,,,,,,,..................,,,,,,,__,,,.--ヽ
~‐‐'~ ^'‐‐~
>>> float(numpy.finfo(numpy.float32).tiny)
1.1754943508222875e-038
>>> float(numpy.finfo(numpy.float64).tiny)
2.2250738585072014e-308
>>> float(numpy.finfo(numpy.double).tiny)
2.2250738585072014e-308
579 :
デフォルトの名無しさん:2012/02/22(水) 01:27:16.78
これで machine epsilon は求まりますか?
f = 1.0
while f != f / 2.0:
f /= 2.0
print f
580 :
デフォルトの名無しさん:2012/02/22(水) 01:28:35.01
訂正
f = 1.0
while f != f / 2.0:
f /= 2.0
print f
581 :
デフォルトの名無しさん:2012/02/22(水) 05:13:48.78
正規表現である文字を大文字にするとき、どう書けばいいんでしょうか
文字列'foobar'の'o'を'O'に変換
※perl
my $s = 'foobar';
$s =~ s/(o)/\u$1/g;
print $s; #=>'fOObar'
※python
s = 'foobar'
× s = re.sub(r'(o)', r'\u\1', s)
× s = re.sub(r'(o)', '\\1'.upper(), s)
re.sub('o', lambda m: m.group().upper(), s)
583 :
581:2012/02/22(水) 05:58:51.72
>>582 マッチオブジェクトを受け取る関数をsubの第2引数にできるんですね。
マニュアルを見るとsubの第2引数は文字列または関数となっていますが、実感してませんでした。
メタシンボルの\uは無理としても、式の戻り値が入らないのが不思議でならず、そこで止まってしまってたんですが
やっとクリアになりました。ありがとうございます!
584 :
デフォルトの名無しさん:2012/02/22(水) 08:59:17.97
BeautifulSoup 4.0Betaを、Python3.1にインストールしようとして、tar.gzを展開した後
$sudo python3.1 setup.py install
を実行すると次のエラーで失敗します
-------------
(略)
running install_lib
byte-compiling /usr/local/lib/python3.1/dist-packages/bs4/doc/source/conf.py to conf.pyc
File "/usr/local/lib/python3.1/dist-packages/bs4/doc/source/conf.py", line 43
project = u'Beautiful Soup'
^
SyntaxError: invalid syntax
-------------
なにか対策はあるでしょうか?
pythonはDebian Squeeze標準のpython3.1です
2to3
>>585 tar.gzを展開した場所で
$ find ./ -name *.py -exec 2to3 -w {} \;
のあと
$ sudo python3.1 setup.py install
を実行したら問題なくインストールできました!
このツールをすぐ使おうとしてpythonを始めたもので……
ありがとうございました
2.7も入れて使い分けたらいいんじゃねーの
Udacityに参加してる人いる?
俺はプログラミング自体初心者に近いからCS101に挑戦中でふ。
コマンド呼び出しと関数呼び出しの両方ができるスクリプトはできないのでしょうか?
test_disp.pyは引数を表示する機能があります。
import sys
def main(argv='default'):
import sys
if len(sys.argv) == 2:
argv = sys.argv[1]
print 'called by command ', argv
else:
print 'called by module ', argv
if __name__ == '__main__':
main()
これを下記のtest_caller.pyから呼び出して、
import test_disp
test_disp.main('./test_disp.py')
called by module test_disp.py
と表示させたいのですが、'argv' is not definedとなります。
どうすればいいのでしょうか?
馬鹿には無理
普通にデバッグしてね
import sys
def main(argv='default'):
if __name__ == '__main__':
# '''
# if len(sys.argv) == 2:
# '''
argv = sys.argv
print('called by command', argv)
else:
print('called by module', argv)
# if __name__ == '__main__':
# print('__main__')
main()
>>589 インデントがおかしい
def main():
if len(sys.argv) > 1:
print ...
else:
print ...
if __name__ == '__main__': main()
とかしなきゃだめ
>>593,592
ありがとうございました。うまくいきました。
インデントエラーが出てないので、てっきり意図通りになっていると
勘違いしてました。
それにしてもここは、本当にまともな掲示板ですね。
私がよく訪れる仕事関係の板は、ソマリアみたいなところなんで、
びっくりしました。
この板とpythonと回答者に幸あれ。
596 :
デフォルトの名無しさん:2012/02/23(木) 16:52:12.56
ここまで全部自演
むかしはアンチスレが一番まともだったんだが
いまはここなのか
なんか殺伐として来たな。
対象をよく知ってるアンチほど怖いものはない
ソマリアの比喩がなんなのか分からん
悪い意味で言ってるんだろうなーくらいは検討つくけど
>>600 ソマリアつったら海賊問題だろ
海賊仕事関係の板
つまり594は海賊
糞詰まらんし
ストッパおすすめ
糞が詰まった
すみません。
質問させてください。
あるメソッドのテストを行っています。
そのメソッドは引数として整数を一個取り、その整数の範囲は1~100とします。
そのため、テストとして0や101を入れると例外が返ってくることを期待するテストを作ることを考えています。
しかし、そのときふと思ったのですが、引数の型が整数に限定されている場合、引数の型チェックも行うべきなのでしょうか?
今までJava、C#しか経験していないため、変数に型が無い言語でどのようにすべきなのか良くわかりません。
初心者丸出しの質問かもしれませんが、よろしくお願いいたします。
その程度だったら、
assert isinstance(a, int) and 1 <= a <= 100
って一番最初に書いといて、以降はその仕様は忘失の彼方だな・・・
608 :
デフォルトの名無しさん:2012/02/25(土) 13:17:07.38
>>606 情報ありがとうございます。
リンク先を読ませていただきましたが、一般的なTDDの説明かと思いました。
いまいち、変数に型がないことによるメリットがわかりませんでした。
その辺をわかりやすく解説してあるサイトなどありましたら、教えていただけると助かります。
よろしくお願いいたします。
30
30
28カ所
約28カ所
約28箇所
不明
のような文字が1行づつに入力されたテキストファイルがあるのですが、
これから数字のみを抜き出したいと考えているのですが、どのようにすればよいでしょうか?
数字だけであれば全角文字をifで半角数値に置換すればいいかと思うのですが、
それ以外の文字を削除する方法が思いつきません。
610 :
609:2012/02/25(土) 13:28:55.66
すみません 書き漏れがありました
40箇所か39カ所
のような2つ数字が現れる文字もあるかもしれません。
その場合は最初に出てきた数次だけ抜き出したいです
正規表現を使って最初に出てきた数字だけをリストに放り込んでいくのはダメなん?
import re
with open('tech509.txt') as f:
for l in f:
l = l.rstrip()
print('l =', l)
# num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)+', l)
# or
num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)', l)
if num_str:
print('num_str =', num_str.group())
print()
tech509.txt
aaaaa30お前のカーチャンでーべそw
あいうえお30お前のカーチャンでーべそw
かきくけこ28カ所お前のカーチャンでーべそw
mmmmmm約28カ所お前のカーチャンでーべそw
fed@@@@約28箇所お前のカーチャンでーべそw
mふぃfじゃいえいえいふぉえ不明お前のカーチャンでーべそw
ffieie40箇所か39カ所お前のカーチャンでーべそw
609でしたーざんねーん
無念、無念の誤読〜
ちゃんと仕様を確認していませんでした。
はいはい、どうもすいませんっした。
import re
with open('tech609.txt') as f:
for l in f:
l = l.rstrip()
print('l =', l)
# num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)+', l)
# or
num_str = re.findall(r'((約|か)?([0-90-9]+)(箇所|カ所)?|不明)', l)
if num_str:
print('num_str[2] =', num_str[0][2])
# print('num_str =', num_str)
print()
はいはい、これで完璧っすかね
何回もやり直してすいませんっした
import re
with open('tech609.txt') as f:
for l in f:
l = l.rstrip()
print('l =', l)
# num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)+', l)
# or
num_str = re.search(r'(約|か)?([0-90-9]+)(箇所|カ所)?|不明', l)
if num_str.groups()[1]:
print('num_str.groups()[1] =', num_str.groups()[1])
# print('num_str =', num_str)
print()
なんで最初の一個だけでいいの?
別に言わなくてもいいんだけどさ。
私の感覚的にはnumsが正解なんだけど。
import re
with open('tech609.txt') as f:
for l in f:
l = l.rstrip()
print('l =', l)
num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?)|不明', l)
# or
if num_str.groups()[1] or 1:
print('num_str.groups()[1] =', num_str.groups())
# print('num_str =', num_str)
num_str = re.findall(r'(約|か)?([0-90-9]+)(箇所|カ所)?|不明', l)
if num_str:
print('num_str =', num_str)
nums = [tup[1] for tup in num_str]
print('nums =', nums)
print()
ここだけ
nums = [tup[1] for tup in num_str if tup[1]]
↑に修正だわ
「数字だけを抜き出す」のが要望としか読めないんだけど、他の文字をマッチングさせてるのはなぜだろう
〜カ所という形式でなく、
一、関係ない場所で20日、98度などといった形式での数値があると予想できる
二、仕様変更に対する耐性をつけておくため
三、自分でも必要とする時があるかもしれないので自分の感覚通りのものを拵えておいた
#Python 2.7
import re, codecs
r = re.compile(u'[01234567890123456789]+')
f = codecs.open('test.txt', 'r', 'utf-8')
l = f.readlines()
f.close()
n = [re.search(r, s).group(0) if re.search(r, s) else '' for s in l]
for s in n:
print s
pdb使ったらいいんちゃうん?
あと、
>>621のいうスタックは、localsのことだろうと思う。
623 :
デフォルトの名無しさん:2012/02/25(土) 21:36:24.88
pythonでクラス作っていますが、インスタンス変数、クラス変数へのアクセス制御(private,publicなど)はどうすればいいのですか?
property
_underscore_name
>>624 ありがとうございます。
命名規則で対処できたんですね
そういうお約束にしましょうよって話。
まあ、これくらいは読んでおいてね。
Python のコーディングガイド PEP8 - 日本語訳
http://www.oldriver.org/python/pep-0008j.html メソッド名とインスタンス変数
関数の場合と同じルールを使う。lowercase 方式で命名し、可読性を上げ
るためにアンダースコアで単語を区切る。
非公開なメソッドとインスタンス変数にのみ、先頭にアンダースコアを1
つ使って命名する。
....省略されました。続きを読むにはワッフルワッフルと入力して下さい。
継承のための設計
クラスのメソッドやインスタンス変数(つまり「属性」)を公開すること
の是非を、常に考慮する。どちらがいいか分からないときには、非公開に
する。公開属性を非公開にするよりも、非公開属性を公開にするほうが容
易である。
公開属性にするということは、あなたのクラスを他人が使うことを想定し、
将来の非互換性を避けることを約束したということだ。非公開属性にする
ということは、他人が使うことを想定しておらず、変更したり削除したり
するかも知れないということだ。
....省略されました。続きを読むにはワッフルワッフルと入力して下さい。
あと、最低でもこれ一通り読め。
http://diveintopython3-ja.rdy.jp/index.html
>>622 グローバルなのも表示されとるよ。
デバッガ使えば似たようなことできるのは知ってるが、
初心者でも手軽に使えそうだし、特にmutable, immutable関連での頻出の質問に対する
かなり明確な答えになると思われるし、初心者向きスレには需要あるかと思って貼ってみた。
>>626 了解。
まずは、勉強させてもらいます。
>>628 pythonにカプセル化とかの概念はないのですか?
概念はあるでしょ。
言語仕様で縛るか、お約束でやるかの違い。
透明どころか手を中に突っ込めるカプセル
こういうシンプルな書き方ってできないのですか?
for x in a_list if a_condition(x):
do_something(x)
こう書けるのはわかりますが、filter とか lambda とか面倒で気に入らない
for x in filter(lambda x: a_condition(x), a_list):
do_something(x)
こう書けるのもわかりますが、無駄に冗長でウンコ臭い
for x in [x for x in a_list if a_condition(x)]:
do_something(x)
for x in a_list:
if a_condition(x): do_something(x)
def is_odd(n):
return n % 2
a_list = [i for i in range(10)]
for x in filter(is_odd, a_list):
print(x, 'is odd.')
>>633-634 やっぱりそういう書き方しかないですか?
>>633 それ do_something(x) が複数の文になるとインデント2段になりますよね
>>634 a_condition(x) をいちいち関数定義するのは面倒ですね
>>632の一番上は分かりにくくないかい?
continue使えば?ってなりそうな気がした。
def is_odd(n):
return n % 2
a_list = [i for i in range(10)]
for x in a_list:
if not is_odd(x):
continue
print(x, 'is odd.')
>>636 うーん。もし書けるなら、これの方が
for x in a_list if is_odd(x):
print(x, 'is odd.')
これより簡潔で分かりやすいと思うんだけど
for x in a_list:
if not is_odd(x):
continue
print(x, 'is odd.')
そうかもなあって思っちゃってる。
continueがない分いいってか。
うーん、、、
for x in a_list if is_odd(x):
for x in filter(is_odd, a_list):
上2つは等価なfor文だけど、
修正が大変とかで上の文法は採用されなかったんだろか。
上の方を満たすためにfilter()用意したんじゃないかな?
って思ってる。
ここは我慢してPythonに合わせるしかないんじゃないの?
話を元に戻して、
> こういうシンプルな書き方ってできないのですか?
> for x in a_list if a_condition(x):
> do_something(x)
↓って言われちゃう。できないっぽいねぇ
for x in a_list if is_odd(x):
^
SyntaxError: invalid syntax
>>638 >修正が大変とかで上の文法は採用されなかったんだろか。
SyntaxError: invalid syntax ってなることからわかるように、
文法を変えないといけないからでしょ。
特定の場合に便利だからといって、どんどん文法を増やすと
それ以外の場合に却って使いにくくなったりするからねぇ。
書ける
for x in a_list:
if is_odd(x):
print x
書ける
for x in a_list:
if is_odd(x): print x
書けない
for x in a_list: if is_odd(x): print x
もうpythonじゃなくていいんじゃないの?
自分の好きな書き方が出来る言語を探せばいい
無ければ作ろう
お断りします
お断りします
お断りします
ハ,,ハ ハ,,ハ ハ,,ハ ハ,,ハ
( ゚ω゚ )゚ω゚ )゚ω゚ )゚ω゚ ) お断りします
/ \ \ \ \ お断りします
((⊂ ) ノ\つノ\つノ\つノ\つ)) お断りします
(_⌒ヽ ⌒ヽ ⌒ヽ ⌒ヽ お断りします
ヽ ヘ } ヘ } ヘ } ヘ }
ε≡Ξ ノノ `Jノ `J ノ `J ノ `J
なくなるなら宝石が先
いろいろ考えたけど
内包表記やラムダなどを駆使して関数的に美しく書くなんてのは
Python では目指さない方が良さそうだというところに落ち着いた
やって出来ない事はないけど、やっぱり関数型言語ではないので
関数的なスタイルで読みやすいコードを書くのは難しい。
凝ったことはせずに
素直に手続き的に書いて関数も一つ一つ def する
というのが Python のコツっぽいかな?
>>626 リンクのdive into python3はまとまっていてわかりやすそうかと思いました
python3を対象としていますが、今からpython勉強する場合は3がいいでしょうか?
なんか、ネット徘徊していると、2を勉強すべしとの意見も多いので困っています
よろしくお願いいたします
どっちかで迷うくらいなら、3系がいいと思うよ。
私は3系のみ勉強している。
2系を折角勉強したのに、3系では邪魔知識になるとか嫌でしょ。
既存のPythonの資産を使いたいとかなら、
2系の勉強も考えた方がいいかも知れないけど、
そうじゃないなら3系からの勉強でいいと思う。
>>646が、Pythonをなぜ使いたいのかが一番大きい。
Python3の現時点のデメリットは対応ライブラリが少ないくらいで至急何か作る必要がなければ困らないと思うよ
Python2は文字コードべったりなんでunicodeの暗黙の変換とかかなり分かりにくい
勉強するだけなら Python 3 でも構わないかもね。
現実に使うのは厳しいが。
どうしても、本人がどうしたいかになるんだよね。
u"3だと日本語書くためにいちいちuつけなくていいから楽"
全角だし
つ[from __future__ import unicode_literals]
>>649 目的が勉強だけって…
それはプログラミングやる意味ないんじゃ…
勉強の意味が
数学や英語の学業としての勉強じゃなくて、
学んでいるという意味の勉強じゃないのかな?
プログラム言語なんてその言語特有のお約束を覚えればいいだけじゃん
制御構文や変数はどの言語だって共通してるし
つまり
>>647 単純に、Linuxのソフトウェア調べる仕事していて、pythonのコードに出くわすことが多かったからです
今現在のLinuxで動いているpythonとすると2系が多いですかね
個人的には3が勉強したいですけど
658 :
デフォルトの名無しさん:2012/02/27(月) 23:24:21.45
Python製のフレームワークって今何がHOTなの?
ライブラリの多さがpythonの利点なんだし
Python3なんて選択肢に入らない
最初はどっちかに絞った方がいいと思ます。
二兎追うものは一兎も得ず
っていうじゃないですか。
どちらも理解できれば一番いいけど、そう上手くいくかな?
> Linuxのソフトウェア調べる仕事していて、pythonのコードに出くわすことが多かったからです
今度は、どんな目的で調べているかによる。なんつって。
範囲が広いんだよねー。
中身を読んでるってことですよね。
ふむ。
改良や開発目的で調べてるの?
そのソフトウェアの開発者達が、
後継の開発を2で行うって言ってるんなら、2の勉強だろうし、
3で行うってのが多勢なら3だろうし。
smtplibについて質問させてください。
会社のメールサーバーに対して
> telnet XXX.XXX.XXX.XXX 25
を実行するとうまくつながるのですが、
以下のように実行するとエラーが発生します。
原因が何かヒントをいただけないでしょうか。
import smtplib
s = smtplib.SMTP('XXX.XXX.XXX.XXX', 25)
c:\test\python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import smtplib
>>> s = smtplib.SMTP('XXX.XXX.XXX.XXX', 25)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\python27\lib\smtplib.py", line 242, in __init__
(code, msg) = self.connect(host, port)
File "c:\python27\lib\smtplib.py", line 302, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "c:\python27\lib\smtplib.py", line 277, in _get_socket
return socket.create_connection((port, host), timeout)
File "c:\python27\lib\socket.py", line 571, in create_connection
raise err
socket.error: [Errno 10061] 対象のコンピュータによって拒否されたため、接続できま
せんでした。
>>>
>>661 中身は読んでいますけど、ほとんど趣味ですね
会社から要求されているのは単純な使い方と性能のみ
でも、個人的に興味持って色々と調べています
ま、趣味なんで、3勉強してみます
こちらからもちょっと質問させて下さい。
> telnet
>>> import smtplib
って同一PCかつ同一OSでの実行結果?
それぞれの環境でpingがとおることは確認済?
まあ、これが答えのような気もするけど。
socket.error: [Errno 10061] 対象のコンピュータによって拒
否されたため、接続できませんでした。
665 :
デフォルトの名無しさん:2012/02/28(火) 01:20:53.58
scipyとmatplotlibが移植されたんで、自分的には3でも結構逝ける。
俺はいつも逝ってる
むしろ吊ってるし詰んでる
>605
>今までJava、C#しか経験していないため、変数に型が無い言語でどのようにすべきなのか良くわかりません。
>608
>いまいち、変数に型がないことによるメリットがわかりませんでした。
型はある
型宣言が無いだけ
>632
for x in filter(a_condition, a_list):
do_something(x)
ワッフル ワッフル
>>662 telnetでサーバからのリプライは確認した?
220 <ホスト名> ESMTP Sendmail ... とか返ってくるはずだけど
>>670 はい、返ってきました。
これがうまくいっているので、どうしてエラーが起こるのかわからないんです…
>>671 となるとちょっとわからない。ごめん
wiresharkでも使ってtelnetとsmtplibの通信内容を比べてみては
wiresharkじゃなくてdebug設定では
-v
-vvv
>>667 値に型があるんであって、変数に型はないでしょ
変数はオブジェクト型またはプリミティブ型もしくはNoneです
Pythonにはプリミティブ型なんて無い。
Noneもただのオブジェクト。
pythonにはオブジェクトしかない
お前もオブジェクトにしてやろうか
ひぃいぃ
ジェクジェクにしてやろう
壊れてすっかり職場のオブジェ
>>671 [Errno 10061] は、WSAECONNREFUSED のことだろうから、
接続先のサーバーで smtp サーバーが動作していない (正確には、
該当のポートをリッスンしている奴がいない) ことを示している。
本当に、telnet と同じサーバーに繋ぎにいこうとしてる?
もしくは、s = smtplib.SMTP('XXX.XXX.XXX.XXX', 025) なんてしてないよね?
>>684 > もしくは、s = smtplib.SMTP('XXX.XXX.XXX.XXX', 025) なんてしてないよね?
これはどうしてダメなんですか?
025のゼロがダメなんでしょうか。すいません。
>>> s = smtplib.SMTP('XXX.XXX.XXX.XXX', 25)
Traceback (most recent call last):
...
から見るにそんなことはしていなそうでしたが。
同一PCかつ同一OSでの実行結果?
それぞれの環境でpingがとおることは確認済?
とりあえず、pingは通りましたが送信できずに困ってますとかって言って欲しい。
良心的に見て
>>> s = smtplib.SMTP('192.168.080.025', 25)
とかがアウトっていう意味か
ping が通ったからと言って telnet (IP) 25 が通る保障はどこにもない
そしてpingが通らなくてもSMTP接続出来ることなんていくらでもある
そして>662を読めといいたい
クライアントの PC は同じ環境からアクセスしてんのかな
あと telnet するときの IP と smtplib.SMTP するときの IP
( XXX.XXX.XXX.XXX の部分 ) は本当に同じなのかな
pythonでインスタンスのアドレスを知る方法ってないんでしょうか?
ずっと勘違いしてて id でアドレス表示してるのかと思ったら
全然そんなことないですよね
id の仕様を見ても「識別子」としか明言してなくてアドレスだとは一言も言ってないし
help(id)
あってるよ
Python/bltinmodule.c [926/2392行][38%]
static PyObject *
builtin_id(PyObject *self, PyObject *v)
{
return PyLong_FromVoidPtr(v);
}
PyDoc_STRVAR(id_doc,
"id(object) -> integer\n\
\n\
Return the identity of an object. This is guaranteed to be unique among\n\
simultaneously existing objects. (Hint: it's the object's memory address.)");
696 :
デフォルトの名無しさん:2012/03/01(木) 15:22:17.92
あってるね
(1) (2) (3) を同じPC(Windows XP)で実行しました。
スクリプトからの接続を拒否する仕組みってあるのでしょうか?
-----------------------------------------------
(1) pingを実行した場合、以下のように成功します。
c:\test>ping 100.100.100.100
Pinging 100.100.100.100 with 32 bytes of data:
Reply from 100.100.100.100: bytes=32 time<1ms TTL=63
Reply from 100.100.100.100: bytes=32 time<1ms TTL=63
Reply from 100.100.100.100: bytes=32 time<1ms TTL=63
Reply from 100.100.100.100: bytes=32 time<1ms TTL=63
Ping statistics for 100.100.100.100:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
-----------------------------------------------
(2) telnet を実行した場合、以下のように成功します。
c:\test>telnet 100.100.100.100 25
220 xxx.xxx.co.jp ESMTP Postfix
-----------------------------------------------
(3) pythonを以下のように実行するとエラーが出ます。
c:\test>python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import smtplib
>>> smtplib.SMTP.debuglevel=1
>>> con = smtplib.SMTP('100.100.100.100', 25)
connect: ('100.100.100.100', 25)
connect: (25, '100.100.100.100')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\python27\lib\smtplib.py", line 242, in __init__
(code, msg) = self.connect(host, port)
File "c:\python27\lib\smtplib.py", line 302, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "c:\python27\lib\smtplib.py", line 277, in _get_socket
return socket.create_connection((port, host), timeout)
File "c:\python27\lib\socket.py", line 571, in create_connection
raise err
socket.error: [Errno 10061] 対象のコンピュータによって拒否されたため、接続できま
せんでした。
>>>
単にファイアウォールにひっかかってるだけじゃないの?
>>698 この先に進もうとしようとすると同じように失敗しない?
telnetでどうやってメール送れたの?
受信確認はどうやったの?
>>700 例えばノートンなんかに
(telnet.exeの通信は止められていないけど)
python.exeの通信が止められてる可能性があるってことか
ファイアウォールというかセキュリティソフトのチェックかもな
telnet.exe は既に許可ソフトに登録済みなのを自分で忘れてるだけだろ
かもとだろって、両立するの?
自然言語では両立するでしょ。
嘉本さんのこと言うなー
(馬)鹿本だろう
ぶるるるぁ
webページをダウンロードして内容をファイルに書くところで詰まってるんだけど、
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
open('D:\P/output.txt', 'w').write(mainline)
TypeError: expected a character buffer object
と出るんだけどどうしたらいいの書き込もうとする文字列が一定以上の量だとエラー出る感じだけど
type(mainline)
確認してみたら?
文字数が変わると内部でmainlineのtype変えてるんじゃないの?
import StringIO
open('D:\P/output.txt', 'w').write(StringIO.StringIO(mainline).getvalue())
>>699 >connect: ('100.100.100.100', 25)
>connect: (25, '100.100.100.100')
なんで二行でるんだ?
とりあえず、con = smtplib.SMTP('100.100.100.100') で試してみて。
>>700 多分、それはない。
もし、そうなら、10060 (WSAETIMEOUT) になるはず。
>>712 何度かためしましたが、確かに二行が表示されます。
> とりあえず、con = smtplib.SMTP('100.100.100.100') で試してみて。
やりましたが、結果は全く同じです。
ひとつわかったことがあります。
IPアドレスを100.100.100.100じゃなくて、でたらめな値に変えても全く同じエラーが発生します。
telnetを使って100.100.100.100 でメール送信できたので、ipアドレスが間違っていることはありません。
smtplib のソースにデバッグコードを埋め込んでどこまでうまく動いているか、切り分けするしかないんでしょうか。
ファイアウォールというかセキュリティソフトのチェック
telnet.exe は既に許可ソフトに登録済みなのを自分で忘れてるだけ
多分PCから出れてないわ
みんながいうようにファイア・ウォールが原因だと思うぞなもし
一度ファイア・ウォール、セキュリティ関係諸々を停止させてから試してみなよ
そしたら上手くいくと思う
localhost, 127.0.0.1だったらうまくいくんだっけか?
719 :
デフォルトの名無しさん:2012/03/03(土) 00:59:02.50
馬鹿には無理
すいませんけど、これからPythonを勉強したいんですけど、
Pythonには2と3があると聞きました。
今から勉強するなら3から始めたほうがいいのですか?
3はソフトが少ないので、2をやったほうがいいとも聞いたのですが。
どっちでも構わないけど自分が入門に使おうとしているサイトまたは
本で使われている系列に合わせるのが混乱が少なくていいと思うよ
書籍やネット上の情報は2のが多いんじゃね
2をやったほうがいい
>>723 できれば理由も教えて下さい。やっぱり
>>722 情報が多いのとソフトが多いからですか?
2を勉強して将来3をやると3に馴染みにくいとかありますか?
>>724 2系のよろしくない・思わしくない設計方針を3系で刷新してるんだ。
2から入ってPython2にドップリ浸かると、
Python2の洗練されていない思想を取り込むことになる。
現在では3系のために洗練した設計思想があるんだから、
2系の古い知識は知らなくてもいいじゃないかって思う。
綺麗なことだけ知っておけばいいじゃないですか。
ただ、2系でしか用意されてないlibraryを使いたいってんなら別だよ。
2系を使えばいいんじゃないの?って思う。
>>724 3の発展スピード<<学習スピードなら、2一択。
別に、プログラミング言語なんて何個やったっていいと思うけど
いや、PythonかScalaかC言語かって話じゃないんだ
2をやったら3が出来なくなるとか言ってるの?
誰もいってないぞ
どこにんなこと書いてあった?
>>729 ついつい2で書いてしまって3が身につかなくなる恐れがある(体験談)
何を言いたいのかよく分からん。初学者は2をやれば良いんじゃないの
2をやった上で3もやれば何故そうなっているのか理解が進む
2でも3でも基本は一緒
作ってる人も一緒
2.xをちゃんと理解してる人は
3.xへの移動も楽だしすぐ終わる。
横ですまんが2から3に移行されてないライブラリで影響の大きいのってどういうの?
>>735 Web フレームワークがほぼ全滅。
あと MySQLdb。
つまり LAMP 系は 3 では使いものにならない。
なんで3から2のライブラリとかモジュールとか使えるようにしなかったんだろう
ctypesでさえ出来てることなのに
そう思うならお前がやれ
/: : : : : __: :/: : ::/: : ://: : :/l::|: : :i: :l: : :ヽ: : :丶: : 丶ヾ ___
/;,, : : : //::/: : 7l,;:≠-::/: : / .l::|: : :l: :|;,,;!: : :!l: : :i: : : :|: : ::、 / ヽ
/ヽヽ: ://: :!:,X~::|: /;,,;,/: :/ リ!: ::/ノ l`ヽl !: : |: : : :l: :l: リ / そ そ お \
/: : ヽヾ/: : l/::l |/|||llllヾ,、 / |: :/ , -==、 l\:::|: : : :|i: | / う う 前 |
. /: : : //ヾ ; :|!: イ、||ll|||||::|| ノノ イ|||||||ヾ、 |: ::|!: : イ: ::|/ な 思 が
/: : ://: : :ヽソ::ヽl |{ i||ll"ン ´ i| l|||l"l `|: /|: : /'!/l ん う
∠: : : ~: : : : : : : :丶ゝ-―- , ー=z_ソ |/ ハメ;, :: ::|. だ ん
i|::ハ: : : : : : : : : : : 、ヘヘヘヘ 、 ヘヘヘヘヘ /: : : : : \,|. ろ な
|!l |: : : : : : : : :、: ::\ 、-―-, / : : :丶;,,;,:ミヽ う ら
丶: :ハ、lヽ: :ヽ: : ::\__ `~ " /: : ト; lヽ) ゝ
レ `| `、l`、>=ニ´ , _´ : :} ` /
,,、r"^~´"''''"t-`r、 _ -、 ´ヽノ \ノ / お ・
,;'~ _r-- 、__ ~f、_>'、_ | で 前 ・
f~ ,;" ~"t___ ミ、 ^'t | は ん ・
," ,~ ヾ~'-、__ ミ_ξ丶 | な 中 ・
;' ,イ .. ヽ_ ヾ、0ヽ丶 l /
( ;":: |: :: .. .`, ヾ 丶 ! \____/
;;;; :: 入:: :: :: l`ー-、 )l ヾ 丶
"~、ソ:: :い:: : \_ ノ , ヾ 丶
バイト列の途中の数バイトを除去する場合、
a_bytes = a_bytes[:n] + a_bytes[n + m:]
みたいなかんじでいいですか。
もっと賢い方法とかあるんでしょうか。
python 3.2.2 です。
>>743 a_bytesがリストなら、
del a_bytes[x:y]
745 :
743:2012/03/03(土) 23:55:03.91
>>744 すんません、書き方が悪かったでしょうか。バイト列ってのは bytes オブジェクト、
>>> type(a_bytes)
<class 'bytes'>
のつもりでした。
bytesって例外起こすでしょ?
bytearray()だったら話は分かるのだが。
つーことでお勧め
>>> n = 3
>>> m = 2
>>> a_bytearray = bytearray(b'abcdefgh')
>>> a_bytearray[:n]
bytearray(b'abc')
>>> a_bytearray[n:]
bytearray(b'defgh')
>>> a_bytearray[n+m:]
bytearray(b'fgh')
>>> a_bytearray[n:] = a_bytearray[n+m:]
>>> a_bytearray
bytearray(b'abcfgh')
747 :
743:2012/03/04(日) 00:58:06.01
>>746 > bytesって例外起こすでしょ?
そーなんですか、勉強します。
> bytearray()だったら話は分かるのだが。
> つーことでお勧め
(以下略)
なるほど、ありがとございます!!
bytesの方でこれやると例外吐くよ。
>>> a_bytearray[n:] = a_bytearray[n+m:]
なんか代入しようとすると駄目。
あと、id()の結果が上と下で変わるよ。
bytearrayでは変わらないけどbytesでは変わる。
つまり、bytesでは最初のa_bytesを削除している。
bytearrayはa_bytearrayを使い回している。
>>>id(a_bytes)
>>>a_bytes = a_bytes[:n] + a_bytes[n + m:]
>>>id(a_bytes)
>>> id(a_bytearray)
>>> a_bytearray[n:] = a_bytearray[n+m:]
>>> id(a_bytearray)
なんでこんな風になってるのか知らね。
なんかPythonって変更できるtypeできないtypeあるよね。
list() tuple(), bytearray() bytes(), set() frozenset()
これなんでなの?ここだけとっつきにくいと思う。
馬鹿には無理
numpyのarray型で特定の要素だけ加算したりすることは出来ますか?
a = array([[1,2],[3,4]])
a = a[1,1] + 3
で
[[1,2],[3,7]
みたいにしたいのですが,これを行うには行列の大きさを同じにしないと無理でしょうか?
それともこういうときはリスト使うものですか?
>>> a = numpy.array([[1,2],[3,4]])
>>> a
array([[1, 2],
[3, 4]])
>>> a[1,1] += 3
>>> a
array([[1, 2],
[3, 7]])
いつもお世話になっています。
xlrd というExcelの読み出しを行うモジュールを使ってセルの内容の読み出しを行っています。
古いバージョンのExcelのデータは何の問題もなく読み出せるのですが、最新のバージョンの
Excelのセルを読み出すと(文字列の場合)、
text:u'10\u53f0
という値が読み出せます。
ユニコードの値"53f0"(漢字の'台'です)から'台'に変換する関数、メソッドはあるでしょうか?
csvモジュールか何か使ってる?
とりあえずs.encode('utf-8')なりs.encode('cp932')とか
それは別に Excel のバージョンと関係なくて、単にデータに日本語が
はいってるだけでは?
xlrd は Unicode に対応しているから、普通の unicode データとして
扱えばよろしいです。
> ユニコードの値"53f0"(漢字の'台'です)から'台'に変換する関数、メソッドはあるでしょうか?
という言葉の意味がわからないのですが、もし str 型に変換したいと
いう意味でしたら、encode します。
>>754, 755
すいません、以下のようにしたらうまくいきました。
>>> s = u'\u53f0'
>>> print s
台
ありがとうございました。
えっ
えっなにそれ怖い
で、次に出力をリダイレクトしてまたはまると。
760 :
デフォルトの名無しさん:2012/03/04(日) 17:41:32.52
2.x の repr や str は ASCII の制限を引きずってるからな
すいません、やっぱりうまくいきません。
str型に '53f0'が格納されているとき、'台'に変換する方法をご教授いただけないでしょうか。
>>761 文脈気にせずその質問にそのまま答えるなら
unichr(int('53f0', 16)).encode('utf8')
馬鹿には無理
初心者です。
pythonのCGIで、サーバ上のXMLファイルを開き、
要素の変更・追加・削除等をして、そのファイルを上書き保存することは可能ですか?
イメージとしては、XMLファイルの内容を全て変数に保存し、
ファイルの中身を全て消してから、保存した変数の値を書き込むのでしょうか。
ググりましたが、コレという記事がありませんでした。
定石(常識)があればご指導お願いします。
可能
767 :
765:2012/03/05(月) 08:23:35.21
具体的にはどういったライブラリを使えばいいですか?
cgiとElementTreeあたり
lxmlが定番だけど、大掛かりなことせず標準ライブラリで済ませたかったらminidomとか。
770 :
765:2012/03/05(月) 13:49:10.98
Beautiful Soupも忘れないであげてください
>>771 大丈夫ですよ、この私がpython for androidでスクレイピングに使ってますよ
ってことは落ち目ってことかーちぇー
この私を愚弄するのですか!!!
まあいいです
ねえおっさん、今いくつ?
いい年してノリノリで言ってて恥ずかしくない?ねぇ?
すみません、調子に乗りました
19の浪人生です(^q^)
謝ってやんのかっちょわりー
なんでお前はいつもそう、中途半端なんだ
一つのことをきちんとやりきりなさい
そんなだから浪人なんかするんだ
Scrapyはあんあり使われてないのはなんでなん?
>>772 python for androidって使い勝手とかどうなの?
ちょっと気になってる
>>779 割と普通の2.6として使えますね
内蔵エディタと外部エディタを好みで選べていい感じです
android独自拡張をimportすれば読み上げや通知メッセージ、ダイアログなんかも出せます
外部モジュールはSDカードに適当に展開してパスを通せば動きます
honeycombタブレットにUSBキーボードを繋げてやってますが、取りこぼしも皆無でそこそこ快適ですね
782 :
デフォルトの名無しさん:2012/03/06(火) 14:38:20.42
pythonを頑張って勉強したら何が作れんの?
超初心者だから何も分からないので
783 :
デフォルトの名無しさん:2012/03/06(火) 14:54:45.02
784 :
デフォルトの名無しさん:2012/03/06(火) 15:02:03.73
皆さんはプログラミングで最終的に何かやってやると思ってされてるわけですか?野望的な
ElementTreeで書き出したxmlファイルは、一行に入れ子のタグが書かれているんだけど、
これを人の目で分かりやすいように整形する簡単な方法はありますか?
prettyなんちゃらしかない?
お前らすごいけど、ネタソフト作ってんじゃねーよ
Sage は数学の非常に幅広い分野をカバーするソフトウェアである。その
範囲は計算機代数、組み合わせ、数値計算など多岐に及ぶ。工学的応
用に加え基礎科学の研究もカバーしている。
Sage は2005年2月24日にフリーソフトウェアとして GNU General Public
License の元で最初のバージョンが公開された。その開発目的は Magma、
Maple、Mathematica (いずれも計算機代数ソフトウェア)、MATLAB の代替
となるフリーかつオープンソースなソフトウェアを提供することであった[1]。
チュートリアルで煮詰まったのでipythonを試してるんですが
shプロファイルはどう呼び出せばいいんでしょうか?
それから%run?のようなマジックファンクションのリファレンスを引くと
エスケープシーケンスが生のまま表示されます。
解決策を教えてもらえませんか?
バージョンは
ubuntu10.04
bash4.1.5
urxvt9.06に256色パッチ当てた物
python2.6.5(プリインストール版)
ipython0.12 です。
789 :
デフォルトの名無しさん:2012/03/06(火) 19:15:56.19
MacOSX Lion
Python 2.7.1
wxPython 2.8
class MyFrame(wx.Frame):
>def __init__(self, parent, id, title):
>>wx.Frame.__init__(self, parent, id, title, size=(390, 200))
>>panel = wx.Panel(self, -1)
>> ・
>> ・
>> ・
>>tc3 = wx.TextCtrl(panel, -1)
>>btn = wx.Button(panel,-1 ,'Start', (70, 30))
>>self.Bind(wx.EVT_BUTTON, self.Print, btn)
>> ・
>> ・
>> ・
>def Print(self, event):
>>print self.tc2.GetValue()
#oppao
app = wx.App()
MyFrame(None, -1, 'uites.py')
app.MainLoop()
このような感じで書いてるんるんだけど、実行すると
AttributeError: 'MyFrame' object has no attribute 'tc2'
とエラーが出てしまう・・。
ボタン押した時にprint self.tc2.GetValue()したいけどオブジェクトにtc2の属性がないと言われてもよくわかりません。
どういうふうに記述すれば良いのでしょうか。教えてもらえると助かります!お願いします。
self.tc2 = wx.TextCtrl(panel, -1)
792 :
デフォルトの名無しさん:2012/03/06(火) 22:49:15.63
ぎゃああコピーミスった
print self.tc2.GetValue()でした
えっ?
794 :
デフォルトの名無しさん:2012/03/06(火) 22:59:16.57
うおおおお
print self.tc3.GetValue()だよ!
人間寝ないとだめですね
795 :
デフォルトの名無しさん:2012/03/06(火) 23:14:23.16
みんなのPython Webアプリ編
って本がLindocで無料公開されてるね
Lindocに会員登録すると無料でダウンロードできる
今月いっぱいまでだから速攻落とした。連投スマソ 寝てきます
前は登録なんかしなくても落とせたんだけどな
売れないからpdfで配布してんだろ
買ってしまった人には還金しろ
798 :
デフォルトの名無しさん:2012/03/07(水) 19:11:00.17
diclistって無いの?
>>>diclist = []
>>>diclist["一つ"] = "人より力もち"
>>>diclist["二つ"] = "故郷後にして"
>>>print diclist[0]
人より力もち
>>>print diclist["二つ"]
故郷後にして
みたいなの。
これどうするつもり何?
>>>diclist = []
>>>diclist["一つ"] = "人より力もち"
>>>diclist["二つ"] = "故郷後にして"
>>>diclist[0] = "いろはにほへ"
>>>diclist[1] = "とちりぬるを"
keyとして数値を使用させないclassを自作するくらいしか手はないね。
801 :
798:2012/03/07(水) 20:59:30.21
似たようなものを作ってしまってから、幾ら何でも用意されていないのはおかしいと思ったので尋いたんだよぅ。
>>799 それは上書き。
>>>diclist["一つ"]
いろはにほへ
>>>diclist[0]
いろはにほへ
どうでもいいことだが「いろはにほへ」で区切る例を初めて見た。
死ね
なんか、Pythonスレといいここと言い荒らしがいるねー
>>801 799の言ってる意味が分かってないでしょ
805 :
801:2012/03/07(水) 22:37:26.19
真面目な質問なのに、どこが荒らしやねん。。。
>>804 >>801に書いた返答が的外れなら、たぶん分かってないと思う。
ああPHPのあれね
diclist.values()[0]
% python
Python 2.7.2 (default, Jan 31 2012, 13:19:49)
[GCC 4.6.2 20120120 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from collections import *
>>> od = OrderedDict(a=10, b=20, c=30)
>>> od.values()
[10, 30, 20]
アルェー
キーワード引数だと最初に通常の辞書に変換されるんじゃね
>>805 d[N]としたたとき
keyとしてのNなのかindexとしてのNなのかが曖昧だから
>>809 od = OrderedDict(a=10, b=20, c=30)
は
od = OrderedDict({'a':10, 'b':20, 'c':30})
つまり
d = {'a':10, 'b':20, 'c':30}
od = OrderedDict(d)
と同等だからね
真面目な質問です。
Python で、
'ffab05ff'
という文字列から、
'\xff\ab\05\xff'
という文字列に変換するにはどうすれば良いのでしょう?
元の文字列は 0-9 a-f しか使われておらず、
文字列の長さは必ず偶数ですが、最大長は不明です。
訂正します。
誤 '\xff\ab\05\xff
正 '\xff\xab\x05\xff
>>> import binascii
>>> binascii.unhexlify('ffab05ff')
'\xff\xab\x05\xff'
s = 'ffab05ff'
i = iter(s)
struct.pack('>%dB' % (len(s) / 2), *[int(''.join(_), 16) for _ in zip(i, i)])
出来ました。
ありがとうございました。
真面目な質問です。
a = 1 if b == 0 else 2 if b == 1 else 3
と
a = 1 if b == 0 else (2 if b == 1 else 3)
は等価ですか?
a = 1 if b == 0 else 2 if b == 1 else 3
と
a = (1 if b == 0 else 2) if b == 1 else 3
は等価ではないですか?
a = 1 + 2 if b == 1 else 3
と
a = 1 + (2 if b == 1 else 3)
は等価ですか?
a = (1 + 2) if b == 1 else 3
は等価ではないですか?
821 :
805:2012/03/08(木) 07:57:19.15
おはよう!!
>>809 ああ、たぶん OrderedDict が求めていたものみたい。
たぶんというのは実行環境(python 2.6)では使えないようなので。
結局、上述 diclist みたいな?は無いので自作classを使うしかないと解った。
皆さんありがとうございました。
ぶちゅー <- 御礼の接吻
大失敗した、助けるんじゃなかった;;
黙っておくべきだった;;
>>821 Python 2.6 では easy_install ordereddict
して
from ordereddict import OrderedDict
とすれば OK のはず。
pythonのpublic private protectedってrubyみたいに独特なものですか?
ちゃんとJavaみたいにアクセス権できてますか?
_ および __ による超強力なアクセス制限機構を備えておりますが何か
_人人人人人人人人人人人人人人人人人人_
> Ruby初心者スレの残党がいたぞ殺せ! <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
三 ( ^P ( ´P)( ^P)
三 ( ∪ ( ∪ ー(‐∪─→
三 / 》 ̄ 》 ̄ ̄ 》  ̄\
三三 | U U U ・ |
三 と| ι| | 三┏(;´R`)┛三┏( ;´R`)┛三┏( ;´R`)┛
三 /_∧∨ ̄ ̄ ̄ ̄/_∧U 三 ┛┓ 三 ┛┓ 三 ┛┓
>>819 よく分からんけど考える必要ないでしょ
そんな糞な考えせんから分からん
試す気にもならん
これって許されていいの?
例外吐いてくれる所じゃないの?
>>> a = 8,
>>> a
(8,)
それ要素がひとつのタプルだけど別にいいんじゃない?
833 :
デフォルトの名無しさん:2012/03/08(木) 20:30:35.18
あるリストから、条件にマッチする最初の要素を取り出すのって、Pythonではどうかきますか。
Rubyなら list.find {|x| x == foobar } と書くやつです。
[ x for x in list if x == foobar ][0] かなとおもったけど、マッチしない時に例外が。
([ x for x in list if x == foobar ] + [None])[0]
try ... exceptで振り分けて処理するんじゃないかな
空リストだったらIndexErrorが上がってくる
try except書くくらいならwhile break書いたほうが良くね
それはないか
>>834-836 いい方法なさそうですね。
for x in list:
if x == foobar:
break
else:
x = None
いけてねー!
もっといい方法を求む!
例外起きたらそこでこかしたままでええんちゃうん?
条件に合わないもん突っ込んどった方が悪いんちゃうん?
要素が整数や文字列で、リストに同値が含まれているか調べるだけなら
>>> 3 in [1,2,3]
True
>>> 4 in [1,2,3]
False
next((x for x in list if x == foobar), None)
そんな関数があったのか
わかりやすくって怒られるぞ
素直に例外出すべき事例だろ
forでぶん回してbreakで抜ける。これで勝つる
forにelseをつけるのはインデントミスくさくていけてない
847 :
デフォルトの名無しさん:2012/03/09(金) 15:06:52.63
789ですが解決しました
class Tc:
def __int__(self, textctrl1, textctrl2, textctrl3):
self.tc1 = textctrl1
self.tc2 = textctrl2
self.tc3 = textctrl3
こんな感じでべつにクラス作ってprint self.tc3.GetValue()したらできた。
しかし強引な気もする
それ、解決っていうのか?
というか
>>790で回答されてるじゃないか
x tc3 = wx.TextCtrl(panel, -1)
o self.tc3 = wc.TextCtrl(panel, -1)
インスタンスへの参照をselfで指定してないからエラーになる
個人的にはPythonから勉強したいのですが日本ではRubyのほうが仕事があるような感じなので
どちらを選択していいのか迷ってます
ここの先輩方は何故Pythonを選んだのでしょうか?
>>850 Rubyのほうに枯れているライブラリがない場合に(略
goooooooooooogleには巻かれろが家訓なので
Rubyは初めてソースを見たときに気持ち悪くなったから使っていない
「みんなのPython」のタプルの説明のページ、例として挙げられているのが、
IPとドメインネームの対応表で、IPアドレスがタプルにして、それをキーにした
辞書としているんですけど、これって文字列でも実現できますよね。
わざわざタプルの例にするメリットなんなのでしょう?
読んだけど説明がありませんでした。
IPアドレスだと意味ない。
IPアドレスとポートのタプルみたいなのだと意味あるかもしれん。
バーチャルホストか何かの話?だとしても辻褄が合わないので見てみた
初版64ページ
>>> ipmap = { (0, 1, 2, 3):"host.name.com",
... (0, 2, 1, 3):"some.dname.com" }
朝からごめん
>>857 タプルをキーに出来るけど
リストはキーに出来ないとか
そういう説明なら良かったのにね
IPアドレスってタプルで表現する意味ないよね
ダメな本だなあ
CUIのアプリケーションを作ろうとしています。
cmd や sys を使えば、「keyword+return」 で処理が出来ますが、
「半角英数一文字」のみで処理をする方法は有るのでしょうか?
>>862 cursesのgetchでいけると思う
Windows環境で、以下のスクリプトを実行するとエラーが発生します。
回避方法をご教授いただけないでしょうか。
path = 'c:\' + path
以下、エラーの内容
D:\test>python file_delete.py
File "file_delete.py", line 34
path = 'c:\' + path
^
SyntaxError: EOL while scanning string literal
>>863 ありがとうございます!出来ました!
>>864 ありがとうございます。
実はマカーでして、OSX/Ubuntu辺りをターゲットにしていました。
書かずにスミマセンorz
base, query_str = url_string.split('?')
とすると、url_string に '?' がふくまれているときは動きますが、
ふくまれていないときはエラーになります。
これを避けるには
lst = url_string.split('?')
if len(lst) == 1:
base = lst[0]
query_str = None
else:
base, query_str = lst
とする必要がありますが、いくらなんでも面倒です。
もっと簡単にする方法はありませんか。
base, query = url.split('?', 1) if '?' in url else (url, None)
Python3.xでCGIで動かせるCMSでこのソースコードは読んで勉強しとけっていうお勧めのありますか?
関数の引数として受け取った値が、リストなら をするという処理を書きたいのですが、
変数がリストかどうかをチェックするにはどうすればよいでしょうか?
isinstance(hoge, list)
質問させてください。
python 3の勉強を始めたものです。
現在、クラスを実装し、そのインスタンス変数をカプセル化する方法を調べています。
とりあえず、デコレータ(@...)を使う方法と組み込み関数(propery(...))を使う方法があるとわかったのですが、python 3ではどちらが推奨なのでしょうか?
また、そのgetter、setterを作りたいのですが、インスタンス変数が"__abc"の場合、名前はどのようにすべきでしょうか?
単純に"abc"なのか、get(or set)abcなのか、それ以外の規則があるのかよくわかりません。
よろしくお願いいたします。
dat=[{'dic': {'data1': 1, 'data2': {'data4': 'str1', 'data3': 4}}},
{'dic': {'data1': 2, 'data2': {'data4': 'str2', 'data3': 5}}},
{'dic': {'data1': 3, 'data2': {'data4': 'str3', 'data3': 6}}}]
このようなリストを"data4"でソートする方法を教えて下さい
よろしくお願いします
>>865 path = r'c:\' + path
>>875 datの形式自体を見直した方がいいと思う
>>878 ちょっとサンプルがダメすぎましたね Dict in Dict ならなんでもいいんですがちょっとひねりすぎました
実際にはJSONなのでもうちょっと複雑です
>>875 print("before")
for x in dat:
print(x['dic'])
print("----------------------=")
dat.sort(key=lambda x:x['dic']['data2']['data4'], reverse=True)
print("after")
for x in dat:
print(x['dic'])
path = os.path.join('c:/', path)
これから勉強する場合pythonってまだ2.7使ったほうがいいものですか?
a)次の式を因数分解せよ。
1) x**3 + 1
2) 2 * x**3 - 16
3) 27 * x**4 - x
4) x**6 - y**6
>>884 やりたいことによると思います。
自分の使いたいライブラリや改造したいソフトウェアが2系なら、2系しか無いでしょう。
勉強したいだけ、もしくはフルスクラッチで何かつくるなら、3系がお勧めです。
b) a = √8 + 1 の小数部分を b とするとき
a**3 + 3 * a * b + b**2
の値を求めよ。
学校の宿題をここに書くなよw
c) x を変数とする関数を f(x) = (a + 1)**2 - 2 * x + 1 とする。
0 <= x <= 1 の範囲でこの関数の最小値は a の関数で表わされる。
これを m(a) とする。
m(a) を求めよ。
宿題じゃなくて理解確認テストです。
numpy とか sympy とか使ってサクサクっと解いて見てください。
課題は自分で解きましょう
実行結果だけ示せばいいってことだよな?
>>886 とりあえず3.2から勉強したいと思いますが3.3が出るらしいので3.3が出るまで待ちます
894 :
デフォルトの名無しさん:2012/03/13(火) 09:34:41.21
andoroid向けはSL4Aぐらいしかないですか
>>893 さすがにその必要はないと思う・・・
先延ばししたい言い訳なら留めないけど・・・
何か3.0〜3.2と3.3はまた仕様が変わるからって言われたんですよ
>>896 3も結構ドラスティックに変わってるから4からやるといいんじゃないかな
でも4もまた色々変わって5になると思うし、
4になってからすぐにはじめるというのもどうかな?とは思う。
こっからは真面目な話なんですけど、
zshrcには以下の設定をしています。
alias grep='grep --color'
vim上で
:!grep aaa a.txt
とした時に検索結果に色付けをしてくれません。
これはvim側の問題でしょうか?それともzsh側の問題でしょうか?
全然真面目じゃない件。
Python2.6です
携帯で自分の書いた絵を写真に取ったんだけど
斜めに取れてしまう。
アプリとかで撮った写真をきっちり正面から取ったように
自動で加工してくれるっていうのがあるってきくけど
スマホ持ってない。
それでPC用のを自作しようと思ったんだけど
PILに画像の自由変形のコマンドがなさげなんだけど
どうしたらいいんだろうか?
901 :
900:2012/03/13(火) 21:32:05.03
自分的には
1、撮影した紙の縦横の比率を入力
2、写真上の紙の4隅を指定
3、4隅を1で指定した比率で変形
とか以外と簡単じゃん?とか思ったけど
持ってる本には.rotateと.resizeぐらいしか
関係ありそうなものは無かった
gimp python
903 :
900:2012/03/13(火) 22:11:14.46
あーgimpをpythonコマンドで
動かす奴かぁ・・・
盲点だったわ・・・
905 :
デフォルトの名無しさん:2012/03/14(水) 21:15:26.39
【政治】知られざる危険性…近く閣議決定されるとの情報がある亡国の法案=“人権救済機関法案” 自民・稲田議員が警告★3
http://uni.2ch.net/test/read.cgi/newsplus/1331711675/22 ↑
電話番号、アドレスの詳細
電話は勇気ないという人でも、せめてメールくらいは送ってみて
◆◆◆◆◆◆拡散に 御協力 お願いします◆◆◆◆◆◆
人権侵害救済法(人権委員会設置法案)に反対する声明を、
一般の方々が電話及びFAX抗議してもらうためのチラシを作成(訂正)しました。
人権委員会設置法案(人権侵害救済法案)が3月中下旬に閣議決定されるかも知れません。
1通でも多く反対メール・電話・FAXをよろしくお願い致します。
3枚組みで、1・2枚目は人権法案の危険性を訴える内容の例文。
電話で読み上げるなり、そのままFAX送信できるようにまとめています。
また各自が意見を追加できるように空欄を入れました。
(FAX送付のために文字を大きくしました)
3枚目は、政党や主要閣僚の電話・FAX連絡先を一覧にしています。
特に、保守派とされる自見庄三郎 (郵政大臣;国民新党)、
松原 仁(国家公安委員会委員長)へ集中してFAXお願いいたします。
さらに連立与党の国民新党の亀井静香代表宛にもお願いいたします。
あまりに危険な人権侵害救済法案・法務省がQA
■久々の本気でおねがいします2!!人権擁護法案!! ひめのブログ
http://bbs.unionbbs.org/test/read.cgi/news/1323182085/37
C, Java, C#使いです。
変数に型が明示できない言語を始めて勉強しているのですが、利点がいまいちわかりません。
pythonの利点がわかる解説やソースコードを紹介していただけないでしょうか?
よろしくお願いいたします。
907 :
デフォルトの名無しさん:2012/03/14(水) 23:29:30.57
すみません。
連続で質問させてください。
今、戻り値を3個返す関数を作っています。
その関数の3個の戻り値を別々のリストに入れたいのですが、どうすれば短くかけるでしょうか?
今は、
a, b, c = hoge()
a_list.append(a)
b_list.append(b)
c_list.append(c)
みたいな書き方になっています。
良い方法があれば教えてください。
よろしくお願いいたします。
list(hoge())
for f,v in zip([a_list,b_list,c_list],list(hoge())): f.append(v)
いまいちだな
for ch in ['a', 'b', 'c']: exec "%s_list.append(%s)" % (ch, ch)
説教が来ても文句は言えないな
map(list.append, (a_list, b_list, c_list), hoge())
>>906 「T型の要素を集めたリストと、T型の値と、『T型の要素を集めたリストと、T型の値の2つを引数にとり、T型の要素を集めたリストを戻す関数』の3つを引数にとり、T型の要素を集めたリストを戻す関数…ただしT型とは呼び出し側が自由に指定出来るものとする」
…なんてのを明示したくないなあ
Pythonを始めとして最近のスクリプト言語は
関数自体を引数に渡したりとか日常的にやるから型を明示すると複雑になりがち
実際は自分のスコープで気にする型情報なんてそのごくごく一部なわけで…
静的型言語と呼ばれるものでも、型推論などの形で
明示せずに済む方法があったりするよ
>>907 職場だと、そのままにしておかないと不評をくらわないか
>>914 問題は、b_listが実はlistを継承した俺様list型オブジェクトで、
appendがオーバーライドされてた時にハマる、ってことだが。
追加。
Python3ではmapはリストではなくイテレータオブジェクトを返すから、
mapしただけでは中身が実行されない。
ありがとう
英語わからないせいでjavascriptしか勉強出来なかったんだ
がんばる
ありがとうを撤回する
920 :
デフォルトの名無しさん:2012/03/15(木) 20:18:40.16
テキストエディタは何がおすすめ?
eclipse見たいな統合開発環境じゃない、普通のエディタがいいです
IDLEじゃないのがいいです
情報おねがいいたします
vim
vimにもう一票 gVimにしとけ
大昔に、gVimをwindowsで使ってみたけど、インデントに違和感があった記憶がある
秀丸
それはテキストエディタの原点である。
かつて世界を震撼させたWindows95のような存在である。
秀丸こそが真のテキストエディタであり
その王者の貫禄を見せ付け今も人気のテキストエディタである。
ひでまるおってちゃんと税金払ってたのかな?>シェアウェア収入
禿丸かぁ。覚えとこ
NotePad++
Emacsの使えない自分は
vim ? SPE or PyScripter ? Eclipse&PyDev
で使い分けてる
IDEとかエディタとか色々調べるのが面倒だから、vim一択やな(´・ω・`)
sublime
SL4Aの標準エディタ
地味に使いやすい
vimで=の自動整形がうまくいかないんだけど
vim派の人はどうしてるのん
>>933 そもそも=コマンドで自動整形出来るのって本来はC言語とLispだけじゃ?
たまたまそれらの言語に準じた文法だと適用出来たりするだけで…
というか、インデントがブロックであるPythonで
あまり自動整形に任せたいと思ったことがないんだが
(変なインデントにされたらバグりかねんし)
どういうのを自動整形したいの?
935 :
デフォルトの名無しさん:2012/03/16(金) 20:07:26.67
その一行ではなく他でエラー起こしてるんじゃない?
エラーメッセージと該当箇所を前後ふくめてそのまま貼ってみて
938 :
デフォルトの名無しさん:2012/03/16(金) 20:31:01.23
>>936 エラーメッセージです。
File "setup.py",line 5
from cx_Freeze import setup, Executable
^
SyntaxError:invalid character in identifier
^の位置はsの下です。
コード
# cording: utf-8
# cx_Freeze 用セットアップファイル
import sys
from cx_Freeze import setup, Executable
#セットアップ
base = None
sys.platform == 'win32' : base = 'Win32GUI'
# exe にしたい python ファイルを指定
exe = Executable(script = 'helloworld.py',
base = base)
# セットアップ
setup(name = 'sample',
version = '1.0',
description = 'converter',
executables = [exe])
>>938 > from cx_Freeze import setup, Executable
全角空白が入ってるよ
940 :
デフォルトの名無しさん:2012/03/16(金) 21:02:08.24
>>939 ありがとうございます。
今度は
File "setup.py", line 10
sys.platform == 'win32' : base = 'Win32GUI'
^
SyntaxError: invalid syntax
と出てきたのですが...
教えて頂きたいです。
941 :
デフォルトの名無しさん:2012/03/16(金) 21:43:36.19
940です。
解決しました。
算数の式の立て方レベルでつまずいている気がするのですが、教えてください。
問
アメリカでは、1ガロン当たりのマイル数で車の燃費を測ります。
しかし、メートル法では、100km当たりのリットル数で計算されるのが普通です。
1ガロン当たりのマイル数から100km当たりのリットル数に変換するconvert_mileageという関数を書いてください。
というものです。(オライリーの始めてのコンピュータサイエンス 2.10 練習問題)
どうかご教授ください。
ただの単位変換だが
>>942 1ガロンが何リットルか、1マイルが何キロメートルかは調べたの?
>>944 問題としてはこのままなのです。
ググったところ、1ガロンで3.7…リットル、1マイルで1.6…kmでした。
日本だとどっちでもなくて、km/L だからねえ。
>>942 それはさすがに小学校からやり直せとしか言えない。
まだ小学生だったらすまん。
km/Lに変換することとは問題の難易度が変わるの?
逆数になっているから、ただの単位変換ではないな。
悩むほどの問題じゃないとはおもうけど。
>>949 なじみのない単位を、別のなじみのない単位に変換しても、
答が正しいかどうか常識で判断できないので、難易度が上がる。
K&Rでも、Hello world の次の例題は摂氏・華氏変換だし、
初心者スレとして悪くない題なんじゃないかとは思うが。
そもそも1ガロン当たりのマイル数に馴染みがないからなあ
>>933 自分は、vimに元々入っている、python用のインデント設定ファイルを削除して、自分でインデントやるようにしています
なんか、間違った使い方の気もしますが、どうなんでしょ?
>>948 勉強をしてこなかったつけが回ったのだと思います。
ガロンあたりのマイル数をxとすると
1ガロンで走行できる距離はxマイルである。
1マイルをaキロメートルとすると
1ガロンで走行できる距離はaxキロメートルになる。
次に1ガロンをbリットルとすると
bリットルで走行できる距離はaxキロメートルになる。
したがって1キロメートルの走行に必要なリットル数はb/ax、
100キロメートルの走行に必要なリットル数は100b/axとなる。
知的障害者がわいてきたな
>>959 目が覚めたら噛み砕きます!ありがとう!!
>>963 なんだこれーーー!!!
いただくありがとう!
ん?
戦車だとリッター200メートルとかだぞ。
そのかわり、燃料タンクがアホみたいにデカい
python3.x系で書ける無料クラウドサービスってありませんか?
['a', 'b', 'c']と['c', 'd', 'e']とがあって、重複しないものを選んで合体させたいんですが、
一番スマートな方法は何でしょうか。
cが重複するので['a', 'b', 'c', 'd', 'e'] になって欲しいです。
>>> L1, L2 = ['a', 'b', 'c'], ['c', 'd', 'e']
>>> set(L1) | set(L2)
{'a', 'c', 'b', 'e', 'd'}
>>> list(set(L1) | set(L2))
['a', 'c', 'b', 'e', 'd']
>>> u,i=numpy.unique1d([2,1,3]+[3,4,5], return_index=True)
>>> list(u[i.argsort()])
[2, 1, 3, 4, 5]
975 :
デフォルトの名無しさん:2012/03/20(火) 02:24:21.83
2つのcsvファイルから、差分があるレコードを抽出するには、どう書けばいいですか?
csvモジュールを使って、リストとして読み込み、同一のレコードがあるかはindexで調べられたのですが、差分があるレコードの抽出方法がわからないです。
例:['Key1','Key2','val']でvalの値が違うレコードを抽出
>>975 >>> [1,2,3]==[1,2,3]
True
>>> [1,2,3]==[10,20,3]
False
>>> (lambda x,y : x[2]==y[2])([1,2,3],[10,20,3])
True
>>> L1, L2 = ['a', 'b', 'c'], ['c', 'd', 'e']
>>> set(L1).union(L2)
set(['a', 'c', 'b', 'e', 'd'])
text0 = "test0"
text1 = "test1"
text2 = "test2"
のとき、
for i in range(3):
print textのi番目
のようにiを動かすだけで、全部のtext*をモニタに表示するにはどうすれば
よいのでしょうか?宜しくお願いしますm(_ _)m
特別な理由がなければ
textlist = ["test0", "test1", "test2"]
for i in range(3): print textlist[i]
がおすすめ
訂正
for text in textlist: print text
>>> text0 = "test0"
>>> text1 = "test1"
>>> text2 = "test2"
>>> for t in zip(text0,text1,text2):
... print(t[0],t[1],t[2])
...
('t', 't', 't')
('e', 'e', 'e')
('s', 's', 's')
('t', 't', 't')
('0', '1', '2')
>>> for t in zip(text0,text1,text2):
... print(t)
でもよかったな。
984 :
979:2012/03/20(火) 12:48:51.72
>>983 教えてくださって、ありがとうございます。
ただ、そのやり方では100個のファイルfile001.gif〜file100.gifを
を読み込む場合、全てfile001からfile100まで登録しないと
駄目なような気がします。for文で一括して登録する方法は
無いのでしょうか?
import glob
fnames = glob.glob("./imgs/file*.gif")
fnames = ["file{:03}.gif".format(i) for i in range(1, 101)]