くだすれPython(超初心者用) その12at TECH
くだすれPython(超初心者用) その12 - 暇つぶし2ch1:デフォルトの名無しさん
11/11/24 15:22:07.02
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

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

前スレ
くだすれPython(超初心者用) その11
スレリンク(tech板)
関連スレ
Pythonのお勉強 Part45
スレリンク(tech板)
◆関連リンク
Python の Home Page
URLリンク(www.python.org)

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

2:デフォルトの名無しさん
11/11/24 15:26:55.93
最新版直リン - 2.Xが推奨。3.Xはライブラリやドキュメントが使えないことも
URLリンク(www.python.org)
Python のコーディングガイド PEP8
URLリンク(www.python.org)
Python のコーディングガイド PEP8 - 日本語訳
URLリンク(www.oldriver.org)
日本語文字列コード問題まとめ
URLリンク(python.matrix.jp)
インタラクティブモードのエンコード
URLリンク(python.matrix.jp)
SJISから卒業出来ないひとのための禁じ手
reload(sys); sys.setdefaultencoding('cp932')
Pythonの文字化け対策:sys.setdefaultencodingの謎
URLリンク(hain.jp)
実行時にdefaultencodingを変更する
URLリンク(d.hatena.ne.jp)
PEP-8とか
URLリンク(www.python.org)
URLリンク(oldriver.org)
Google Python Style Guideとか
URLリンク(google-styleguide.googlecode.com)
URLリンク(works.surgo.jp)


3:デフォルトの名無しさん
11/11/24 15:40:31.06
>1 乙

4:デフォルトの名無しさん
11/11/24 17:21:16.58
辞書型で、値の最大値のキー値を求めたいのですが、スマートなやり方ないですか?
d = {0:1,1:2,2:3,4:5,6:7}
list(d.keys())[ list(d.values()).index(max(d.values())) ]
6

もっとスマートな方法ないですか?
Python3.1です

5:デフォルトの名無しさん
11/11/24 17:32:55.92
>>> from operator import itemgetter
>>> max(d.items(), key=itemgetter(1))
(6, 7)
>>> max(d.items(), key=itemgetter(1))[0]
6

6:デフォルトの名無しさん
11/11/24 17:38:17.38
超初心者的には遅そうで心配

7:デフォルトの名無しさん
11/11/24 17:41:20.40
max(d.items(),key=lambda x:x[1])[0]
ってのでも出来るんですね
出来れば処理速度が早いのがいいです
Cythonでコンパイルして利用します

8:デフォルトの名無しさん
11/11/24 18:09:56.51
type()で返ってくる<type 'type'>の解釈を教えてください。

9:デフォルトの名無しさん
11/11/24 19:23:32.09
>>2
勝手に2.X推奨すんなボケ。
男なら迷わず3.Xだろ。
女子供はひっこんでろ。

10:デフォルトの名無しさん
11/11/24 19:38:07.28
さくらのサーバが2、6じゃん

11:デフォルトの名無しさん
11/11/24 19:39:34.36
2.Xマンセー

12:デフォルトの名無しさん
11/11/24 19:58:47.18
漢なら仮想鯖借りて、自分でOSからいれろ。
3.3のα以前版でも入れ放題だぞ!

13:デフォルトの名無しさん
11/11/24 19:59:33.04
超初心者用が復活した途端に質問者のレベルが跳ねあがったのは気のせいか

14:デフォルトの名無しさん
11/11/24 20:14:12.81
そしてお勉強スレのレベルがますます下がるのはいつものこと

15:デフォルトの名無しさん
11/11/24 21:02:55.31
いちょつ

16:デフォルトの名無しさん
11/11/24 21:05:41.83
超低レベルってsocket.*とかの話?

17:デフォルトの名無しさん
11/11/24 21:14:39.05
こんなに需要があるとは思わなかった()
もっと早くたてとけばよかった()

18:デフォルトの名無しさん
11/11/24 21:29:49.12
>>16
質問者のPythonレベルが低いってことだろjk

19:デフォルトの名無しさん
11/11/24 22:02:31.22
Pythonで書く利点を最大限に活かすために
まず最初に覚えるべきことって何ですか?

20:デフォルトの名無しさん
11/11/24 22:05:40.74
import this

21:デフォルトの名無しさん
11/11/24 22:14:07.49
もっと役に立つモジュールおしえてよ

22:デフォルトの名無しさん
11/11/24 22:27:27.07
import __hello__

23:デフォルトの名無しさん
11/11/24 22:58:34.84
insert 006P

24:デフォルトの名無しさん
11/11/24 23:01:03.35
>>21
URLリンク(livedoor.blogimg.jp)

25:デフォルトの名無しさん
11/11/24 23:04:52.11
_winreg

26:デフォルトの名無しさん
11/11/24 23:05:51.71
風のうさぎちゃん

27:デフォルトの名無しさん
11/11/24 23:52:44.13
class Foo(object):
のobjectって何者ですか
一体何を継承しているんですか

28:デフォルトの名無しさん
11/11/25 00:12:51.00
継承ツリーの頂点に位置するのがobjectクラス
__str__みたいにオブジェクトなら誰でも持ってるメソッドが定義してある
dir(object())して出てくるのがたぶんそれ

29:デフォルトの名無しさん
11/11/25 00:24:44.16
クラスってインスタンスを継承することも出来るんですか
class Foo():
foo = Foo
class Fooo(foo)みたいな
何の意味があるんですか

30:デフォルトの名無しさん
11/11/25 00:46:46.30
結局同じオブジェクトを参照してるだけじゃないの?

31:デフォルトの名無しさん
11/11/25 08:58:26.47
stringモジュールにascii_lowercaseなんてものがあるとは知らなかった
今までaからzを手打ちしてて文字が抜けたことが何度も・・・

32:デフォルトの名無しさん
11/11/25 09:45:48.69
ascii_lowercase知らなかったことは、別に問題ないけど、
>今までaからzを手打ちしてて
そこで車輪を発明しようと考えるのは、ちょっと反省したほうがいいぞ・・・

33:デフォルトの名無しさん
11/11/25 10:08:25.64
この世にはコピペという便利なものがあってだな

34:デフォルトの名無しさん
11/11/25 15:54:29.46
>>29
節子それインスタンスちゃう

35:デフォルトの名無しさん
11/11/25 15:56:33.63
>>32
string.base64 はさすがにないな

36:デフォルトの名無しさん
11/11/25 16:53:44.84
こっちのスレのほうが建設的になるのはいつものこと。

37:デフォルトの名無しさん
11/11/25 20:15:21.62
デストラクタをわざわざ呼び出すことが少ないからね

38:デフォルトの名無しさん
11/11/26 01:20:48.15
CUDAスレPython(超初心者用)

かと思った。

39:デフォルトの名無しさん
11/11/26 01:23:23.15
>>34
え、じゃあ何ですか?

40:デフォルトの名無しさん
11/11/26 01:28:47.90
Pythonのソースコードを見ていると
class Foo1():
...def __init__(self)
class Foo2(Foo):
...def __init__(self)
......Foo1.__init__(self)

こんな感じで、派生先のクラス内の初期メソッドで
継承元のクラスの初期メソッドを実行してるのをよく見かけるんですが
これってどういうことなんでしょうか。
そもそも初期化ってどんな場合に必要あるんでしょうか。
あと、pythonのソースで、classのの名前の例がFooになってることが多いと思うんですが
このFooってのは何かの略なんでしょうか?

41:40
11/11/26 01:29:37.06
class Foo1():
...def __init__(self)
class Foo2(Foo1):
...def __init__(self)
......Foo1.__init__(self)

まちがえた、こうです

42:デフォルトの名無しさん
11/11/26 01:33:12.35
pass

43:デフォルトの名無しさん
11/11/26 02:53:33.02
>>40-41
その書き方は古いんじゃなかったっけ?

class Foo1():
 def __init__(self, hoge):
  return hoge

class Foo2(Foo1):
 def __init__(self, fuga):
  return super(Foo2, self).__init__(fuga)

URLリンク(d.hatena.ne.jp)

44:デフォルトの名無しさん
11/11/26 02:55:47.54
class Foo1(object):
 def __init__(self, hoge):
  return hoge

class Foo2(Foo1):
 def __init__(self, fuga):
  return super(Foo2, self).__init__(fuga)

まちがえた、こうです

45:デフォルトの名無しさん
11/11/26 03:25:19.07
>>43
super使ってもどうせ自クラスの名前は入力しないといけないようだけど、それ使う利点ってあるの?

46:名無しさん@いたづらはいやづら
11/11/26 03:38:45.49
>>44
TypeError: __init__() should return None, not 'int'

47:デフォルトの名無しさん
11/11/26 03:42:01.34
>>45
super(self.__class__, self).__init__(*args, **kw)
じゃだめか……な。

Python 3.x では super の引数が省略できる。
URLリンク(docs.python.org)

48:デフォルトの名無しさん
11/11/26 04:16:01.67
>>47
super(self.__class__, self).__init__(*args, **kw)

いけるみたいです

49:デフォルトの名無しさん
11/11/26 04:17:41.48
>>> 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'>

50:デフォルトの名無しさん
11/11/26 06:13:59.61
>>> 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'>

51:デフォルトの名無しさん
11/11/26 06:22:33.37
>>> 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'>

52:デフォルトの名無しさん
11/11/26 13:29:29.12
>>39
>>29 はクラスの実体ではなくクラスを直接fooと結びつけてるね
だからfooはFooのインスタンスでなくFooそのものじゃね

53:47
11/11/26 16:13:49.71
>>48
よく考えたら、
super(self.__class__, self).__init__(*args, **kw)
とやってるクラスを継承したら無限ループに陥るので駄目だわ。
ごめん。

54:デフォルトの名無しさん
11/11/26 16:29:49.46
super使ってもどうせ自クラスの名前は入力しないといけないようだけど、それ使う利点ってあるの?

55:デフォルトの名無しさん
11/11/26 17:45:58.37
python で suコマンドを実行して、パスワードを入力したいのですが、
どこかに見本は無いでしょうか。

56:デフォルトの名無しさん
11/11/26 19:38:19.74
シェルスクリプトスレに居た人だ

57:デフォルトの名無しさん
11/11/26 19:51:17.77
subprocess.call('su hoge')

58:デフォルトの名無しさん
11/11/27 09:23:00.28
◇       ミ ◇
   ◇◇   / ̄|  ◇◇
 ◇◇ \  |__| ◇◇
    彡 O(,,゚Д゚) /
       (  P `O
      /彡#_|ミ\
       </」_|凵_ゝ

【ラッキーAA】
このAAを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください
そうすれば14日後好きな人から告白されるわ宝くじは当たるわ
出世しまくるわ体の悪い所全部治るわでえらい事です

59:デフォルトの名無しさん
11/11/27 14:15:35.90
どういう原理で?

60:デフォルトの名無しさん
11/11/27 19:39:31.74
Windows7でpython 2.5使ってます
ドキュメントに書かれてるのと結果が違います

import os
print os.name
-> nt

import platform
print platform.system()
-> Microsoft

どうしたら Windows って出てくるの?

61:デフォルトの名無しさん
11/11/27 23:09:12.88
>>54
多重継承を使わない場合は
従来の方法でおk

62:デフォルトの名無しさん
11/11/28 03:13:29.98
$ 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
>>>


63:デフォルトの名無しさん
11/11/28 03:15:19.70
$ 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
>>>


64:デフォルトの名無しさん
11/11/28 04:42:12.53
$ 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'
>>>


65:デフォルトの名無しさん
11/11/29 03:35:03.13
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'
>>>

66:デフォルトの名無しさん
11/11/29 11:27:00.80
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'
>>>

67:デフォルトの名無しさん
11/11/30 23:34:55.18
質問です。
以下のスクリプトを実行してリストから拡張子が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']


68:デフォルトの名無しさん
11/11/30 23:45:56.10
>>67
URLリンク(www.python.jp) の警告以降を熟読のこと。

69:デフォルトの名無しさん
11/12/01 00:00:00.12
2.6の翻訳もあります
URLリンク(www.python.jp)

70:デフォルトの名無しさん
11/12/01 00:02:38.74
l = [i for i in l if not i.endswith('mp3')]

71:デフォルトの名無しさん
11/12/01 00:27:37.01
>>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']

72:デフォルトの名無しさん
11/12/01 21:07:19.71
>>> 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]

そんなもんなのね・・・

73:デフォルトの名無しさん
11/12/01 21:15:37.93
>>> a += (4,5,6)
これって禁止されてないのか

74:デフォルトの名無しさん
11/12/01 21:45:03.24
内部的には、まず元オブジェクトを書き換える __iadd__() の実行を試してみて、
それができなければ __add__() 呼んでオブジェクト差し替えしてるみたいです。

list には__iadd__() もあるが、tupleには __add__() しかない。
まぁ、自分でクラス作るときは、__ixxx__() シリーズを作るべきか否か
気をつけましょう、ってことで。

75:40
11/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があるということでしょうか?
インスタンスを作るっていうのは、初期メソッドと一緒に、クラスの内部を使いたいという
両方の条件が揃ってる時だけって解釈でいいんでしょうか?

76:デフォルトの名無しさん
11/12/02 00:56:24.41
>>75
誤字が多くて何言ってるのかわからん。
JavaScript風のオブジェクト指向しかやったことがないなら
一回Javaの薄い本でも読んでみたら?

77:デフォルトの名無しさん
11/12/02 08:36:29.86
importで読み込むのはモジュールであってクラスじゃない

78:デフォルトの名無しさん
11/12/02 08:39:57.97
Javaの薄い本…ゴクリ

>>75
んーと、色んなことを混同し過ぎだよ

モジュール名の後の .
クラス名の後の .
インスタンス(つまりクラスから生成されたオブジェクト)の後の .

それぞれを一度、分けて考えてみて

79:デフォルトの名無しさん
11/12/02 11:20:44.71
>>75
__call__()

80:デフォルトの名無しさん
11/12/02 11:23:42.74
>>40
おまいは基礎からやり直し

81:デフォルトの名無しさん
11/12/02 11:36:17.95
馬鹿には無理

82:デフォルトの名無しさん
11/12/02 11:48:47.15
空中に基礎は打てない

83:デフォルトの名無しさん
11/12/02 13:07:58.64
>>> class Test(object):
... def __call__(self):
... print 'hoge'
...
>>> Test()()
hoge


なんだこりゃ

84:デフォルトの名無しさん
11/12/02 19:34:12.56
>>83
ん?
至極真っ当な動作だと思うけど…

85:40
11/12/03 20:57:30.17
基礎ってどうやってみにつければいいの
C++とか覚えればいいの

86:デフォルトの名無しさん
11/12/03 21:21:21.74
公式チュートリアルを読む

87:デフォルトの名無しさん
11/12/03 23:53:54.58
>>85
あえて言えば Smalltalk かな

88:デフォルトの名無しさん
11/12/04 01:01:33.68
馬鹿には無理

89:デフォルトの名無しさん
11/12/04 03:42:30.77
pythonで基礎は学べるはずだけど

90:デフォルトの名無しさん
11/12/04 12:11:41.54
おすすめの入門本はありますか?

91:デフォルトの名無しさん
11/12/04 14:18:29.36
>>85, >>90
まずはこれを読む。
URLリンク(www.python.jp)

分からないことはググる。それでも分からなかったらここで聞く。

92:デフォルトの名無しさん
11/12/04 16:52:02.55
2chのスレから画像だけをダウンロードさせるスクリプトを書きたいんですが、
以下でできません。どうすればいいんでしょうか

import urllib

urllib.urlretrieve( 'URLリンク(hibari.2ch.net)', '保存先ディレクトリ')

93:デフォルトの名無しさん
11/12/04 16:58:05.13
>>92
なんでそれでダウンロードできると思ったか知りたい。

reを使ってjpgとかを抜き出したら
短縮URLは知らん。


94:デフォルトの名無しさん
11/12/04 17:01:11.56
馬鹿には無理

95:デフォルトの名無しさん
11/12/04 17:02:23.56
普通はdatからだな

96:デフォルトの名無しさん
11/12/04 17:14:59.34
URLリンク(codepad.org)

97:デフォルトの名無しさん
11/12/04 17:26:29.49
>>93
ここに書いてあったんだ。
URLリンク(www.gesource.jp)

>>96

試したら --OKしか出てこなかった(´・ω・)

98:デフォルトの名無しさん
11/12/04 17:40:45.38
>>97
hoge.py という名前で保存したら
コマンドラインから
./hoge.py スレリンク(tech板)
とか打てばいい
っていうかこれくらいソース見て判断汁

99:デフォルトの名無しさん
11/12/04 22:20:36.00
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|

100:デフォルトの名無しさん
11/12/05 01:50:34.29
まともな回答者がいない

101:デフォルトの名無しさん
11/12/05 03:18:07.31
ならば、君がその一人になりたまえ

102:デフォルトの名無しさん
11/12/05 03:22:51.15
足し算もできない人が簡単な微積の問題持ってきて解き方教えてと言ってるようなもの
解答(ソース)まで出してる人がいるのにまともじゃないとか失礼だよ

103:デフォルトの名無しさん
11/12/05 04:09:10.08
>100 はツンデレ

104:デフォルトの名無しさん
11/12/06 16:02:35.74
pythonを覚えると仕事つける?
26男
IT未経験

105:デフォルトの名無しさん
11/12/06 16:27:53.01
別に

106:デフォルトの名無しさん
11/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)

107:デフォルトの名無しさん
11/12/06 22:24:15.30
>>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:デフォルトの名無しさん
11/12/06 22:35:03.62
106です。すいません。次からは報告します。
うまくいきました。改行文字が入っていたことが原因でした。
丁寧な説明、どうもありがとうございました。

109:デフォルトの名無しさん
11/12/07 01:53:20.84
windowsXP、2.7.2です。
状況: 関数Bと関数Cは、関数Aからしか呼び出されません。

関数Bと関数Cを関数Aにネストさている場合とさせていない場合に、
挙動の違いはあるのでしょうか?
この状況では、どちらが一般的な記述方法なのでしょうか?
この状況下でのネスト・非ネストのメリット・デメリットを教えてください。
また、使い分けのセオリーなどはあるのでしょうか。

上記のご回答、宜しくお願いいたします。

110:デフォルトの名無しさん
11/12/07 02:19:32.32
pass

111:デフォルトの名無しさん
11/12/07 04:29:01.18
用語は正しく使わないと伝わらないんじゃね

112:デフォルトの名無しさん
11/12/07 05:42:26.89
>>109
基本はネストさせないで書く(Zen of Python より ネストさせなくていいならしない方がいい)


内部的には、ローカル・グローバルになる等の違いはあるけど、
ネストさせるかどうかの判断基準にするようなことではない。

それよりも、「非公開関数はネストにする」といったルールを運用すると、
「関数 B は A と D からのみ呼び出す」といった場合に、困ることになります。


## 内部関数が便利なのは、
* 引数があまりにも多くなる場合に、スコープ内の引数を省略できる。(クロージャ)
* 関数に渡されたパラメータを元に、関数を動的に生成する場合等。(e.g. デコレータ定義)

## 欠点は、とりあえず思いつく限りでは・・・
* (慣れてない人にとって)コードが読みにくくなる事。デバッグが多少面倒になる。
* インデントが深くなる。
* 再利用しにくい。
* ドキュメント・ツールで自動で文書化出来ない。(※ デコレータ定義用途では、functools.wrapsを使えば可)
* 関数の単体テストが出来ない。


> 状況: 関数Bと関数Cは、関数Aからしか呼び出されません。

こういった状況でネストする場合、大抵はクラスで置き換え可能なので、クラス A のメソッド _B, _C というようにする。

クラスにしない場合では、ネストさせずに 関数 A, _B, _C とします。( '_' プレフィクス付の命名で、内部関数と表明する。命名規則について >>2を読もう)

113:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/12/07 15:21:46.00
今もう一度やってみて分かったのですが、
これはこの本の誤植のようですね

膨大な誤植の嵐のあるこの本のせいだと分かりました
この件は正誤表にもまだ書かれていないようですが

ご迷惑おかけしました

115:デフォルトの名無しさん
11/12/07 15:30:21.57
日記はチラウラで

116:デフォルトの名無しさん
11/12/07 15:31:43.88
>>113
何て本

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

URLリンク(wiki.python.org)




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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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



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

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

なんでだ・・・

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

from randam import uniform
from randam import *

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

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

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

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


import csv

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

print "Content-type: text/html"
print

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



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

namespace を知らんのか

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

知ってる方おしえてー

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

for index,value in enumerate(data):

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

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


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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

(・∀・)デキタ!!

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

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

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

(・∀・)カンペキ!!

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

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

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

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

class Foo(tuple): pass

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

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


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

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

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

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

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

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

URLリンク(ideone.com)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

URLリンク(mail.python.org)


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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>>> float(True)
1.0

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

format前
0.12
1
1.2
1.234
11
12.34

format後
0000.120
0001.000
0001.200
0001.234
0011.000
0012.340

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

よろしくお願いします

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

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

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

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

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

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


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