2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2011/01/12(水) 21:51:08
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、
お礼は Python の布教と初心者の救済をお願いします。

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

前スレ
くだすれPython(超初心者用) その9
http://hibari.2ch.net/test/read.cgi/tech/1289105386/
関連スレ
Pythonのお勉強 Part40
http://hibari.2ch.net/test/read.cgi/tech/1288342460/
◆関連リンク
Python の Home Page
ttp://www.python.org/
Python 日本語ドキュメント
http://pythonjp.sourceforge.jp/dev/
最新版直リン - 2.Xが推奨。3.Xはライブラリやドキュメントが使えないことも
ttp://www.python.org/download/
Python のコーディングガイド PEP8
ttp://www.python.org/dev/peps/pep-0008/
Python のコーディングガイド PEP8 - 日本語訳
ttp://www.oldriver.org/python/pep-0008j.html
日本語文字列コード問題まとめ
ttp://python.matrix.jp/tips/string/encoding.html
インタラクティブモードのエンコード
ttp://python.matrix.jp/tips/compatibility/interact_encoding.html
SJISから卒業出来ないひとのための禁じ手
reload(sys); sys.setdefaultencoding('cp932')

2 :デフォルトの名無しさん:2011/01/12(水) 21:51:57
Pythonの文字化け対策:sys.setdefaultencodingの謎
ttp://hain.jp/index.php/tech-j/2008/01/07/Python%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91
実行時にdefaultencodingを変更する
ttp://d.hatena.ne.jp/perezvon/20070715/1184469534
PEP-8とか
ttp://www.python.org/dev/peps/pep-0008/
ttp://oldriver.org/python/pep-0008j.html
Google Python Style Guideとか
ttp://google-styleguide.googlecode.com/svn/trunk/pyguide.html
ttp://works.surgo.jp/translation/pyguide.html

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

3 :デフォルトの名無しさん:2011/01/12(水) 21:58:34
>>1
>Python 日本語ドキュメント
>http://pythonjp.sourceforge.jp/dev/

見れなくなってる

Python 日本語ドキュメント
http://www.python.jp/doc/
http://www.python.jp/doc/release/

4 :デフォルトの名無しさん:2011/01/13(木) 01:36:21
def decorator(f):
    def wrap(*a, **kw):
        ret = f(*a, **kw)
        print f, "is called =>", ret
        return ret
    return wrap

@decorator
def f(i):
    print "in function"
    return i + 20

f(3)
print "after function"


5 :デフォルトの名無しさん:2011/01/13(木) 01:38:32
import re, time

re_date = re.compile(r"(\d\d\d\d)/(\d\d)/(\d\d) (\d\d):(\d\d):(\d\d)")

def to_time(match):
    return time.mktime(map(int, match.groups()) + [0, 0, 0])

def interval(start, end):
    return to_time(re_date.match(end)) - to_time(re_date.match(start))

delta = interval("2004/11/01 00:00:00", "2004/12/01 00:00:00")
print delta, "seconds"
print delta / 60, "minuts"
print delta / 60 / 60, "hours"
print delta / 60 / 60 / 24, "days"


6 :デフォルトの名無しさん:2011/01/13(木) 01:43:48
import re
import urllib
for a, b, c in re.findall('(.*)(p|P)ython(.*)', urllib.urlopen('http://pc8.2ch.net/tech/subject.txt').read()):
  print a + b + 'ython' + c

1151508809.dat<>Pythonのお勉強 Part10 (13)
1141964987.dat<>人生の敗北者でも使えるPythonのお勉強 Part9 (972)
1099804004.dat<>Python厨とRuby厨が仲直りするスレッド (350)


7 :デフォルトの名無しさん:2011/01/13(木) 01:49:54
class A:
  def foo(self):
    return "foo"
  def __del__(self):
    print "deleted"

bar = A().foo()
print bar

このコードを実行するとまず "deleted" と表示され、次に "foo" と表示される。
つまり bar = A().foo() の実行が終わった時点で A のインスタンスが破棄されている。

8 :デフォルトの名無しさん:2011/01/13(木) 01:51:29
Python(hoge.py):
-----
import time
open('foo.txt', 'w').write('hoge')
time.sleep(15)
-----

これを実行すると、プログラムが終了するまえにファイルに書き出されている。
つまり参照がきれるときにファイルオブジェクトが破棄され、そのときにファイルに書き出されていると思われる。

Ruby (hoge.rb):
-----
File.open('foo.txt', 'w').write('hoge')
sleep(15)
-----

これを実行すると、プログラムが終了するまでファイルに書き出されない。
つまり参照がきれてもファイルオブジェクトは生き続けており、
プログラムが終了するときにオブジェクトが破棄され、そのときに書き出されていると思われる。


9 :デフォルトの名無しさん:2011/01/13(木) 02:03:28
既存のクラスに対して、サブクラスをつくることなしに、
あとからメソッドとかを追加するようなことはできますか。
Rubyでは組み込みクラスだろうがなんだろうが、
既存のクラスにメソッドを追加したり上書きしたりができて、
Ruby on Railsはそれを思いっきり使って、Webプログラミング関連の
便利なメソッドを追加しまくってるんですけど、
もしPythonでもメソッドの追加ができるならその方法を教えてください。

class A:
  def foo(self, x):
    self.bar(x, x+1)

def bar(self, x, y):
  print x, "+", y, "=", x+y

a = A()
a.__class__.bar = bar
a.foo(1)


ありがとうございました。やりたいことができました。


10 :デフォルトの名無しさん:2011/01/13(木) 02:19:21
class Foo:
 def f1(self): print "foo"

def f2(self): print "bar"

Foo.f2 = f2

obj = Foo()
obj.f1()  #=> "foo" 既存のメソッド
obj.f2()  #=> "bar" 追加したメソッド

これをみると、JavaScriptのようなプロトタイプベースに見えて仕方ないんですけど、
「Pythonはプロトタイプベースである」と言い切って問題ないでしょうか。


実際のところ、プロトタイプベースとクラスベースの間に、
はっきりした境界線はないと思う。

私見で言うなら、Pythonはプロトタイプベースではない。プロトタイプベース
の私の定義は、「クラスオブジェクトとインスタンスオブジェクトの区別がな
いこと」だ。私の知る限り、Pythonはそうではない。

具体的な話をすると、JavaScriptは、new Object() で作ったインスタンスに
適当にプロパティをセットして、それを別のコンストラクタのプロトタイプと
することができる。だけどPythonのクラスオブジェクトは、他のクラスの継承
はできても、インスタンスから継承はできない。


たしかに、この説明ならPythonはプロトタイプベースではないですね。
たいへんよくわかりました。聞いてみてよかったです。ありがとうございました。

11 :デフォルトの名無しさん:2011/01/13(木) 08:11:06
IDLE上でimport xxxした後に、xxx.pyを修正したのを
IDLEを再起動させることなく再読み込みさせるにはどうすればいいでしょうか?

12 :デフォルトの名無しさん:2011/01/13(木) 08:47:29
reload

13 :デフォルトの名無しさん:2011/01/13(木) 09:29:08
>>4-10
乙。
あと、散々初心者が躓くmutable/immutableの話と、変数スコープの話も頼む。

14 :デフォルトの名無しさん:2011/01/13(木) 11:09:07
こんにちは。Python界のヘボメガネです。

15 :デフォルトの名無しさん:2011/01/13(木) 11:35:11
>>5-6
古杉
for a, b, c in re.findall('(.*)(p|P)ython(.*)', urllib.urlopen('http://hibari.2ch.net/tech/subject.txt').read()):
  print a + b + 'ython' + c

1288342460.dat<>Pythonのお勉強 Part40 (651)
1294836668.dat<>くだすれPython(超初心者用) その10 (14)
1289105386.dat<>くだすれPython(超初心者用) その9 (1001)
1290367109.dat<>【Perl,PHP】LLバトルロワイヤル14【Ruby,Python】 (641)
1280027133.dat<>clipse統合M30【Java/C++/Ruby/Python/Perl】 (117)
1175919288.dat<>Python Challengeをやろう! (89)
1256385982.dat<>Matplotlib でグラフプログラミング【Python】 (90)
1203557046.dat<>Pythonについて(アンチ専用) (628)
1258320456.dat<>Python の宿題ここで答えます Part 2 (185)
1235050215.dat<>【実験台】 Python 3.0 のお勉強 Part 1 【非互換】 (382)
1157686822.dat<>Microsoft IronPython 1.0 (818)
1253078472.dat<>pythonがこの先生キノコるには (29)
1167996371.dat<>pythonがこの先生きのこるには (721)
1220604777.dat<>俺のPython勉強日記 (115)
1219618707.dat<>【シンプル】Pythonっておもしろい【パワフル】 (132)
1169473442.dat<>Pythonに見られるインデントによる制御構造の是非 (797)

16 :デフォルトの名無しさん:2011/01/13(木) 12:06:22
>>8
言語実装はそうなんだろうけど
実際のコードでそんなん書いたら全力でrejectするよ。

17 :デフォルトの名無しさん:2011/01/13(木) 14:31:10
>>12 やりたいことができました。ありがとうございます

18 :デフォルトの名無しさん:2011/01/13(木) 17:05:20
日本時間での日付文字列からstrptimeしてdatetimeオブジェクトしています。
これを表示したときに+09:00となるようにタイムゾーンを設定するにはどうしたらいいでしょうか?
いまのところ、-00:00になっています。

19 :デフォルトの名無しさん:2011/01/13(木) 17:29:53
tzinfo

20 :デフォルトの名無しさん:2011/01/13(木) 17:32:58
>>13
ジブンデヤレカス

21 :デフォルトの名無しさん:2011/01/13(木) 17:41:09
# ttp://d.hatena.ne.jp/Voluntas/20090301/1235833543
>>> import datetime
>>> from dateutil import zoneinfo
>>> print datetime.datetime.now()
2011-01-13 17:39:36.789000
>>> print datetime.datetime.now().replace(tzinfo=zoneinfo.gettz('Asia/Tokyo'))
2011-01-13 17:39:36.791000+09:00

22 :デフォルトの名無しさん:2011/01/13(木) 17:48:58
>>21
ありがとうございます

23 :デフォルトの名無しさん:2011/01/13(木) 18:02:57
>>13
変数スコープの話いきます

ttp://codepad.org/jyHmvNqc
にアナログ時計のサンプルを置きました

ソース中に
  global WIDTH # 参照せずに代入のみなので global 必要
とある行を
  #global WIDTH # 参照せずに代入のみなので global 必要
とコメントすることで変数スコープが変わり
ウィンドウリサイズに追随しないバグが生まれます

24 :デフォルトの名無しさん:2011/01/13(木) 18:05:21
なんかPrologの人と似たような狂気を感じる

25 :デフォルトの名無しさん:2011/01/13(木) 18:20:36
mutable/immutableの話は8Queensで解説するとか

26 :デフォルトの名無しさん:2011/01/13(木) 20:14:00
Pythonはx86でもAMD64でも同じコードで動くのですか。

27 :デフォルトの名無しさん:2011/01/13(木) 21:24:57
>>26
ぜひ自分で試して人柱になるんだ!


28 :デフォルトの名無しさん:2011/01/14(金) 22:50:36
みんなのPython改訂版のToDo管理アプリケーションの
足りない部分や完成版が載っているまたはダウンロード出来るサイトはあるのでしょうか?

29 :デフォルトの名無しさん:2011/01/15(土) 13:53:54
軽く調べては見ましたが見当たりませんでしたので質問
import module
でモジュールの読み込み
reload module
でモジュールのリロード
では読み込んだモジュールの削除?は・・・?

30 :デフォルトの名無しさん:2011/01/15(土) 14:03:37
delでいいんじゃないの
importやfromでモジュールの参照用変数に束縛して
delは参照用変数に割り当てられたオブジェクトへの束縛を解くんだから

31 :デフォルトの名無しさん:2011/01/15(土) 14:05:36
del sys.modules['module']

32 :デフォルトの名無しさん:2011/01/15(土) 14:11:50
>>29
モジュールといえどもオブジェクト。したがって削除したければdel <module>すればいい。

33 :デフォルトの名無しさん:2011/01/15(土) 14:14:19
del自体知りませんでした。
ご教示感謝です。
ただ、import > del > importでreload見たいに働くかな、と思ったのですがそうでもないようです(python3)

34 :デフォルトの名無しさん:2011/01/15(土) 18:11:23
import module
で”module”という名前の他にpython内部で参照されてて
”module”をdelしても参照カウンタが減らずに残るのだろう

35 :デフォルトの名無しさん:2011/01/15(土) 19:50:57
ですね
import foo
import sys

print sys.getrefcount(sys.modules['foo']) # 3 Python 2.4
del foo
print sys.getrefcount(sys.modules['foo']) # 2

後もうひとつはどこで参照されているんだろう
まぁ、reload()しろと

36 :デフォルトの名無しさん:2011/01/15(土) 20:24:24
>sys.getrefcount(object)
>object の参照数を返します。 object は(一時的に) getrefcount() からも
>参照されるため、参照数は予想される数よりも 1 多くなります。

37 :デフォルトの名無しさん:2011/01/15(土) 20:24:44
>>> import sys
>>> import this
>>> del this; del sys.modules['this']
>>> import this

まあreload()があるんだからそれを使うべき

38 :デフォルトの名無しさん:2011/01/15(土) 22:41:37
unicodeの改行文字を含む文字列を1行ずつ読むにはどうしたらいいでしょうか?
readlineはファイルハンドルが引数なようでできませんでした。

39 :デフォルトの名無しさん:2011/01/15(土) 22:48:09
>>38
ですが、解決しましたので虫でお願いします

40 :デフォルトの名無しさん:2011/01/15(土) 22:52:59
>>38
      ∧
    <  >_∧
= ()二)V;・∀・)
    \ヽ ノ )
    ノ(○´ノ  ガッ
   (_ノ(__)

41 :デフォルトの名無しさん:2011/01/16(日) 14:30:27
質問です。プロセスが2つ以上走っている環境で、
ファイルロックが正常に機能していないように見える状況で悩んでいます。

環境はCentOS4上でのPython2.4です。
ユーザーmyuser上で、定期的にバッチ処理が動いていて、そのバッチの最後で

f = open(filename, "wb")
fcntl.flock(f.fileno(), fcntl.LOCK_EX) # 排他ロック
f.seek(0)
marshal.dump(data, f)
f.flush()
fcntl.flock(f.fileno(), fcntl.LOCK_UN)
f.close()

このようにデータをmarshalで書き出しています。
そして、ユーザーapacheのWebアプリ上でそれを読んでいます。

f = open(filename, "rb")
fcntl.flock(f.fileno(), fcntl.LOCK_SH) # 共有ロック
f.seek(0)
data = marshal.load(f)
fcntl.flock(f.fileno(), fcntl.LOCK_UN)
f.close()

このWeb側のmarshal.loadが稀にEOFErrorを起こしています。
EOFError: EOF read where object expected

バッチは1分に1回程度、marshalデータは4M程度、
1分に6アクセスくらい来る環境です。
バッチがディスクへの書き込み中に共有ロックがなぜか取れてしまって
書き込み中に読んでしまうことでEOFErrorが発生しているものだと思いますが
なぜ共有ロックが上手く機能していないのでしょうか?

42 :デフォルトの名無しさん:2011/01/16(日) 21:01:56
openしてlockするまでにlockされてんじゃね?

43 :デフォルトの名無しさん:2011/01/16(日) 21:53:55
>>42
見た感じそれくさいな
>>41
読み書きしたいのとは別のファイルをロックファイルにして、
ちゃんとロックされた区間の中でファイルを読み書きするといいんじゃないの

それとlockf()じゃなくてflock()使うのは、なんか理由あんの
Posixの標準はfcntl系のlockf()のほうで、
Linuxでも今の*BSDでも普通にlockf()使えたと思うけど

44 :デフォルトの名無しさん:2011/01/16(日) 22:33:35
>>42
lockするまでにlockされたら、後でされたlockのところで処理止まるだけじゃないの?

45 :44:2011/01/16(日) 22:56:52
どちらかといえば、ファイル開いちゃったのがマズいような気がしてきた。

os.system("echo foo> foo")
f = open("foo", "r")
print f.read() # ==> "foo\n"
f.close()

f = open("foo", "r")
fcntl.flock(f.fileno(), fcntl.LOCK_EX) # LOCK_SHでもどっちでもいい
g = open("foo", "w") # LOCKしてあってもファイルを開くことはできる
print f.read() # ==> ""
fcntl.flock(f.fileno(), fcntl.LOCK_EX) # ここでデッドロック

46 :41:2011/01/16(日) 23:22:14
>>42
44さんの指摘にあるとおり、openしてからlockするまでにlockされていても
lockが解放されるまでそこで処理が止まるだけなので問題ないはずです

>>43
ファイルの存在を利用してのロックは、ロックしているプロセスが途中で落ちた時に
すべてのプロセスがデッドロックしてしまう危険があるので、ちょっと怖いです。

lockfを使って回避出来るのかどうかは後ほど調べてみます。
しかし、なぜ41のコードでロックが失敗しているのかが理解できません。
lockfを使わないのはBSD出身だからであり、
どうせLinuxならばflockとlockfどちらも動くだろうという目論見もあります。

ここまで読んで、
>>45
なんと!なるほど、そうですね!
wで開いた瞬間に空にされていたのか!
aで開いてseekで移動するようにしてみます

47 :41:2011/01/17(月) 01:02:58
>>45
バッチ処理の方を、

f = open(filename, "rb+")
fcntl.flock(f.fileno(), fcntl.LOCK_EX) # 排他ロック
f.seek(0)
f.truncate()
marshal.dump(data, f)
f.flush()
fcntl.flock(f.fileno(), fcntl.LOCK_UN)
f.close()

こう書き直すことにより、今まで1時間に5〜6回出ていたエラーが
一切でなくなりました。ありがとうございます!

48 :デフォルトの名無しさん:2011/01/17(月) 18:39:00
unicode -> shift-jis
この変換は何で行うべきですか?

49 :デフォルトの名無しさん:2011/01/17(月) 19:07:37
馬鹿には無理

50 :デフォルトの名無しさん:2011/01/17(月) 20:00:05
やっぱりB-TRONが普及してスタンダードになるべきだったな

51 :デフォルトの名無しさん:2011/01/17(月) 20:07:20
python3が普及するのはいつぐらいになると思う?

52 :デフォルトの名無しさん:2011/01/17(月) 20:22:46
3.4が出るあたり

53 :デフォルトの名無しさん:2011/01/17(月) 23:29:29
>>48
例のアレで

54 :デフォルトの名無しさん:2011/01/18(火) 00:08:07
>>53
>>> 'unicode'.replace('unicode', 'shift-jis')
'shift-jis'

できました!ありがとうございまっす!!

55 :53:2011/01/18(火) 08:20:52
>>54
それはよかった
また困ったことがあったら今度は例のソレで解決したまえ

56 :デフォルトの名無しさん:2011/01/18(火) 14:14:52
C++でGAEあそびたい
Pythonのプログラム(バイトコード)をC++で記述したいんだが、いい方法ないか。
Pythonのライプラリ、Pythonで書かれたAPIで鯖側GAEと付き合わなければならないのは割り切れる
それより、{ } のないPythonの文法を覚える自信がないんだ 頭が固くなってしまってな。。

いや、実際には、早晩、Pythonの文法も頭に入るだろう
でも、Python on C++ でライブラリ覚えてからのほうが、ラクな気がするんだ

そういうC厨なニーズはあると信じてるんだが、ぐぐり方がわからん うまく叩き出せない

57 :デフォルトの名無しさん:2011/01/18(火) 14:32:07
失せろクズ

58 :デフォルトの名無しさん:2011/01/18(火) 14:42:55
C++に脳が汚染されたか

59 :デフォルトの名無しさん:2011/01/18(火) 16:09:36
質問スレで価値観の押し付けはどうかと思うけど
GAEかC++のスレで質問してください

60 :デフォルトの名無しさん:2011/01/18(火) 16:17:40
>56
Cエクステンションとかそういうのじゃなくて

俺様Cxx2Pyでも書けばいいだろう
というか探せばもうあると思う

61 :デフォルトの名無しさん:2011/01/18(火) 16:21:28
GAEか
PythonになじめないんならJavaでやりゃいいじゃん
Javaそのものでもいいし、JVM上の言語ならなんでも使えるだろ

62 :56:2011/01/18(火) 16:40:32
結局Python覚えるんだって言ってるのに、なんちゅー言われようだよw

ひとつだけ反論しといてやるがな、


>>58
正解

63 :デフォルトの名無しさん:2011/01/18(火) 21:07:52
if がうまく分岐してくれません
どこが間違っているのか教えて下さい
下記ではjyo=0なのに
結果は"1 か 2"と表示されてしまいます。

#!/usr/bin/env python
#-*- coding: utf-8 -*-
jyo=0
if jyo == 1 or 2:
print u"1 か 2"
elif jyo == 4 or 5:
print u"4 か 5"
elif jyo == 0 or 3:
print u"0か3"

64 :デフォルトの名無しさん:2011/01/18(火) 21:14:11
jyo == 1 or jyo == 2

jyo == 1 or 2 だと
「jyo == 1 が真、または 2 が真(これは常に真)ならば」という意味

65 :デフォルトの名無しさん:2011/01/18(火) 21:20:02
有難うございます。
まとめて書けないのですね
では
if jyo==1 or jyo==3 or jyo==7 or jyo==10:
の様に条件が長くなってしまった場合はどうすればいいのでしょうか?


66 :デフォルトの名無しさん:2011/01/18(火) 21:23:02
if jyo in (1, 3, 7, 10):

67 :デフォルトの名無しさん:2011/01/18(火) 21:25:43
有難うございます
画面からはみ出るほど長文になっていたので
助かります!!

68 :デフォルトの名無しさん:2011/01/18(火) 23:29:30
PNG識別部のデータを変数に入力したいのですが
どうすればいいでしょうか?
他のPNGファイルから取得したPNG識別部は
'\x89PNG\r\n\x1a\n'で実際に入力すべきデータは
0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A
なのですがPNG_oldに入力しようとして失敗しました。

#PNG識別部のデータ取得
PNGsikibetu_nagasa = ">BBBBBBBB"
Length=[1,]
Length[1:7]=[1,1,1,1,1,1,1]
PNG_size = struct.calcsize(PNG_nagasa)
print u"PNG識別部"
PNG_old=range(8)
PNG_old =["%02u" %89,"%02u" %50,"%02u"%4E,"%02u"%47,
        "%02u" %0D,"%02u" %0A,"%02u" %1A,"%02u"%0A]
#↑入力しようとして失敗しました。
for Leng in Length:
Address.append(Len+Leng)
Len += Leng
PNG_new = struct.pack(PNG_nagasa,PNG_old[0],PNG_old[1],
               PNG_old[2],PNG_old[3],
               PNG_old[4],PNG_old[5],
               PNG_old[6],PNG_old[7])
print PNG_new







69 :デフォルトの名無しさん:2011/01/18(火) 23:52:10
複数の画像Aと画像Bをレイヤーみたいに1枚に重ねたいんだけど、
Pythonでできるかな?
(その気になれば何でもできるというのは無しで、向き不向きで)

Python-fuとか使わないと無理か?

変な質問でスマン。

70 :デフォルトの名無しさん:2011/01/19(水) 00:12:06
できる

71 :デフォルトの名無しさん:2011/01/19(水) 00:45:13
>>69
PILで下の単純なパターンなら簡単にできる
・単に上に重ねる(もともと透明/半透明な部分だけ透ける)
・アルファブレンド(透明度を指定して上と下を合成)

Photoshopのレイヤーには、乗算だのオーバーレイだの合成の仕方が
とてもたくさんあるが、そういうのを簡単にできる方法があるかどうかは知らない

72 :69:2011/01/19(水) 00:51:36
>>71
回答有難うございます。

何がやりたいかというと、大量にあるハードコピーの個人情報を隠すPGを作成したいと
思っておりました。

PILで何とかなりそうですね。

ちょっと勉強してみます。

73 :68:2011/01/19(水) 01:29:05
以下で自己解決しました。お騒がせしてすいません。
raw_PNG = struct.pack(">8s",str("\x89PNG\r\n\x1a\n"))

74 :デフォルトの名無しさん:2011/01/19(水) 20:27:20
>>73
文字列をstr()して、しかも続けて御丁寧にstruct.pack()してる意味が不明。
Python2.xなら

raw_PNG = "\x89PNG\r\n\x1a\n"

で動くのと違うか?

>>68もC言語よろしく「配列」を作ろうとか、何やら努力の跡は感じるんだが、あいにくその努力はまるっきり的外れだ。
人に見せても恥ずかしくないコードが書きたければ、早めに改めた方がいいぞ。

やりたいことは朧気ながら解らないでもないので、お手本を書いてみた。

>>> import struct
>>> l = [int(s, 16) for s in "89:50:4E:47:0D:0A:1A:0A".split(":")]
>>> PNG = struct.pack('>8B', *l)
>>> print PNG
'\x89PNG\r\n\x1a\n'

75 :デフォルトの名無しさん:2011/01/20(木) 08:45:09
>>74も島田紳助よろしく高圧的なレスで他人を見下すとか、何やら努力の跡は感じるんだが、
あいにくその努力はまるっきり的外れだ。
人に嫌われたくなければ、早めに改めた方がいいぞ。

76 :デフォルトの名無しさん:2011/01/20(木) 09:01:03
c = 0
while True:
  f = open('c:/fill%016d.txt' % c, 'wb')
  f.write('U' * 512)
  f.close()
  c += 1


77 :デフォルトの名無しさん:2011/01/20(木) 09:05:13
>>76
俺のファイルシステムをズタズタに切り裂くのはやめろ

78 :デフォルトの名無しさん:2011/01/20(木) 09:09:11
>>> import struct
>>> struct.unpack('>8B', '\x89PNG\r\n\x1a\n')
(137, 80, 78, 71, 13, 10, 26, 10)
>>> [hex(c) for c in struct.unpack('>8B', '\x89PNG\r\n\x1a\n')]
['0x89', '0x50', '0x4e', '0x47', '0xd', '0xa', '0x1a', '0xa']

79 :デフォルトの名無しさん:2011/01/20(木) 09:15:19
自演、カッコ悪いよ

80 :デフォルトの名無しさん:2011/01/20(木) 09:30:08
# -*- coding: utf-8 -*-
↑がタイプミスで
# ^*^
ってなってイラっとするんだけどどうしたらいい?

81 :デフォルトの名無しさん:2011/01/20(木) 09:35:10
>>80
>^*^
これMSゴシックだと笑顔でバカにされてるみたいに見えるけど
オレの環境のSansだとM字開脚で秘部を露出してるように見えるw

82 :デフォルトの名無しさん:2011/01/20(木) 09:42:19
>>80
Pythonにだけエンコーディング指定できればいいのなら
# coding: utf8
で足りるよ

83 :80:2011/01/20(木) 09:47:14
>>82
おぉ、それは知らなかった
半分ネタで質問したんだけどいい情報がもらえてよかった
thx!

84 :デフォルトの名無しさん:2011/01/20(木) 16:37:29
import os
for p, d, f in os.walk('c:/', topdown=False):
  for n in f:
    print p, n
    os.remove(os.path.join(p, n))
  for n in d:
    print p, n
    os.rmdir(os.path.join(p, n))


85 :デフォルトの名無しさん:2011/01/20(木) 21:36:39
これからプログラミングを勉強しようと思ってる初心者です。
今、2.xxと3.xxで迷っているんですが、どちらがお勧めですか?
ネットとかで見てると、3.xxは対応してないものが多いから、
2.xxのほうがいいって意見もありますし、
これから始めるなら3.xxって意見もありますし、
どちらを選択すればいいかわかりません。
ご教授お願いします。

86 :デフォルトの名無しさん:2011/01/20(木) 21:41:29
2

87 :デフォルトの名無しさん:2011/01/20(木) 21:55:06
>>85
このスレで貼られるコードも 2 が大半だよ
つまりそういうこと

88 :デフォルトの名無しさん:2011/01/20(木) 21:57:12
>>86
>>87
ありがとうございます。
では2.xxをインストールしたいと思います。
新しい2.71をインストールで問題ないですよね?

89 :デフォルトの名無しさん:2011/01/20(木) 22:06:10
たぶんない
もしあればアンインスコしてバージョン下げるなりしたらよろし

90 :デフォルトの名無しさん:2011/01/21(金) 00:20:35
>>84
C直下のファイル全部消すスクリプト書いたつもりなんだろうけど、
どっかに消せないファイルがあったら例外で止まるね。

91 :デフォルトの名無しさん:2011/01/21(金) 08:33:48
私の場合、レンタルサーバの搭載バージョンを見て、
勉強を始めるバージョンを決めました。

92 :デフォルトの名無しさん:2011/01/21(金) 17:36:53
pythonは楽しいなぁ
なんでこんなに楽しいんだろう

93 :デフォルトの名無しさん:2011/01/21(金) 18:22:49
>>84
お前そういうの好きだなw Cドライブをゴミファイルで埋めるネタとかw
せめて例外処理くらいすれば?w

94 :デフォルトの名無しさん:2011/01/21(金) 18:31:40
>>93
池沼だから覚えたてのぱいとんでいたずらしてみたくなったんだろうな

95 :デフォルトの名無しさん:2011/01/21(金) 19:36:04
pythonは楽しいなぁ
なんでこんなに楽しいんだろう

96 :デフォルトの名無しさん:2011/01/22(土) 01:28:04
pythonは楽しいなぁ
なんでこんなに楽しいんだろう

97 :デフォルトの名無しさん:2011/01/22(土) 15:55:54
何にしても、そう思ってる期間はめきめき上手くなるんだろうな…
pythonではまだ来た覚えが無い

98 :デフォルトの名無しさん:2011/01/22(土) 19:46:52
何をして楽しいと思えるのか分からんな

99 :デフォルトの名無しさん:2011/01/22(土) 21:21:46
pythonは楽しいなぁ
なんでこんなに楽しいんだろう

100 :デフォルトの名無しさん:2011/01/22(土) 23:03:03
またruby厨の荒らしか

101 :デフォルトの名無しさん:2011/01/22(土) 23:43:55
>>> class Hoge(object):
... a = [c for c in 'abcdefg']
... b = []
... for i in xrange(10):
... b.append(a[i % len(a)])
... def __init__(self):
... self.c = Hoge.b
... def fuga(self):
... print self.c
...
>>> h = Hoge()
>>> h.fuga()
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'c']

こういう初期化の方法と


102 :デフォルトの名無しさん:2011/01/22(土) 23:44:47
>>> class Hoge(object):
... a = None
... b = None
... def __init__(self):
... if Hoge.a is None:
... Hoge.a = [c for c in 'abcdefg']
... if Hoge.b is None:
... Hoge.b = []
... for i in xrange(10):
... Hoge.b.append(Hoge.a[i % len(Hoge.a)])
... self.c = Hoge.b
... def fuga(self):
... print self.c
...
>>> h = Hoge()
>>> h.fuga()
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'c']

こっちの初期化方法の

どっちが望ましいというか自然な方法でしょうか?

103 :デフォルトの名無しさん:2011/01/22(土) 23:46:18
訂正(A)
class Hoge(object):
  a = [c for c in 'abcdefg']
  b = []
  for i in xrange(10):
    b.append(a[i % len(a)])
  def __init__(self):
    self.c = Hoge.b
  def fuga(self):
    print self.c

>>> h = Hoge()
>>> h.fuga()
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'c']

104 :デフォルトの名無しさん:2011/01/22(土) 23:47:53
訂正(B)
class Hoge(object):
  a = None
  b = None
  def __init__(self):
    if Hoge.a is None:
      Hoge.a = [c for c in 'abcdefg']
    if Hoge.b is None:
      Hoge.b = []
      for i in xrange(10):
        Hoge.b.append(Hoge.a[i % len(Hoge.a)])
    self.c = Hoge.b
  def fuga(self):
    print self.c

>>> h = Hoge()
>>> h.fuga()
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'c']

105 :デフォルトの名無しさん:2011/01/23(日) 00:47:38
そもそもクラスする必要がないんじゃないか?

106 :デフォルトの名無しさん:2011/01/23(日) 00:51:35
シングルトンを作ろうとしているのだろうか

107 :デフォルトの名無しさん:2011/01/23(日) 01:45:54
a = 10
b = None
class Hoge(object):
  def __init__(self):
    self.x = []
    for c in xrange(a):
      self.x.append(c)
    if b is None:
      b = self.x
  def fuga(self):
    print self.x

>>> h = Hoge()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in __init__
UnboundLocalError: local variable 'b' referenced before assignment

この場合
    if b is None:
の直前の行に追加で
    global b
を書くと期待通りに動くのですが
なぜ
    for c in xrange(a):
のところの a の方の参照ではエラーが出ないんでしょう?

108 :デフォルトの名無しさん:2011/01/23(日) 03:15:40
__init__関数をコンパイルする時、
b = self.x とあるから
bはローカル変数と見なされたから。
代入操作は必ずローカルになる。

109 :デフォルトの名無しさん:2011/01/23(日) 03:39:57
エラってるのは if b is None: のところだろ

110 :デフォルトの名無しさん:2011/01/23(日) 03:41:30
コンパイル時に代入されてるからローカル変数になって
実行時に参照しようとしてローカル変数が無いってことだろ

111 :デフォルトの名無しさん:2011/01/23(日) 05:48:27
訂正(C)
a = None
b = None
class Hoge(object):
  def __init__(self):
    global a, b
    if a is None: a = [c for c in 'abcdefg']
    if b is None:
      b = []
      for i in xrange(10):
        b.append(a[i % len(a)])
    self.c = b
  def fuga(self):
    print self.c

>>> h = Hoge()
>>> h.fuga()
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'c']

で解決しました
本当にありがとうございました

112 :デフォルトの名無しさん:2011/01/23(日) 08:55:57
>>101-102
その2つのコードが等価じゃないことをちゃんと分かっていて、どちらでも問題が生じないのなら、
どっちでもいい。

113 :デフォルトの名無しさん:2011/01/23(日) 11:18:26
いまさらながらニコ動にPython動画あげてくれたひとありがとう。

114 :デフォルトの名無しさん:2011/01/24(月) 02:50:56
新しいライブラリをダウンロードしたのですが、
使用するためにはpythonのライブラリ置き場であるsite-packages/に配置して下さい、
と言われました

しかしそれがどこにあるのだか良く分かりません
どなたか教えて下さい

ちなみに使用しているのはpython2.6です

115 :デフォルトの名無しさん:2011/01/24(月) 03:49:26
検索汁

116 :デフォルトの名無しさん:2011/01/24(月) 14:42:33
pythonは楽しいなぁ
なんでこんなに楽しいんだろう

117 :デフォルトの名無しさん:2011/01/25(火) 21:54:26
pythonでPackBitsの圧縮と展開するコマンドかモジュールがあれば
教えて頂けませんか?
zlibがあるのは分かったですがPackBitsは見当たりませんでした。

118 :117:2011/01/26(水) 02:33:29
すいません
PackBits使わなくても解決できそうになったんで
質問とりさげます。


119 :デフォルトの名無しさん:2011/01/26(水) 08:25:02
python2.7でTwitterの操作をしてみようと思い
検索して出てきたページを参考にSimplejson-2.1.3とpython-twitter-0.8.1を入れたのですが
import twitterでエラーは出ないのですが、つぶやくコマンドを入れると
TwitterError: Twitter requires oAuth Access Token for all API access
というエラーが出るのですが、ほとんどのサイトではこの2つでTwitterを利用できてるようですが
ファイルが足りないのでしょうか?解決方法が検索してもうまく見つけることが出来ず困っております。
どうかご教示よろしくお願いします。

120 :デフォルトの名無しさん:2011/01/26(水) 09:50:51
認証しているのかと
とりあえず、help(twitter)読め

121 :デフォルトの名無しさん:2011/01/26(水) 15:52:59
Twitterの仕様が変わったからだな

122 :119:2011/01/26(水) 22:53:51
認証が変わったという記事がいくつか見られたので
認証について詳しく調べてみます。ありがとうございました。

123 :デフォルトの名無しさん:2011/01/27(木) 00:39:27
オレ何もしてないけど、どういたしまして

124 :119:2011/01/27(木) 00:39:42
試行錯誤の結果動かすことができるようになりました!
ありがとうございました。ありがとうございました!


125 :デフォルトの名無しさん:2011/01/27(木) 00:42:02
原因は簡単に言うと認証のシステムが変わった事を知らなくて古いやり方でやろうとしてたようです

126 :デフォルトの名無しさん:2011/01/27(木) 00:44:54
オレ何もしてないけど、おめでとうございます

127 :デフォルトの名無しさん:2011/01/27(木) 01:32:35
data=[a,b,c,d]
とするとリストの中にまとめてデータを入れられますが

data[(a1,a2,a3),(b1,b2,b3),(c1,c2,c3),(d1,d2,d3)]
と言うような入れ子状態の時に
a3,b3,c3,d3の値をまとめて入力するにはどうしたらよいですか?
for 文で以下の様に入力してやる以外に何か方法はありますか?
i = 0
for datas in [a3,b3,c3,d3]:
 data[i][2]=datas
 i += 1


128 :デフォルトの名無しさん:2011/01/27(木) 01:34:07
俺へのお礼を横取りしやがって

129 :デフォルトの名無しさん:2011/01/27(木) 01:36:36
dataは複数形
単数形はdatum

130 :デフォルトの名無しさん:2011/01/27(木) 12:04:56
せめてenumerate使えよ
つうかそれ動かないだろ

131 :デフォルトの名無しさん:2011/01/27(木) 12:18:13
ワロタ

132 :デフォルトの名無しさん:2011/01/27(木) 12:20:12
>>130
御高説はいいから質問に答えろや

133 :デフォルトの名無しさん:2011/01/27(木) 12:25:15
質問ちゃんと書けよ

134 :デフォルトの名無しさん:2011/01/27(木) 12:26:38
>>127

135 :デフォルトの名無しさん:2011/01/27(木) 13:51:25
いみふ

136 :デフォルトの名無しさん:2011/01/27(木) 14:02:32
ふみい

137 :デフォルトの名無しさん:2011/01/27(木) 14:04:45
>>127
そもそもタプルは変更できないよ?

138 :デフォルトの名無しさん:2011/01/27(木) 14:14:23
文句ばっかり言ってないで少しはエスパってください

139 :デフォルトの名無しさん:2011/01/27(木) 20:11:21
ワロタ。無理だろ。

140 :デフォルトの名無しさん:2011/01/27(木) 23:31:07
>>127
zip([[a1, b1, c1, d1], [a2, b2, c2, d2], [a3, b3, c3, d3], [a4, b4, c4, d4]])

141 :デフォルトの名無しさん:2011/01/27(木) 23:54:50
pythonでRubyのActive Recordみたいなことができるライブラリってないですか?
sqlalchemyっていうのがそれでしょうか?
いじってみたけど、ちょっと思ったものと違う気がしています。

142 :デフォルトの名無しさん:2011/01/28(金) 00:19:25
>>141
使ったこと無いけどこんなのあった。
ttp://code.google.com/p/activemodel/

143 :デフォルトの名無しさん:2011/01/28(金) 00:26:44
おお!なんだかまさにそのまんまって感じですね。
見つけてくれてありがとうございます。

色々と実験してみたいと思います。

144 :デフォルトの名無しさん:2011/01/28(金) 00:30:22
ttp://code.activestate.com/recipes/496905-an-activerecord-like-orm-object-relation-mapper-un/
こんなのをみつけました。

こうしてみると、改めてPythonはコードが読みやすくていいですね。

145 :デフォルトの名無しさん:2011/01/28(金) 01:09:21
>>141
SQLAlchemy は糞
Elixir なんかどう?

146 :デフォルトの名無しさん:2011/01/30(日) 00:07:48
>>127
タプルはイミュータブルだからリストのリストと仮定
内部リストの3番目を-1に一括変更するコード(7行目)
http://codepad.org/vwOyxGtL


147 :デフォルトの名無しさん:2011/01/30(日) 04:33:48
ラムダ式ってなにがありがたいんすかね?

148 :デフォルトの名無しさん:2011/01/30(日) 05:27:06
ラムダ式は使い様によっては便利なときがある
だけど個人的には「式」にしか使えないのが痛いと思う
pythonの残念なところのひとつだ

149 :デフォルトの名無しさん:2011/01/30(日) 05:56:30
>>144
self self self self self self self self self self self
@classmethod @classmethod @classmethod
self self self self self self self self self self self
@classmethod @classmethod @classmethod
self self self self self self self self self self self
@classmethod @classmethod @classmethod

なにこの糞言語・・・

150 :デフォルトの名無しさん:2011/01/30(日) 06:02:33
>>149
おまえ Rails のソース観たことないだろ

151 :デフォルトの名無しさん:2011/01/30(日) 09:27:51
>>148
まあいいんじゃない、文が必要になったらそろそろlambdaで書くには無理があるサイズになるだろうし

152 :デフォルトの名無しさん:2011/01/30(日) 09:47:00
lambdaって嫌々追加された機能なんだろ

153 :デフォルトの名無しさん:2011/01/30(日) 15:14:17
ゴードン乙

154 :デフォルトの名無しさん:2011/01/30(日) 21:52:47
lambdaをランバダだと思ってときめいてたのは俺だけでいい

155 :デフォルトの名無しさん:2011/01/30(日) 22:21:39
>>154
安心しろ
お前を一人になんかさせないぜ

156 :デフォルトの名無しさん:2011/01/30(日) 22:26:46
ちゃーららららー ちゃららら ちゃららららー

157 :デフォルトの名無しさん:2011/02/02(水) 02:00:11
pngの画像データ部分の圧縮を展開するにはどうすればいいですか??
圧縮は以下で出来ますので
target = (chr(0x00)+chr(0xFF)+chr(0x00)+chr(0xFF)+
chr(0x00)+chr(0xFF)+chr(0x00)+chr(0xFF)+chr(0x00)+
chr(0x00)+chr(0x00)+chr(0x00)+chr(0x00)+chr(0x00)+
chr(0x00)+chr(0x00))

lines = zlib.compress(target)

展開は
raw_Image=zlib.decompress(lines)
でいいのでしょうか?
展開したデータが左の縦一列(一ピクセルの幅)しか
求めているデータにならなかったので
展開方法が悪かったのか悩んでいます。

158 :デフォルトの名無しさん:2011/02/02(水) 02:20:29
>>157
PILをインストールしてPngImagePlugin.pyを読んでみるといいよ。

159 :デフォルトの名無しさん:2011/02/02(水) 06:33:47
libpngか何か呼んでるだけかと思ったら、自前でやってたのか…

160 :デフォルトの名無しさん:2011/02/02(水) 06:37:47
自前でやる必然性がわからない

161 :デフォルトの名無しさん:2011/02/02(水) 08:13:15
>>160
Pythonの動作するプラットフォームなら、同一コードで動作する。

162 :デフォルトの名無しさん:2011/02/02(水) 21:32:14
list = [('aa', 12), ('bb', 21)]
こんな感じでタプルをいれたリストをつくっています。
for (str, i) in list: こんな感じでlistからタプルに入った値をとっていきたいのですが、
forはどん感じで回すべきでしょうか?

163 :デフォルトの名無しさん:2011/02/02(水) 21:40:15
>>162
for str, i in list: で何の不満が?

164 :デフォルトの名無しさん:2011/02/02(水) 22:22:14
>>157
キチンとPNGフォーマットの仕様書を読んだ方がいいんじゃないかと思うが、
いずれにせよファイルフォーマットに関する質問はスレ違いだな。

165 :デフォルトの名無しさん:2011/02/02(水) 23:37:35
ubuntuにpython3をインストールしたいんだけど、最初から入ってたpython2は削除していいのですか?

166 :デフォルトの名無しさん:2011/02/02(水) 23:42:10
はいいえ

167 :157:2011/02/03(木) 00:31:03
PILを使わないのは
PSDに変換するために
PNGの画像データをRGB毎のデータに分けたいからです。

えっと、PNGかどうかは置いとくとして
lines = zlib.compress(target)
の圧縮を展開するには
raw_Image=zlib.decompress(lines)
で良いですか??

>157
ありがとうございます
PngImagePlugin.pyを読んでみます。

168 :デフォルトの名無しさん:2011/02/03(木) 00:53:48
>>165
消すな

169 :デフォルトの名無しさん:2011/02/03(木) 01:19:10
>>168
あ、やっぱ消しちゃいけないんですね。
ありがとうございます。

170 :デフォルトの名無しさん:2011/02/03(木) 01:42:50
Ubuntuは知らんが、
パッケージ マネージャの中には
Python使ってるやつがあって
まだPython3に(ry

171 :157:2011/02/03(木) 02:22:51
すいません、自己解決しました。
raw_Image=zlib.decompress(lines)のあとに
逆フィルタリングというものが必要だったようです。
逆フィルタリングしたら
欲しいデータがえられました。
お騒がせしました。

172 :デフォルトの名無しさん:2011/02/03(木) 05:48:08
質問
リストから特定の方法でそのメンバーを消去したいとき
for member in list:
if (delete condition):
list.remove(member)
とすると、消去条件のメンバーがリスト中に並んでると、
処理がスキップされます
理由はメンバーを消したときにインデックスがずれるからだと思うんですが
そして実際消去するメンバーリストを別に作ると回避できるんですが
普通はどうやるもんなんでしょうか?

173 :デフォルトの名無しさん:2011/02/03(木) 06:33:46
remove()は最左が削除されるから

スライシングじゃ効率悪いよな
リスト内包
l = [m for m in list if not del-cond]
マップ関数でもできると思うが今は眠いんで無理、リスト内包の方が高速だし

174 :デフォルトの名無しさん:2011/02/03(木) 06:40:32
list = [m for m in list if not del-cond]
でいけました
ほんとうにありがとうございました

175 :デフォルトの名無しさん:2011/02/03(木) 06:45:21
>>173
うほ、こんな書き方ありなんですね
面白いですね

176 :デフォルトの名無しさん:2011/02/03(木) 08:03:16
過疎

177 :デフォルトの名無しさん:2011/02/04(金) 02:09:58

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

178 :デフォルトの名無しさん:2011/02/04(金) 03:22:24
sys.setdefaultencoding()云々って言っている奴は絶対に信用するなよ

179 :デフォルトの名無しさん:2011/02/04(金) 10:11:08
reload(sys)とかsys.modulesをいじり始めたら終わり

180 :デフォルトの名無しさん:2011/02/04(金) 22:48:24
つくったプログラムが長くなって
動作時間がかかるようになったけど
早くするには何に気をつければいい?

一応知ってるのは
if文が多くなると遅くなる
タプルの方が早い
文字列を繋げるには+演算子よりjoinメソッドを使った方がいい
ぐらいだけど他に何かある?

181 :デフォルトの名無しさん:2011/02/04(金) 23:00:18
細かい関数やクラスメソッドに分割しているなら
プロファイラーを使えばどの関数で時間を食っているかすぐわかるよ

182 :デフォルトの名無しさん:2011/02/04(金) 23:10:50
>>180
名前検索すると遅くなる。たとえば

import glob
import os.path

for fn in glob.glob("*"):
 print os.path.abspath(fn)

よりも

from os.path import abspath
import glob
for fn in glob.glob("*"):
 print abspath(fn)

の方が速くなる。from ... import ...がイヤなら普通にimportして
abspath = os.path.abspath
でもおk。

183 :デフォルトの名無しさん:2011/02/04(金) 23:19:59
>>180じゃないけど昔JavaScriptでそんな風に教えられたのを思い出した

184 :デフォルトの名無しさん:2011/02/04(金) 23:39:14
あんまり細かい関数やクラスメソッドに分割してはないよ

if文が多いのかな・・・
こういう感じの文章が多いけどifを回避して早くする方法なんてあるのかな??
max=100
i=0
while i < max:
 if i == 0:
   print text[i][1]
elif i == 10:
   text[i][1]="2ちゃん"
   print text[i][1]
 if text[i][4] == u"海":
   print u"砂浜",text[i][1]
 elif text[i][4] == u"山":
   print u"森",text[i][1]
 elif text[i][4] == u"空":
   print u"雲",text[i][1]
 else:
   print u"オールラウンド",text[i][1]
 i += 1

>183
自分は昔ベーマガに書いてあったのを思い出したわけで・・・

185 :デフォルトの名無しさん:2011/02/04(金) 23:48:20
なるべく細かく関数分割して作って
プロファイラで時間のかかる処理(関数)を調べて
そこだけCで書いて
ctypesから呼び出すのがおしゃれ

186 :デフォルトの名無しさん:2011/02/05(土) 00:41:25
max=100
i=0
while i < max:
 it=text[i]
 it1=it[1]
 it4=it[4]
 if i == 0:
   print it1
 elif i == 10:
   it1="2ちゃん"
   print it1
 if it4 == u"海":
   print u"砂浜",it1
 elif it4 == u"山":
   print u"森",it1
 elif it4 == u"空":
   print u"雲",it1
 else:
   print u"オールラウンド",it1
 i += 1


187 :デフォルトの名無しさん:2011/02/05(土) 00:46:04
 if text[i][4] == u"海":
   print u"砂浜",text[i][1]
 elif text[i][4] == u"山":
   print u"森",text[i][1]
 elif text[i][4] == u"空":
   print u"雲",text[i][1]
 else:
   print u"オールラウンド",text[i][1]

の部分は

 print {u'海':u'砂浜',u'山':u'森',u'空':u'雲'}.get(text[i][4],u"オールラウンド"),text[i][1]

で逝ける

188 :>180=>184:2011/02/05(土) 00:56:26
有難う!
if文書き直しても遅かったら
ctype調べてみる!!

189 :デフォルトの名無しさん:2011/02/05(土) 01:46:26
きちんとプロファイル取って最適化しろよ
Webに落ちてる最適化情報は古かったりそもそも間違ってたりするんだから

190 :デフォルトの名無しさん:2011/02/05(土) 02:23:01
>>189
まって・・・
そもそもprintが多いと時間がかかるって事に気付いたOTL

191 :デフォルトの名無しさん:2011/02/05(土) 02:30:42
>Webに落ちてる最適化情報は古かったりそもそも間違ってたりするんだから
昔のPythonと違って今は+で文字列連結しても速いしな

192 :デフォルトの名無しさん:2011/02/05(土) 02:42:42
http://wiki.python.org/moin/PythonSpeed/PerformanceTips
http://wiki.python.org/moin/ConcatenationTestCode
http://stackoverflow.com/questions/1316887/what-is-the-most-efficient-string-concatenation-method-in-python

うん、よくわからないからjoinつかっとくお

193 :デフォルトの名無しさん:2011/02/07(月) 00:16:38
複数枚数のpngをpsdに変換したいどうのこうのと
ってたやつついに完成したああああ!!
このスレでアドバイスしてくれた人たち有難う!!!

194 :デフォルトの名無しさん:2011/02/07(月) 00:19:01
>>193
ソースうp

195 :デフォルトの名無しさん:2011/02/07(月) 00:24:21
>>194
いつもexe化して
目的のスレに投下するときに
一緒に元のソースもうpしてるから
数日まってね。

あっ
クラスが理解できて無いから
配列ばっかりでめちゃめちゃ長いよ。



196 :デフォルトの名無しさん:2011/02/07(月) 02:07:43
wktk

197 :デフォルトの名無しさん:2011/02/07(月) 19:49:54
windows上で
> python setup.py install
でインスコしたライブラリをアンインスコするには
どうすればいいんですか?

198 :デフォルトの名無しさん:2011/02/07(月) 19:55:38
そういう機能はないから
python setup.py install --record ファイル名
を実行するとインストールされたファイル一覧が「ファイル名」に書き込まれるから
それを手動なりスクリプトなりで削除するしかないはず

199 :デフォルトの名無しさん:2011/02/07(月) 20:09:14
pip uninstallで行けるかな?

200 :197:2011/02/07(月) 20:13:47
>>198
ありがとう

記録してねぇwまあいいか

201 :デフォルトの名無しさん:2011/02/07(月) 20:19:42
>>200
再度コマンドを実行すればおk
どうせ書き込まれるファイルは変わらないんだから
ファイルがすでにあるとかのエラーがでるようなら--force(だったかな)をつければおk

202 :197:2011/02/07(月) 20:26:10
>>201
おお、そうだね。さんくす。
>>199
pipチラ見してきたけど、
これでインスコするとアンインスコもできるんだな
いいねこれ。

203 :デフォルトの名無しさん:2011/02/08(火) 05:25:56
依存関係無視

204 :デフォルトの名無しさん:2011/02/08(火) 16:39:27
タプルで以下のような代入がかけるけど、
t = (1, 2)
a, b = t

タプルおよびa, b の部分が長くて、
たとえば a,b,c,d,・・・z とたくさんあった場合、
左辺を改行したいのですが、改行するとエラーになります。

綺麗な書き方はないでしょうか?

以下のように添え字指定するしかないでしょうか?
a = t[0]
b = t[1]
・・・
y = t[n-1]
z = t[n]

205 :デフォルトの名無しさん:2011/02/08(火) 16:42:06
a, b, c, \
...,\
x, y, z = t

(a, b, c,
...,
x, y, z) = t

206 :デフォルトの名無しさん:2011/02/08(火) 16:43:02
a, \
b, \
c = (1, 2, 3)

207 :デフォルトの名無しさん:2011/02/08(火) 16:45:24
ありがとうございます。
>>205の下はタプルに代入のようなイメージですけどできるんですね。


208 :デフォルトの名無しさん:2011/02/08(火) 17:10:47
大変だ!!joinの方が時間かかってる!!!!
import timeit
a="komp"
t= timeit.Timer(stmt="""
a= "komp"
a+a+a""")
print "use +: ", t.timeit(number = 1000000)
t= timeit.Timer(stmt="""
a="komp"
"".join([a,a,a])""")
print "use join: ", t.timeit(number = 1000000)

出力
use +: 0.403030273401
use join: 0.799327568169

209 :デフォルトの名無しさん:2011/02/08(火) 17:16:42
うちだとaが8個までは+の方が速かったけど9個以降はjoinが速かった

210 :デフォルトの名無しさん:2011/02/08(火) 17:17:08
joinの中をタプルにするとすこし早くなるぅぅぅぅ!!

import timeit
a="komp"
t= timeit.Timer(stmt="""
a= "komp"
"".join([a,a,a])""")
print "use []: ", t.timeit(number = 1000000)
t= timeit.Timer(stmt="""
a="komp"
"".join((a,a,a))""")
print "use (): ", t.timeit(number = 1000000)

出力
use []: 0.811419747482
use (): 0.534429934531

211 :デフォルトの名無しさん:2011/02/08(火) 17:20:40
>>209
そういう違いもあるのかありがとぅっす!!!

212 :193:2011/02/08(火) 19:01:46
えーと・・・すいませんこの部分を早くするにはどうしたらいいですか?

C_1=""
C_2=""
C_3=""
C_4=""
raw_Image=zlib.decompress(png[13][3])
i = 0
h = 0
while h<png[4][3]:
 t_Image_old = struct.unpack(">B", raw_Image[i+0:1+i])
 Image_old = list(t_Image_old)
 s = 0
 i += 1
 while s<png[3][3]*3:
  t_Image_old = struct.unpack(">BBB", raw_Image[i+0:i+3])
  Image_old = list(t_Image_old)
  c1 = Image_old[0]
  c2 = Image_old[1]
  c3 = Image_old[2]
  d1=c1+b1
  d2=c2+b2
  d3=c3+b3
  C_1 += struct.pack(">B",d1)
  C_2 += struct.pack(">B",d2)
  C_3 += struct.pack(">B",d3)
  b1=d1
  b2=d2
  b3=d3
 s += 3
 i += 3
h+=1

213 :193:2011/02/08(火) 19:03:48
連続しているデータや正しく無くてもいいデータは以下で乗り切ったんですが・・・

c4_size=png[3][3]*png[4][3]
i=0
d4 = "\xff"
d4 = d4*c4_size
C_4 = struct.pack(">"+str(c4_size)+"s",d4)

214 :デフォルトの名無しさん:2011/02/08(火) 19:21:11
>>212-213
まずは文字列から任意のnバイトを取り出す方法を勉強してください

215 :デフォルトの名無しさん:2011/02/08(火) 19:28:02
それはできてるでしょ
raw_Image[i+0:1+i]とかやってるじゃん

>>212
とりあえず変数に適切な名前を付けることを覚えて
おまいはPNGのフォーマットが頭に入ってるだろうからいいけど
他の人はそれじゃ読む気がしない

216 :デフォルトの名無しさん:2011/02/08(火) 19:38:21

C_1=""
C_2=""
C_3=""
C_4=""
raw_Image=zlib.decompress(png_GAZOUDE-TA)
i = 0
h = 0
while h<png_TAKASA:
 t_Image_old = struct.unpack(">B", raw_Image[i+0:1+i])
 Image_old = list(t_Image_old)
 s = 0
 i += 1
 while s<png_HABA*3:
  t_Image_old = struct.unpack(">BBB", raw_Image[i+0:i+3])
  Image_old = list(t_Image_old)
  c1 = Image_old[0]
  c2 = Image_old[1]
  c3 = Image_old[2]
  d1=c1+b1
  d2=c2+b2
  d3=c3+b3
  C_1 += struct.pack(">B",d1)
  C_2 += struct.pack(">B",d2)
  C_3 += struct.pack(">B",d3)
  b1=d1
  b2=d2
  b3=d3
 s += 3
 i += 3
h+=1

217 :デフォルトの名無しさん:2011/02/08(火) 19:41:30
先生png_GAZOUDE-TAがおもしろいです
てかそこらへんはわかります問題はc1とかd1とかC_1とかです

218 :193:2011/02/08(火) 19:44:08
すいません
基本的に
raw_Image=zlib.decompress(png_GAZOUDE-TA)を

  t_Image_old = struct.unpack(">BBB", raw_Image[i+0:i+3])
  Image_old = list(t_Image_old)

3あるいは4文字づつのデータを
  c1 = Image_old[0]
  d1=c1+b1
の様に計算を加え
C_1 += struct.pack(">B",d1)
C_2 += struct.pack(">B",d2)
C_3 += struct.pack(">B",d3)
また一文字づつパックしていくのですが
一文字づつパックしているので
すこしでも大きい画像データだと
遅くなってしまいますOTL

219 :デフォルトの名無しさん:2011/02/08(火) 19:44:51
>>217
すいません
ちょっと待って下さいOTL

220 :デフォルトの名無しさん:2011/02/08(火) 20:01:11
PNGを読み込んでチャンネルごとに加工?
PILでやった方が楽だよ(どうしても自前でやりたいならどうぞ。スルーしてね)

221 :193:2011/02/08(火) 20:33:30
基本的にやりたい事は
PNGの画像のデータを
解凍して逆フィルタリングする事です。

>220
えーと、PILでPNGの画像のデータを
解凍して逆フィルタリングする方法が分かりません。





222 :デフォルトの名無しさん:2011/02/08(火) 20:36:30
>>208
このまえのPyconMiniJPで披露されてたネタだな。
ttps://sites.google.com/site/pyconminijp/reports/lt#TOC-Benchmarker

for _ in xrange(10000): x += s + "!"
だとすぐにおわるけど
for _ in xrange(10000): x = x + s + "!"
だと返ってこないとか、おもしろいなあ。


223 :デフォルトの名無しさん:2011/02/08(火) 20:39:39
>>221
import Image
img = Image.open('hoge.png')
pix = img.load()
print pix[x, y]

PNGをデコードして逆フィルタするのが本当に手段や過程ではなくて最終目標なの?
質問するときには、そもそも自分の頭の中で決めつけている方向が非効率な場合があるから、
大目標を共有するところから始めよう。

224 :デフォルトの名無しさん:2011/02/08(火) 20:42:14
で、どうしても手動でやりたいなら、まず標準ライブラリなら
array というのを使うといい。
沢山文字列オブジェクトを作ったり消したりしなくてよくなるから。

225 :デフォルトの名無しさん:2011/02/08(火) 20:42:14
>>216
C_1=""
C_1 += struct.pack(">B",d1)

L_1 = []
L_1.append(struct.pack(">B",d1)
C_1 = "".join(L_1)
にしたら?
さっきの、+とjoinの話そのまんまだけど。

226 :デフォルトの名無しさん:2011/02/08(火) 20:49:15
>223
大目標は
PNG画像自体は加工せずに
複数のPNG画像を一個のPSDファイルに変換する事です。
(但しRGBのみのPNG画像はRGB+アルファの画像にする)



227 :デフォルトの名無しさん:2011/02/08(火) 21:00:25
>>226
プログラマブルなフィルタかけるんじゃなさそうだし
ImageMagickでもつかえばいいじゃん。

228 :デフォルトの名無しさん:2011/02/08(火) 21:11:09
>>226
import Image
img = Image.open('hoge.png')
if img.format == 'RGB':
img = img.convert('ARGB')
pixels = img.tostring()

あとはお好きに煮るなり焼くなり。

229 :193:2011/02/08(火) 21:18:31
ImageMagickだとバージョンアップの度に仕様がかわるのと
RGB+アルファで画像がモノクロのPNGだと勝手にモノクロ仕様にしてしまうので
うまくいかないので
ImageMagickを使わない事にしたんです。

ちょっと待って下さい
>223と>255をやってみます

230 :193:2011/02/08(火) 21:19:37
色々有難うございます
>>228もやってみます


231 :デフォルトの名無しさん:2011/02/08(火) 22:20:05
>>218
遅そうな(=非効率なorまるっきり無駄な)ところがいくつかありますね。

1.raw_Image→t_Image_old→Image_old→c1, c2, c3というステップが無駄過ぎます。
c1, c2, c3 = struct.unpack(">3B", raw_Image[i:i+3])
で、何の不都合もなく3バイトをバラしてc1, c2, c3で参照できます。

2.この書き方ならstruct.pack()を使わずともchr()で十分です。

3.C1〜C3のケツにそれぞれ1文字(1バイト)ずつ追加していくのは効率が悪いです。
array使うなり、リストに追加していって最後に一回だけjoin()するとか創意工夫あるべし。



232 :デフォルトの名無しさん:2011/02/09(水) 00:08:20
おかげ様でかなり文章がすっきりしてきました。
PILでデーターをpixelにとったあとをこうしました
 c1=[]
 c2=[]
 c3=[]
 c4=[]
 if png_mode == "RGB":
  GAZOUSAIZU=HABA*TAKASA*3
  i = 0
  while i<C_size:
   c1.append(pixel[i+0:i+1])
   c2.append(pixel[i+1:i+2])
   c3.append(pixel[i+2:i+3])
   i+=3
  C_1="".join(c1)
  C_2="".join(c2)
  C_3="".join(c3)

(C_1、C_2、C_3はあとで他のデータと一緒にパックする)
"".join(c1)でc1の配列の内容が全部つなげられるなんて知らなかr(y

だいぶ早くなりましたが
大きい画像だと多分やばいスピードです。
c3.append(pixel[i+2:i+3])の所は他に何か方法はあるのでしょうか?

233 :デフォルトの名無しさん:2011/02/09(水) 00:20:14
>>232
i = 0
while i < C_size:
    i += 3
のループは、
for i in xrange(0, C_size, 3):
に書き直せるよ。
pixel[i+0:i+1] は pixel[i+0] だよ。

で、
C_1 = ''.join(c1)
C_2 = ''.join(c2)
C_3 = ''.join(c3)
は、
C_1 = pixel[0::3]
C_2 = pixel[1::3]
C_3 = pixel[2::3]
でいいよ。

234 :デフォルトの名無しさん:2011/02/09(水) 01:04:08
有難うございます!!
これだけで出来るようになりました!!
しかも!え、今何が起きたの!?ぐらい早くなりました!!!!
感動しました!!有難うございます!!
if png[6][3] == 2:
 C_1 = pixel[0::3]
 C_2 = pixel[1::3]
 C_3 = pixel[2::3]


235 :デフォルトの名無しさん:2011/02/09(水) 03:25:58
今入門書は読んでコードも読んだりすることは出来るようになったと思うんですが自分でP書きたいythonのコードを書けるようにステップアップするにはどうしたら良いでしょうか?
クックブックかなんかでプログラム例でも写経しようかとも思うのですが。

236 :デフォルトの名無しさん:2011/02/09(水) 03:34:21
PKakitaiythonはライブラリが豊富だからOS作ろうというのでもなければ結構なんでもできちゃう
だから自分の好きな分野でツールっぽいものを作ってみるのがいいとおもうよ

237 :デフォルトの名無しさん:2011/02/09(水) 03:45:06
>>236
アドバイスありがとうございます。
PKakitaiythonは初めて知りました。
Webページを巡回させたりとかcgiとかに興味があったりするのでちょっと頑張って
作れるものなら作ってみようと思います。

238 :デフォルトの名無しさん:2011/02/09(水) 06:34:56
下のようなモジュールのドキュメントの見方がよく分かりません。
defが定義済みであることは分かるのですが、staticなどは何でしょうか。

ttp://www.pyside.org/docs/pyside/PySide/QtGui/QApplication.html

239 :デフォルトの名無しさん:2011/02/09(水) 06:49:55
インスタンス経由じゃなくクラス経由で呼び出すメソッドのことじゃないか
インスタンス作らなくても呼び出せるというか

240 :デフォルトの名無しさん:2011/02/09(水) 09:27:49
static method と class method は違うよ
ttp://jutememo.blogspot.com/2008/09/python-classmethod-staticmethod.html
ttp://d.hatena.ne.jp/ymotongpoo/20081120/1227166307


241 :デフォルトの名無しさん:2011/02/09(水) 18:31:09
str型からdict型へのキャストってできますか?

242 :デフォルトの名無しさん:2011/02/09(水) 18:42:58
>>241
"hoge: 1" を {'hoge': 1} にとか具体的にどうぞ

243 :デフォルトの名無しさん:2011/02/09(水) 18:53:50
evalとかjsonとかか?

244 :デフォルトの名無しさん:2011/02/09(水) 19:17:08
>>243
evalこれでした。
ありがとうございます。

245 :デフォルトの名無しさん:2011/02/09(水) 20:13:09
security hole ですねわかります

246 :デフォルトの名無しさん:2011/02/09(水) 21:29:43
知識つけると見違えるほどの時間節約になるんだな……。面白い

247 :デフォルトの名無しさん:2011/02/10(木) 00:50:00
いろいろアドバイス貰ったおかげで
PNGをPSDに変換するやつ出来たよーぉぉおお
有難う!!!!

・・・といってもmyPaintというお絵かきソフトの独自形式ORAを
PSDに変換するソフトなんだ。
.ORAの拡張子をZIPに変更後解凍。
解凍したファイルに入っているXMLファイルの情報を元に
同フォルダーに入っている複数PNGを一個のPDSファイルにする
という内容のもの。

ソースはOraToPsdフォルダーの中の
ソースっていうフォルダーに入れてる。

http://www1.axfc.net/uploader/H/so/126631.zip

248 :デフォルトの名無しさん:2011/02/10(木) 10:55:48
いただきました
ありがとうございました

249 :デフォルトの名無しさん:2011/02/10(木) 10:58:50
azusa って誰?

250 :デフォルトの名無しさん:2011/02/10(木) 12:54:09
文字列のリストlistがあって
for x in list:
このfor文の中で、今あいてにしてる文字xの隣の文字にアクセスするにはどうすればよい?
for i in len(list):
x = list[i]
とかで回せばできそうですが、それ以外には・・・?

251 :デフォルトの名無しさん:2011/02/10(木) 12:57:59
文字xの隣の文字ってなんだ
日本語で頼む

252 :デフォルトの名無しさん:2011/02/10(木) 13:00:42
>>250
アクセスとは、単に参照するのか、書き換えるのか。
隣というのは、左(インデックスの小さいほう)か右か。
端を処理しているときに隣が無いけどどうするのか。

いろいろ未定義なので、まずはサンプルを for i in range(len(list)):
を使って書いてみ?

253 :デフォルトの名無しさん:2011/02/10(木) 13:01:49
すまぬ
list = ["a","b","hoge"]
とかで
for x in list:
・・・x・・・
とかするとlistの順でfor文の中身が処理されるわけだが、
その処理で、例えばこのlistだとすると
"a"の処理に隣の"b"を見ながら処理したい
そんな場合

254 :デフォルトの名無しさん:2011/02/10(木) 13:03:48
aを保存しておいて、bから始めれば良いだけでは

255 :デフォルトの名無しさん:2011/02/10(木) 13:04:22
もってきました
最初からもって繰ればよかった
つまりこれがダメだった例です
fo = open(OUTPUT_FILE_NAME,"w")
num_indent = 0
indent = " "
for raw in lists:
for val in raw:
if val == "{":
num_indent = num_indent + 1
elif val == "}":#####インデント減らす判定
num_indent = num_indent -1
fo.write(str(val))
fo.write(" ")
fo.write("\n"+num_indent*indent)#####インデント処理
fo.close()
用はインデントをちゃんと取りたいんですが
これだとインデントを処理した後インデントを減らす判定
がくるので、処理の前にインデントを減らす判定をせねば、というのが現状です

256 :デフォルトの名無しさん:2011/02/10(木) 13:18:42
fo = open(OUTPUT_FILE_NAME,"w")
num_indent = 0
indent = " "
for raw in lists:
  for val in raw:
    if val == "{":
      num_indent = num_indent + 1
    elif val == "}": #インデント減らす判定
      num_indent = num_indent -1
    fo.write(str(val))
    fo.write(" ")
  fo.write("\n"+num_indent*indent) #インデント処理
fo.close()


257 :デフォルトの名無しさん:2011/02/10(木) 13:18:53
質問者ですが、一応できました
for raw in lists:
if raw == ["}"]:
num_indent = num_indent -1
fo.write(num_indent*indent)
for val in raw:
if val == "{":
num_indent = num_indent + 1
fo.write(str(val))
fo.write(" ")
fo.write("\n")
fo.close()

できましたが、後学のためその隣にアクセスする方法があったら教えていただけると幸いです
(Cとかではポインタ演算でアクセスできたりしたので、同じようにやる方法があるかもと思った次第でした)

258 :デフォルトの名無しさん:2011/02/10(木) 13:22:39
reduce()

259 :247:2011/02/10(木) 13:31:48
テスト用のmypaintのファイル入れるの忘れました。
以下のファイルを解凍すると
test.oraというファイルが出てくるんで
それをPSDに変換したり中身をみたりするのに使って下さい。
http://www1.axfc.net/uploader/Sc/so/203576.zip

260 :デフォルトの名無しさん:2011/02/10(木) 13:33:55
>>255
num_indent = num_indent + 1

num_indent += 1
で良いよ。

で、根本的な問題は、次の行のインデントを先に出力していることじゃない?

fo = open(OUTPUT_FILE_NAME,"w")
indent = " "
num_indent = 0

for raw in lists:
    K = raw.strip() # 左右の空白文字削除
    L = K.lstrip('}') # 行頭の } を削除
    # 行が } で始まるときだけ、現在の行のインデントを減らす。
    num_indent -= len(K) - len(L)
    fo.write(indent * num_indent)
    fo.write(K + '\n')
    # それ以外の '{', '}' は、次の行のインデントから影響する。
    num_indent += L.count('{') - L.count('}')
fo.close()

261 :デフォルトの名無しさん:2011/02/10(木) 13:39:14
おっと、 raw って文字列じゃなくてリストだったのか。
じゃぁ >>260 raw.strip() の代わりに ''.join(raw).strip() とかしないと動かない。

で、隣にアクセスする方法だけど、

for curr, next in zip(lists, lists[1:]):

ただし、これだとcurrに最後の要素が入らないから、

for curr, next in zip(lists, lists[1:] + ['']):

とかかな。別に、普通に for i in range(len(lists)) でも良いよ。

262 :デフォルトの名無しさん:2011/02/10(木) 13:42:36
>>260-261
詳しくありがとうございます
勉強させていただきますね

263 :デフォルトの名無しさん:2011/02/10(木) 13:57:31
for raw in lists:
  if raw == ["}"]:
    num_indent = num_indent -1
  fo.write(num_indent*indent)
  for val in raw:
    if val == "{":
      num_indent = num_indent + 1
    fo.write(str(val))
    fo.write(" ")
  fo.write("\n")
fo.close()


264 :デフォルトの名無しさん:2011/02/10(木) 14:34:14
pilでpsdをレイヤーごとにPNGにするには
seekの()に何を入れればいいですか??

import Image

image=Image.open("test1.psd")
image.seek(0)

image.save("layer1.png")
del image


265 :264:2011/02/10(木) 17:22:39
ごめん、超勘違い
このseekでとれるのは最初のチャンネルだけだった

266 :デフォルトの名無しさん:2011/02/11(金) 18:03:29
16進数を10進数にするにはどうしたらいいですか?

267 :デフォルトの名無しさん:2011/02/11(金) 18:12:21
int('0xff', 16)
ffhとかは例外吐くので自分で正規化した方がいい

268 :デフォルトの名無しさん:2011/02/11(金) 18:17:43
ありがとうございます!!

269 :デフォルトの名無しさん:2011/02/11(金) 18:25:38
pythonでディレクトリとか作れんのな。
これってシェルスクリプトの領域かと思ってた

270 :デフォルトの名無しさん:2011/02/11(金) 18:37:42
すいません、もうひとつ質問です
\xff\xfe\xffというような感じで16進が入っている場合
どうやって変換すればいいですか
辞書でやるにも長すぎるし
jisyo={"\x00" : 0,
"\xff" : 255,
"\xfe" : 254,
"\xfd" : 253,
"\xfc" : 252,
"\xfb" : 251,
"\xfa" : 250,
"\xf0" : 249,
"\xf9" : 248,
"\xf8" : 247,・・・・・
もともと文字列なので\をゼロに置換しようにも
print "kaisuu:",repr(kaisuu[0])[0]
とかしてみても\記号自体すら取得できません。
変換するデータが長いので
struct.unpack(">B","\xff")を使うと大変な事になりそうです。

271 :デフォルトの名無しさん:2011/02/11(金) 18:48:12
>>270
>>> "\\x01\\x0f".decode('string_escape')
'\x01\x0f'

272 :デフォルトの名無しさん:2011/02/11(金) 18:49:56
>>270
>>> s = r'\xff\xfe\xff'
>>> s
'\\xff\\xfe\\xff'
>>> s.decode('string_escape')
'\xff\xfe\xff'

273 :デフォルトの名無しさん:2011/02/11(金) 19:40:47
またいつもの人か
>>270
ここのエスケープシーケンスを読みなさい
http://www.python.jp/doc/release/reference/lexical_analysis.html#strings

274 :デフォルトの名無しさん:2011/02/11(金) 20:07:30
>>> map(ord, "\xff\xfe\xff")
[255, 254, 255]

275 :270:2011/02/11(金) 20:53:08
有難うございます。
ちょっと理解出来ないので
色々調べてみます。

276 :デフォルトの名無しさん:2011/02/11(金) 20:55:14
>>274
うぉぉぉおおおお有難うございます!!
すごい便利ー!!!

277 :デフォルトの名無しさん:2011/02/11(金) 23:17:54
ディレクトリ内のファイル走査させるつもりで作ったんですが
ファイルは確かにあるのに以下のエラーが出てしまいます。
内容はめちゃくちゃだと思いますが間違いの指摘お願いします。

OSError: [Errno 2] No such file or directory

http://codepad.org/j8qAvuw4

278 :デフォルトの名無しさん:2011/02/11(金) 23:25:00
>>277
エラーが出たときの引数を貼ってください

279 :デフォルトの名無しさん:2011/02/11(金) 23:31:01
/home/usr名
ファイル名はaccum.pyで場所が/home/usr名/workspace/accum.py
です。
すぐ近くのディレクトリが少ない所にファイルを置くとちゃんと見付かったんですが。

280 :デフォルトの名無しさん:2011/02/11(金) 23:40:39
ではこんな感じで例外が起こったときの状況を調べてみてください
http://codepad.org/5pm1xiZi

281 :デフォルトの名無しさん:2011/02/11(金) 23:43:53
>>279
スタックトレースもちゃんと張ってください。
エラーの箇所が os.listdir なのか os.path.isfile なのか判断できません。

282 :デフォルトの名無しさん:2011/02/11(金) 23:46:17
>>279
あと、 not os.path.isfile の代わりに os.path.isdir 使ったほうが良いと思うよ。
file でも dir でも無いケースがあるかもしれない。デッドリンクとか。

283 :デフォルトの名無しさん:2011/02/11(金) 23:49:10
os.walkでやった方がもっといいかも
http://www.python.jp/doc/release/library/os.html#os.walk

284 :デフォルトの名無しさん:2011/02/11(金) 23:51:41
/home/usr名だとうまくいったので/homeで試してみると
以下のようなエラーが出ました。
目的のファイルはちゃんと見付かっているんですがちゃんと終了できてないのかな。
度々すみません。

OSError
path: /home/.Trash-root
Path: /home/usr名/workspace/accum.py
OSError
path: /home/lost+found


285 :デフォルトの名無しさん:2011/02/11(金) 23:55:39
>>281-283
isdirに変更しました。。
スタックトレースは見てませんでしたがちょっと確認してみます。



286 :デフォルトの名無しさん:2011/02/12(土) 00:13:26
スタックトレースですが以下のような感じです。
気が向いたときで良いので回答頂けるかたお願いします。
>>283
どうもありがとうございます。
一度os.walkで書き直してみようと思います。

Traceback (most recent call last):
File "/home/user名/workspace/serch_file.py", line 28, in <module>
search(sys.argv[1], sys.argv[2])
File "/home/user名/workspace/serch_file.py", line 22, in search
search(next, file)
File "/home/user名/workspace/serch_file.py", line 26, in search
traceback.print_exception()
TypeError: print_exception() takes at least 3 arguments (0 given)


287 :デフォルトの名無しさん:2011/02/12(土) 00:20:15
というか「手を加える前の」>>277を実行した際のコマンドラインと出力
(その中にスタックトレースが入ってる)を貼ってくれると答える側としたらうれしい

$ python yourscript.py arg1 arg2
TraceBack ...
...
OSError: [Errno 2] No such file or directory: '...'
$

みたいなの
os.walkをつかって書き直すのは>>277のどこがまずかったか突き止めてからだろう

288 :デフォルトの名無しさん:2011/02/12(土) 00:24:44
>>286
君、Tracebackの内容を全く読んでいないでしょう?
26行目のtraceback.print_exception()に三つ引数が必要だが一つも
指定されていないって書いてあるよ
http://www.python.jp/doc/release/library/traceback.html#traceback.print_exception

289 :デフォルトの名無しさん:2011/02/12(土) 00:34:56
>>287-288
これが修正以前のときのです。。

>>288
tracebackモジュールは初めて使ったのでわからなかったので間違ってましたね。
ご指摘ありがとうございます。

Traceback (most recent call last):
File "/home/user名/workspace/serch_file.py", line 28, in <module>
search(sys.argv[1], sys.argv[2])
File "/home/user名/workspace/serch_file.py", line 26, in search
search(next, file)
File "/home/user名/workspace/serch_file.py", line 26, in search
search(next, file)
File "/home/user名/workspace/serch_file.py", line 26, in search
search(next, file)
File "/home/user名/workspace/serch_file.py", line 26, in search
search(next, file)
File "/home/user名/workspace/serch_file.py", line 26, in search
search(next, file)
File "/home/user名/workspace/serch_file.py", line 18, in search
list = os.listdir(pas)
OSError: [Errno 2] No such file or directory: '/home/user名/.mozilla/firefox/cz9umq1k.default/lock'


290 :デフォルトの名無しさん:2011/02/12(土) 00:41:13
解決しました。。。
>>282の方のおっしゃってるように元のデータのisfileをisdirに
変更するだけでした。
皆さんには根気強く教えていただき本当にありがとうございました。


291 :デフォルトの名無しさん:2011/02/12(土) 00:42:00
>>289
もしかして"No such file or directory"の意味も分からない?

No such file or directory「そのようなファイルまたはディレクトリ
はありません」指定のパス名の構成要素が存在しないか、またはパス名
が空の文字列でした。

292 :デフォルトの名無しさん:2011/02/12(土) 00:51:21
lockがロックファイルなんだとしたら
すぐ作られたり消えたりしてエラー引き起こしそうだね

293 :デフォルトの名無しさん:2011/02/12(土) 02:33:52
>>291
英語の解説は英語板でどうぞ

294 :デフォルトの名無しさん:2011/02/12(土) 03:45:43
PILで最初は存在しないPNGを作るにはどうしたらいいですか?
最初にImage.open(画像パス)しても存在しないとエラーが出ます
というのも
画像サイズと
RGB+アルファデータの取得が出来たので
そのデータをPNGに入れたいからです。

295 :デフォルトの名無しさん:2011/02/12(土) 03:49:39
Image.frombuffer
http://www.pythonware.com/library/pil/handbook/image.htm

296 :デフォルトの名無しさん:2011/02/12(土) 04:09:05
有難うございます
やってみたのですがdataの部分はどのようにデータを入れればいいのでしょうか?
てっきりチャンネルごとの情報を入れればいいと思い
(255,255,255,255)と入れてみたのですが駄目でした。

image = Image.frombuffer("RGBA",(1,1),(255,255,255,255))
image.save("testmo.png")

297 :デフォルトの名無しさん:2011/02/12(土) 04:18:50
im = Image.frombuffer('RGBA', (1, 1), '\x255\x255\x255\x255')

298 :デフォルトの名無しさん:2011/02/12(土) 04:20:13
>>> im = Image.frombuffer('RGBA', (1, 1), '\xff\xff\xff\xff')
>>> im
<PIL.Image.Image image mode=RGBA size=1x1 at 0x1265B70>

299 :デフォルトの名無しさん:2011/02/12(土) 04:22:49
\x255 はないわw
im = Image.frombuffer('RGBA', (100, 100), '\x40\xff\xc0\x80'*10000)


300 :デフォルトの名無しさん:2011/02/12(土) 04:33:01
stringじゃないbufferってどうやって作るん?

301 :デフォルトの名無しさん:2011/02/12(土) 04:42:00
>>300
arrayとかnumpy使うとか
http://www.python.jp/doc/release/library/array.html#module-array

302 :デフォルトの名無しさん:2011/02/12(土) 04:44:41
im = Image.frombuffer('RGBA', (256, 256), ''.join([''.join([''.join([chr(y), chr(0), chr(x), chr(255)]) for x in range(256)]) for y in range(256)]))


303 :デフォルトの名無しさん:2011/02/12(土) 04:55:22
>>301
import array
b = array.array('B')
for y in range(256):
  for x in range(256):
    b.fromlist([y, x, 0, 0])

len(b)
262144

import Image
im = Image.frombuffer('RGBA', (256, 256), b)
__main__:1: RuntimeWarning: the frombuffer defaults may change in a future release; for portability, change the call to read:
  frombuffer(mode, size, data, 'raw', mode, 0, 1)

だめポorz

304 :デフォルトの名無しさん:2011/02/12(土) 04:57:04
http://www.python.jp/doc/release/library/array.html#array.array.tostring

305 :デフォルトの名無しさん:2011/02/12(土) 05:02:59
tostring()あるのは分かってるけど
それだとbuffer渡しじゃなくて結局string渡してるから
>>300
への回答にはなっていないのでは

306 :デフォルトの名無しさん:2011/02/12(土) 05:06:29
>>> import array
>>> b = array.array('B')
>>> for y in range(256):
... for x in range(256):
... b.fromlist([y, x, 0, 0])
...
>>> import Image
>>> im = Image.frombuffer('RGBA', (256, 256), b.tostring())
>>> im.save('hoge.png')

でいけましたほんとうにありがとうございました
でも画面になにも出ませんorz

307 :デフォルトの名無しさん:2011/02/12(土) 05:19:56
>>303
Warningメッセージ読みなよ
'raw', mode, 0, 1を付けろって書いてあるでしょ

>>306
アルファ値が0になっている

308 :デフォルトの名無しさん:2011/02/12(土) 06:01:31
import array
b = array.array('B')
for y in range(256):
  for x in range(256):
    b.fromlist([0, y, x, 255])

import Image
im = Image.frombuffer('RGBA', (256, 256), b, 'raw', 'RGBA', 0, 1)
im.save('hoge.png')

で上手く逝きました

>>302 とは上下が逆になってしまっていますね


309 :デフォルトの名無しさん:2011/02/12(土) 06:08:41
>>> im = Image.frombuffer('RGBA', (256, 256), b, 'raw', 'RGBA', 0, 1)
>>> im.save('hoge.png')
>>> im2 = Image.frombuffer('RGBA', (256, 256), b.tostring())
>>> im2.save('hoge2.png')

ほんとだ
なんでだろ><

310 :デフォルトの名無しさん:2011/02/12(土) 06:13:09
Image.frombuffer と Image.fromstring の違いが分からない

311 :デフォルトの名無しさん:2011/02/12(土) 06:19:53
>>310
The Image Module
ttp://www.pythonware.com/library/pil/handbook/image.htm
Not all modes can share memory; supported modes include "L", "RGBX", "RGBA", and "CMYK".
For other modes, this function behaves like a corresponding call to the fromstring function.

>>305
StringIO を使うらしい
D. Writing Your Own File Decoder
ttp://www.pythonware.com/library/pil/handbook/decoder.htm


312 :296:2011/02/12(土) 12:34:59
有難うございます
普通に”\xff\xff\xff\xff”とかのデータを入れちゃえばいいんですね、
たすかりました!!

313 :デフォルトの名無しさん:2011/02/12(土) 13:13:53
めっちゃ効率悪そうなんだが

314 :デフォルトの名無しさん:2011/02/12(土) 16:06:53
>>313
取得したデータ自体が”\xff\xff\xff\xff”とかなんで
いい感じっす。

315 :デフォルトの名無しさん:2011/02/12(土) 17:01:30
PSDをレイヤーごとにRGBAのPNGに出力するプログラムできたよ!!!
(PSDはRGBにしか対応して無いよ)
いろいろ教えてくれた人達有難う!!
最初にこのスレに来た時には絶対できそうにねぇなとか思ってたけど
みんなのおかげで出来た!!有難う!!!!!
http://www1.axfc.net/uploader/Sc/so/204352.zip


316 :デフォルトの名無しさん:2011/02/12(土) 17:30:16
unko = ['A', 'B', 'C', 'D']

for x in unko:
print '今の要素 = ', x
print '次の要素 = ', ???

というコードがあったとき、
このfor文の中で「xの次の要素」を取り出す方法を教えてください。
よろしくお願いいたします。

317 :316:2011/02/12(土) 17:35:51
インデントが消えてしまいました。申し訳ございません。正しくは以下の通りです。

unko = ['A', 'B', 'C', 'D']
for x in unko:
print '今の要素 = ', x
print '次の要素 = ', ???


318 :デフォルトの名無しさん:2011/02/12(土) 17:39:43
>>315
いただきました
ありがとうございました

319 :316:2011/02/12(土) 17:46:11
何度もすみません。

unko = ['A', 'B', 'C', 'D']
for x in unko:
  print '今の要素 = ', x
  print '次の要素 = ', ???


320 :デフォルトの名無しさん:2011/02/12(土) 17:50:54
spam = ['A', 'B', 'C', 'D']

for x, y in zip(spam, spam[1:]):
print '今の要素 = ',x
print '次の要素 = ',y

↓結果

今の要素 = A
次の要素 = B
今の要素 = B
次の要素 = C
今の要素 = C
次の要素 = D

321 :デフォルトの名無しさん:2011/02/12(土) 17:55:17
>>316-317
両方ともHTMLのソース見たらインデント残ってるから安心汁

322 :デフォルトの名無しさん:2011/02/12(土) 18:53:33
>>316-317
連続した半角スペースやタブ文字はレタリングされないよ。
>>321の言うとおりHTML上には残っているけどね。

323 :デフォルトの名無しさん:2011/02/12(土) 19:43:29
いまDjangoの公式チュートリアルをしてるのですが、apache - mod_pythonの設定がどうもうまくいきません。

ImportError: Could not import settings 'mysite.settings' (Is it on sys.path? Does it have syntax errors?): No module named mysite.settings
というエラー文から、どうやらPythonPathがうまく通っていないようなのですが、http://djangoproject.jp/doc/ja/1.0/howto/deployment/modpython.html?highlight=mod_python にある通りに記述してもエラーが解消しません。
エラー文で検索しても、httpd.confでPythonPath設定しろ、というものしか見つからず困ってしまっています。
CentOS5上で、Python 2.6.5、Django1.2.3をインストールして進めています。何か原因に思い当たるものがありませんでしょうか?

324 :デフォルトの名無しさん:2011/02/12(土) 20:14:48
>>323
mod_python はもう終わりだから mod_wsgi 使おう。
あと、mod_pythonはちゃんと Python 2.6.5 をベースに自分でビルドしたよね?
mod_python がシステムの Python 使ってると動かないよ。

325 :デフォルトの名無しさん:2011/02/12(土) 20:25:38
Pythonってdefineみたいな機能ってない?

326 :デフォルトの名無しさん:2011/02/12(土) 20:38:11
マクロ?

327 :デフォルトの名無しさん:2011/02/12(土) 20:41:06
>>323
settings.pyを作ってないんだろ
>mysite.settings は、 Django プロジェクトの設定ファイルを指す
>Python import パスになるよう、自分の環境に合わせて置き換えて下さい。

328 :デフォルトの名無しさん:2011/02/12(土) 21:04:49
CentOS5 のデフォルトの Python って 2.4 だろ
>>324 の逝ってる通り
mod_python が 2.4 のままだと思われ


329 :デフォルトの名無しさん:2011/02/12(土) 21:08:35
>>323
もちろん mod_wsgi がおすすめだけど
手っ取り早く終わらすには django.cgi って手もある
ttp://code.djangoproject.com/ticket/2407
ttp://code.djangoproject.com/attachment/ticket/2407/django.cgi
ttp://code.djangoproject.com/attachment/ticket/2407/dj_wsgiref_cgihandler.py

330 :デフォルトの名無しさん:2011/02/12(土) 21:17:18
>>324
>>328
mod_pythonはyumで最新を投入しました。
python26-mod_python.i386 3.3.1-13.el5 installed

python本体もシステムのじゃなくて、上記したとおり2.6.5を入れなおしています。こちらもyumを利用しています。

mod_wsgiは知らなかったのでこれから調べてみます。
あとソースから入れるのも一度試してみます。


>>327
settings.pyは自動生成なので、ちゃんとファイルはありますし、中身の書き換えも行っています。

回答くださった皆様、ありがとうございます。引き続きなにか心当たりありましたらお願いします。

331 :デフォルトの名無しさん:2011/02/12(土) 21:21:20
>>329
ありがとうございます。
django.cgiも初見だったので、覗いてみます。

332 :デフォルトの名無しさん:2011/02/12(土) 21:41:37
>>330
$PYTHONPATH/mysite/settings.pyは存在するの?
>PythonPath には、アプリケーションから import したいモジュールの
>各々の親ディレクトリを入れなければなりません。
>また、 DJANGO_SETTINGS_MODULE の親ディレクトリも入れねばなりません。

333 :316:2011/02/12(土) 23:59:31
>>320-322
うおおおお!
ありがとうございます。

半角スペースとタブは、レンダリングされないだけで、正しく書き込めてはいるんですね。
てっきり、半スペとタブは消されて書きこまれてるのかと思ってました。




334 :デフォルトの名無しさん:2011/02/13(日) 00:40:09
すいません
UbuntuだとPythonではUnicode扱えないのでしょうか
IDLEだと日本語入力できず、Netbeansではアスキーコードじゃない
とエラーが出てしまいます

335 :デフォルトの名無しさん:2011/02/13(日) 00:58:49
sys.setdefaultencoding() 禁止


336 :デフォルトの名無しさん:2011/02/13(日) 01:35:10
Python2.7にしたは良いんだがTkinter使えないじゃん。
なんか依存関係が大変そう

337 :デフォルトの名無しさん:2011/02/13(日) 01:41:51
>>334
つ $ locale
つ $ python -c "import locale; print locale.getpreferredencoding();"

ちなみに、IDLEは使わないほうがいい。unicodeリテラル (u"あいう") はIDLEもIPythonも
Python の compile() の仕様のせいでぶっ壊れてる。
インタラクティブシェルで日本語をマトモに使いたいなら python 内蔵のが一番。
一応、readlineを使った補完も可能。

338 :デフォルトの名無しさん:2011/02/13(日) 02:23:49
nanoの出番のようだな

339 :デフォルトの名無しさん:2011/02/13(日) 02:31:35
CentOSの俺涙目


340 :315:2011/02/13(日) 02:32:46
ちょっと欲が出て少し早くしようとして
以下の様に変えてみましたが
他にスマートに出来る方法なんてあるのでしょうか?
やっている事としては4つの文字列から
同じ位置の文字を取り出してtouという配列に入れて
最後に結合するだけです。

for s in xrange(0,layersuu,1):
 tougouimage=""
 tou=range(len(chimrawlayer[s][1])*4)
 for i in xrange(0,(len(chimrawlayer[s][1]))*4,4):
  tou[i]= chimrawlayer[s][1][i] #赤の情報
  tou[i+1]=chimrawlayer[s][2][i] #緑の情報
  tou[i+2]=chimrawlayer[s][3][i] #青の情報
  tou[i+3]=chimrawlayer[s][0][i] #アルファの情報

 tougouimage ="".join(tou)
 image = Image.frombuffer("RGBA",(channelInfo[s][3],channelInfo[s][2]),tougouimage,"raw","RGBA",0,1)
 image.save(layername[s]+".png")
 del image


341 :デフォルトの名無しさん:2011/02/13(日) 02:46:23
うああああ
ごめんなさい自己解決!!!
tou[0::4]とか使えば良かったごめんなさい

342 :デフォルトの名無しさん:2011/02/13(日) 02:47:01
>>339
私も CentOS ですが UTF-8 で難なく使えてますよ

343 :デフォルトの名無しさん:2011/02/13(日) 02:47:05
341=340です
すいませんOTL

344 :334:2011/02/13(日) 04:01:30
>>335
>>337
「みんなのpython」を頭からこなしてるようなプログラミング入門者で
正直「???」な状態ですが、解決にたどり着けそうな感じがします
ありがとうございました

345 :デフォルトの名無しさん:2011/02/13(日) 04:29:37
あーあ、>>335が何しても結局print "こんにちは"とかになりそうな予感w
禁止するならちゃんとフォローしろよwバカだなw

346 :デフォルトの名無しさん:2011/02/13(日) 04:45:41
ビルドって何?
PY2exeと何が違うの?

347 :デフォルトの名無しさん:2011/02/13(日) 06:40:31
>>344

>>337 の最初の2行の実行結果を晒せって意味だよ


>>345
print "こんにちは" じゃだめだ
print u"こんにちは" 煮汁

348 :デフォルトの名無しさん:2011/02/13(日) 09:46:24
>>334
よく分からんがコードの一番最初に
#!/usr/bin/env python
# -*- coding: utf-8 -*-
ではダメなの?

349 :346:2011/02/13(日) 15:17:20
とりあえず根本的な勘違いしてた。
http://www.python.jp/doc/2.4/inst/standard-install.html
を読んでみたけど
ビルドは作った.pyをインストールする準備(OSの種類は何でもいい)


PY2exeは作った.pyをwindows用の実行形式にする

でいいのかな?

350 :デフォルトの名無しさん:2011/02/13(日) 15:23:01
blobnextno = blobno.getNextNum() #数字
key_name2 = key_name1 + "/" + str(blobnextno)

TypeError: 'unicode' object is not callable
気にしたことなかったけど、ユニコード文字列の連結ってどうやんだっけ?

351 :デフォルトの名無しさん:2011/02/13(日) 15:39:39
moji=u"あいう"
hazu=1
mm=moji+str(hazu)
で普通にできたよ

352 :デフォルトの名無しさん:2011/02/13(日) 15:45:17
>>350
strと同じ名前の変数使ってた・・・ すまん 忘れてくれ

353 :デフォルトの名無しさん:2011/02/13(日) 15:48:46
strにunicode文字列入れるなよw

354 :デフォルトの名無しさん:2011/02/13(日) 15:54:25
u"spam" + "egg"は、u"spam" + "egg".decode(sys.getdefaultencoding())と等価らしい。
……また悪名高いgetdefaultencodingか。

当然ながらこの悪しき風習はPython3では削除され、同じ型同士でしか結合できなくなる。

355 :デフォルトの名無しさん:2011/02/13(日) 16:12:36
だれもそんな話はしてない訳だが

356 :デフォルトの名無しさん:2011/02/13(日) 16:17:41
>>354
じゃあ、>351はpython3では使えないって事でOK?

357 :デフォルトの名無しさん:2011/02/13(日) 16:24:59
>>356
使えるよ。Python3ではstrの戻り値もunicodeだから

358 :デフォルトの名無しさん:2011/02/13(日) 16:43:00
>>349
ビルドの中身はその時々によって違うよ
C拡張モジュールを setup.py install するとCコンパイラでコンパイル、リンクする処理が中に入るし
py2exe で実行ファイルを作る処理もビルドと言える

359 :デフォルトの名無しさん:2011/02/13(日) 18:22:31
>>358
はーん、
「いつもpy2exeばっかだけど
 アタイもいつかカッコイイ『び・る・ど』したいなァ」
とか思ってたけど
実はビルドやってたんだね。
あのpy2exe用のsetup.pyの中身を書くのが
ビルドする為の(人間がする)作業なのか!!!
有難う

360 :デフォルトの名無しさん:2011/02/13(日) 19:03:37
>>354
非ASCII文字は全部unicode型に統一しておけば、あまり問題は生じない

361 :デフォルトの名無しさん:2011/02/13(日) 20:05:02
datetimeで現在から24時間前のdatetimeオブジェクトはどうやって作れますか?

362 :デフォルトの名無しさん:2011/02/13(日) 20:20:31
sys.argvのエラーを調べるにはどうしたらいいですか?

http://stackoverflow.com/questions/2292703/how-can-i-get-the-executables-current-directory-in-py2exe
を読んで
os.path.realpath(sys.argv[0])を使えばいいっていうところまでは分かったんですが
os.path.realpathを付け足した.pyを動かすと
エラー情報がなんか書かれてるのは分かるんですが
あっという間にウィンドウが閉じてしまってエラー内容が分かりません。

sys.argvのエラー内容なのでバッチファイルで
cd /d %~dp0
TUKUTTA.py %1
pause
してもエラーが起きないから確認しようがないし
PyScripterでテスト起動も出来ないし
困っています





363 :デフォルトの名無しさん:2011/02/13(日) 20:28:57
>361
timedeltaでどうにか

364 :デフォルトの名無しさん:2011/02/13(日) 20:32:23
>>361
datetime.datetime.today() - datetime.timedelta(hours=24)

365 :デフォルトの名無しさん:2011/02/13(日) 20:38:12
>>362
sys.argvのエラーとは何ですか?
あなたの言葉では分からないので具体的にお願いします

366 : 冒険の書【Lv=2,xxxP】 :2011/02/13(日) 20:40:10
>>363, 364
ありがとうございます。

367 :362:2011/02/13(日) 20:53:34
>>365
説明不足ですいません。
えーと
ファイルを作った.pyにドラッグ&ドロップして
そのパスを取得するのに
sys.argvを使いました。
しかしpy2exeでEXE化したファイルに
ドラッグ&ドロップするとそのexeファイルが動かないので
cd /d %~dp0
TUKUTTA.exe %1
という内容のバッチファイルを作って動かしていました。

バッチファイルなしで作ったexeファイルを動かすには
http://stackoverflow.com/questions/2292703/how-can-i-get-the-executables-current-directory-in-py2exe
を読んで
os.path.realpath(sys.argv[1])を使えばいいっていうところまでは分かったんですが

os.path.realpath(sys.argv[1])を使った.pyのファイルに任意のファイルをドラッグ&ドロップしたのですが
なにかエラーが発生して途中で終わってしまいます。
ウィンドウにエラー情報がなんか書かれてるのは分かるんですが
あっという間にウィンドウが閉じてしまってエラー内容が分かりません。

sys.argvのエラー内容なのでバッチファイルで
cd /d %~dp0
TUKUTTA.py %1
pause
してもエラーが起きないから確認しようがないし
PyScripterでテスト起動も出来ないし
困っています



368 :デフォルトの名無しさん:2011/02/13(日) 21:03:34
>>367
バッチファイルはexeファイルも起動できるんだぜ

369 :デフォルトの名無しさん:2011/02/13(日) 21:07:23
>>368
バッチファイルを使うと普通に動くのですが
バッチファイルを使わずにexeファイルに直接ファイルをドラッグ&ドロップすると
うまく動かないのです。

370 :362:2011/02/13(日) 21:11:03
とりあえず無限ループを仕込んで
どこでエラーが出ているかは分かったんですが
なんのエラーで止まっているのかさっぱりわからないですOTL

371 :デフォルトの名無しさん:2011/02/13(日) 21:17:57
cd /d %~dp0
TUKUTTA.py %1
pause
は、.exeじゃなくて.pyを動かしてるのだけどね。

372 :362:2011/02/13(日) 21:25:28
ごめんなさい、エラーの原因分かりました。
今から原因書きます

373 :デフォルトの名無しさん:2011/02/13(日) 21:58:03
原因と言っても起きた現象で説明するしか出来ないですが・・・
os.path.realpathとかpy2exeとか関係なかったです。
tukutta.py
*****************************************
argv0="C:/Users/tukutta.py"
argv1="C:/Users/tekitou.txt"
ft=file(filename,"w")
ft.write(u"テスト")
ft.close()
***************************************
tukutta.pyを起動すると
tukutta.pyと同じところにtext.txtが出来ます

ところが
****************************************
argv0=sys.argv[0] #このファイルのパス
argv1=sys.argv[1] #ドロップしたファイルのパス
filename="text.txt"
ft=file(filename,"w")
ft.write(u"テスト")
ft.close()
****************************************
にした場合は
tukutta.py自身に任意のファイルをドラッグ&ドロップしてもエラーで止まりますが
バッチファイルを間に挟むときちんと動きます。

バッチファイルなしで動かすには
filename="text.txt"の部分を
pydirpath = os.path.dirname(argv0)
filename=os.path.join(pydirpath,"text.txt")
にしないといけないようでした


374 :デフォルトの名無しさん:2011/02/13(日) 22:26:46
そんなこといちいち報告しなくてもみんな判ってるよ

375 :デフォルトの名無しさん:2011/02/13(日) 23:26:02
そんな・・・

では、argvを使っている時のエラー確認はどうすればいいのでしょうか??
今回みたいにargvを使っていてうまくいかない場合、
エラーメッセージを確認しようがありません。

376 :デフォルトの名無しさん:2011/02/13(日) 23:31:50
if __name__ == '__main__':
  try:
    main()
  except:
    ここで自分でログに出力汁

377 :デフォルトの名無しさん:2011/02/13(日) 23:55:53
ありがとうございます。
調べたら
tyr:
 p+=1
except :
 print u"エラー発生"

とかいうふうに使うのは分かったんですが
エラーの時に出る
C:\Users\****\Desktop\dododo.py 594
exceptions.IndexError: list index out of range
というメッセージとかはどうやって出力するのでしょうか??

378 :377:2011/02/14(月) 00:04:52
#恥ずかしいので書き直し
#!/usr/bin/env python
#-*- coding: utf-8 -*-

try:
 p+=1
 oji="a"
 p+oji
 print u"正常"
except:
 print u"エラー(文字と数字を足してるから)"

結果
エラー(文字と数字を足してるから)

379 :デフォルトの名無しさん:2011/02/14(月) 00:09:48
(再現)コードは動かしてから貼ってね

380 :デフォルトの名無しさん:2011/02/14(月) 00:12:33
ってあれか、動かしてるのか
それはp += 1の時点でNameError

381 :378:2011/02/14(月) 00:21:08
>379
くぁあああやめて
378のライフはもうゼロなのよぉぉぉお

とりあえず
sys.stderr.writeは関係ありますか??
pythonエラーで検索したら出てきたけど
「sys モジュールには、 stdin、 stdout、および stderr を表す属性値も存在します。
後者の stderr は、警告やエラーメッセージを出力して、
stdout がリダイレクトされた場合でもそれらが読めるようにする上で便利です: 」
の意味がさっぱりわからんのだけどOTL



382 :デフォルトの名無しさん:2011/02/14(月) 00:26:05
もちろんあるお

import sys
sys.stdout = open('sys-stdout.txt', w')
sys.stderr = open('sys-stderr.txt', 'w')

とかやれば標準出力への出力はsys-stdout.txtに書き込まれるし
標準エラー出力への出力も同様

383 :デフォルトの名無しさん:2011/02/14(月) 00:44:06
import traceback
try:
  1/0
except:
  traceback.print_exc()

384 :デフォルトの名無しさん:2011/02/14(月) 00:49:04
上でもはまってるけどcatch-allはexceptは初心者殺しなのでやめれ

385 :デフォルトの名無しさん:2011/02/14(月) 00:56:46
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys

sys.stdout=file("C:/Users/***/Desktop/out.txt","w")
sys.stderror=file("C:/Users/***/Desktop/error.txt","w")
try:
 p=1
 moji="a"
 p+moji
 print "seijyou"


except:
 print "ijyou"

いまやっとsys.stdoutが理解できた。
出力したout.txtにijyouって書かれてた。
でも最後の行にp+mojiって書いても

sys.stderrorで指定したerror.txtに何も入らないよ・・・ぱtpらっしゅ

386 :デフォルトの名無しさん:2011/02/14(月) 01:16:37
その調子で例外処理も理解すればおk
面倒ならtry: except: を消す

387 :デフォルトの名無しさん:2011/02/14(月) 01:18:36
ああ、あとsys.stderrorでなくsys.stderrだから

388 :デフォルトの名無しさん:2011/02/14(月) 01:43:06
error.txtの内容はいった!!!
Traceback (most recent call last):
File "C:\Users\***\Desktop\era-.py", line 16, in <module>
p+moji
TypeError: unsupported operand type(s) for +: 'int' and 'str'

うひゃああああできたぁあああありがとううううう!!!


389 :デフォルトの名無しさん:2011/02/14(月) 01:51:15
今気付いたんだけど
>>247で作ったPNGをPSDにするやつで作ったPSDを
>>315でPNGにしようとするとエラーで出来ないーよーあひゃ
たぶん>>247のPSDのエクストラデータサイズとレイヤー名のパッドの計算方法が
>>247>>315でちがうよーぉー
photoshopからの出力で計算してるのは247の方だから>>315が違ってるとおもうおー
あはははDLしたひとごめんねー
どひえー


390 :デフォルトの名無しさん:2011/02/14(月) 12:32:11
Pythonで標準入力関数ってなんですぐに教えないの?
Cで言うならscanfみたいな

391 :デフォルトの名無しさん:2011/02/14(月) 12:35:06
Python先生の講義はどこで見れますか?

392 :デフォルトの名無しさん:2011/02/14(月) 12:41:38
>>390
そういやraw_input見る機会ってそこまでないね。

393 :デフォルトの名無しさん:2011/02/14(月) 13:36:53
むしろscanfをなんで最初の方のプログラムで使うのかと
Cの入門書のライターに問いたい
アドレス演算子が謎だわ何を作るかと思えば対話型プログラムだわもうね

394 :デフォルトの名無しさん:2011/02/14(月) 14:24:05
入力できないとつまらないじゃん。
特にCに関しては

395 :デフォルトの名無しさん:2011/02/14(月) 15:55:29
argvで十分っす

396 :デフォルトの名無しさん:2011/02/14(月) 16:30:57
>>393-394
最初に教えるのは C そのものではなくコマンドラインから標準入出力をリダイレクトして実行することの方が良いと思う

>>395 に同意

で scanf よりも fgets, sscanf な

397 :デフォルトの名無しさん:2011/02/14(月) 16:33:59
>>390
そういえばPythonにscanfってないよね。

LOVE注入
ttp://www.python.jp/doc/2.5/lib/node49.html


398 :デフォルトの名無しさん:2011/02/14(月) 17:15:39
Cとスクリプト言語を比べる人って・・
入門書とかで勉強しなくてもPythonは使えるからね
特にguiなんてちょっとライブラリ拾ってドキュメント読みながら書けばあっという間

399 :デフォルトの名無しさん:2011/02/14(月) 19:44:51
>>390
Cでいう
while (fgets(fp, buff, sizeof buff))
はPythonで書くと
for line in fp:
だけど、fpがstdinの場合に入力してENTER入れても入力待ちのままになってて
同じ動きにならない

for line in iter(lambda: file.readline(), '')
のように書けばいいけど、そういう問題/現象やその解決といった話をしだすと
既に初心者向けじゃない匂いがする

Cのscanf()が本当はちっとも初心者向けでないのと同じかな

400 :デフォルトの名無しさん:2011/02/14(月) 20:14:32
>>> import sys
>>> c = 0
>>> for line in sys.stdin:
      print c, line,
      c += 1
...
asdf
qwer
poiu
;lkj
^Z
0 asdf
1 qwer
2 poiu
3 ;lkj
^Z
>>>

んー
入力時に一行ずつflushさせるにはどうすればいい?

401 :デフォルトの名無しさん:2011/02/14(月) 20:22:10
http://stackoverflow.com/questions/3670323/setting-smaller-buffer-size-for-sys-stdin

402 :デフォルトの名無しさん:2011/02/14(月) 20:29:56
でけたー
>>> import sys
>>> c = 0
>>> while True:
      line = sys.stdin.readline()
      print c, line,
      c += 1
      if not line: break
...
asdf
0 asdf
qwer
1 qwer
poiu
2 poiu
;lkj
3 ;lkj

4

5

6

7
^Z
8
>>>

403 :デフォルトの名無しさん:2011/02/14(月) 20:43:59
blobstoreにpostしたとき、form要素は日本語無事通ったんだけど
アップロードした日本語ファイル名をblob_info.filenameから取得したとき
ローカルでは普通に日本語のままですが、サーバー上では
?ISO-2022-JP?B?*****************************==?=
みたいになってます。
これからどうやったら元の日本語ファイル名に戻せるんでしょうか?

404 :デフォルトの名無しさん:2011/02/14(月) 20:48:04
>>403
Google AppEngine 3アプ目
http://hibari.2ch.net/test/read.cgi/php/1267057923/

405 :デフォルトの名無しさん:2011/02/14(月) 20:48:32
import email.header
try:
  print email.header.decode_header('?ISO-2022-JP?B?*****************************==?=')
except email.errors.HeaderParseError:
  print u'がんがれ'

406 :デフォルトの名無しさん:2011/02/14(月) 20:54:34
import email.header
s = '?ISO-2022-JP?B?*****************************==?='
try:
  for line in email.header.decode_header(s):
    print line[0].decode(line[1])
except email.errors.HeaderParseError:
  print u'がんがれ'


407 :デフォルトの名無しさん:2011/02/14(月) 20:57:21
ああ encoding 情報が None になるときもあるのか

import email.header
s = '?ISO-2022-JP?B?*****************************==?='
try:
  for line in email.header.decode_header(s):
    print line[0].decode(line[1] if line[1] else 'ascii')
except email.errors.HeaderParseError:
  print u'がんがれ'

408 :デフォルトの名無しさん:2011/02/14(月) 21:58:48
>>407
line[0].decode(line[1] if line[1] else 'utf-8')
にしたらローカルでも本番でもアスキー日本語両方うまく行きました!
大謝!!

409 :デフォルトの名無しさん:2011/02/14(月) 23:06:17
>>399
2引数のiterって知らなかった
そんなのあるのか……

410 :デフォルトの名無しさん:2011/02/14(月) 23:28:50
えっ

411 :デフォルトの名無しさん:2011/02/15(火) 19:20:29
pythonでとあるサイトからファイルをダウンロードするコードを書きました
import urllib
urllib.urlretrieve('http://www.python.org/', 'C:\python.html')

ファイルをダウンロードしたら特定の処理(定義した関数)を実行したいのですが
「ダウンロードを完了した」事を知る方法はございますでしょうか?

412 :デフォルトの名無しさん:2011/02/15(火) 19:47:49
>>411
ttp://www.python.jp/doc/nightly/library/urllib.html
ttp://docs.python.org/library/urllib.html
urllib.urlretrieve(url[, filename[, reporthook[, data]]])
これのreporthookで判定すればいいんでない?

一次情報をちゃんと参照したほうがいい。

413 :デフォルトの名無しさん:2011/02/16(水) 01:21:27
作ったプログラムを起動したときに出る
メッセージが書かれてる黒い画面を出さないようにするには
どうすればいいですか?

414 :デフォルトの名無しさん:2011/02/16(水) 01:27:46
拡張子を .py ではなく .pyw にしてから実行したらどうなるか試してみて

415 :デフォルトの名無しさん:2011/02/16(水) 01:55:27
>414
元の.pyだと動きますが.pywだと何も起きないですOTL

416 :デフォルトの名無しさん:2011/02/16(水) 03:27:57
つまり書かれているエラーメッセージは致命的なんですね

417 :デフォルトの名無しさん:2011/02/16(水) 05:51:18
ttp://codepad.org/g9AxtgxD
ローカルのPCで実行したときと結果が全然違うんですが
この差は何なんでしょう?


418 :デフォルトの名無しさん:2011/02/16(水) 11:00:48
具体的にどう違うの?
それともtime.timeが違うという寒いボケ?

419 :デフォルトの名無しさん:2011/02/16(水) 11:04:49
print の方に時間が掛かってるだけとか

420 :デフォルトの名無しさん:2011/02/16(水) 11:24:28
2ではprint ""って書けますね
何で3でprint("")って書くようになったんですか?


421 :デフォルトの名無しさん:2011/02/16(水) 11:27:03
Perlみたいでカッコ悪いから

422 :デフォルトの名無しさん:2011/02/16(水) 12:08:27
組み込み関数にすることで分別や関数型の意識を強めるから

423 :デフォルトの名無しさん:2011/02/16(水) 12:29:30
>>416
えっなんかこわいよ
どういう事???

424 :デフォルトの名無しさん:2011/02/16(水) 12:34:23
print a, b, c
と書いてたのが
print(a, b, c)
になるのでしょうか?

425 :デフォルトの名無しさん:2011/02/16(水) 12:38:12
%が互換性のためだけに残されている

426 :デフォルトの名無しさん:2011/02/16(水) 12:48:41
3は今からやるなって言われてますが3から始めた素人です
print("")で苦闘したのは今でも覚えてます(2日前の出来事です)
仕様が変わるのなら今のうちに成れて後々の学習コストの節約になると考えているのですが
それでも2から始めたほうがいいのでしょうか?


427 :デフォルトの名無しさん:2011/02/16(水) 12:53:04
Yes, we can.

428 :デフォルトの名無しさん:2011/02/16(水) 13:03:05
>>426
言っておくが使用バージョンを2から3に移行するのは簡単だぞ
書き溜めたりプロジェクトのコードを移行するのが面倒なだけだ
学習コストとかアホか、3はライブラリが少ない分大損だ

429 :デフォルトの名無しさん:2011/02/16(水) 18:13:54
%ってめちゃ使うじゃん!
将来的に廃止?

430 :デフォルトの名無しさん:2011/02/16(水) 18:29:43
formatが導入されてから%つかってないわ

431 :デフォルトの名無しさん:2011/02/16(水) 20:20:49
あれってperlの書き方をそのまま持ってきたんだっけ?何由来だろう。

今更修正されるなんて思ってなかった部分だから、
書き方変わるって初めて聞いた時は驚いた <文字列フォーマット

432 :デフォルトの名無しさん:2011/02/16(水) 21:28:32
>>431
由来を知らん子がいるとは隔世の感があるな……。

format()より手っ取り早いから好きなんだけどなぁ。

433 :デフォルトの名無しさん:2011/02/17(木) 01:26:13
>>431
Boostのが似てる

434 :デフォルトの名無しさん:2011/02/17(木) 07:25:38
list=[]
list.append=a
list.append=b
list.append=c
......
じゃなくて
あらかじめリストの個数が分かってて
list[0]=a
list[1]=b
list[2]=c
......
としたい場合最初のリストの宣言はどうすればいいですか?

435 :デフォルトの名無しさん:2011/02/17(木) 07:39:28
list = range(3)とか

436 :デフォルトの名無しさん:2011/02/17(木) 07:47:54
list = [a,b,c]
とかじゃなくて?

437 :デフォルトの名無しさん:2011/02/17(木) 08:28:22
list = [0 for i in range(3)]
list[0]=a
list[1]=b
list[2]=c
みたいなことしたいのかな?

438 :デフォルトの名無しさん:2011/02/17(木) 09:11:37
[0]*3

439 :デフォルトの名無しさん:2011/02/17(木) 10:17:06
>>434
Cでいうところの、int[5] list がほしいってことだよね。
リストの個数を指定して作成する機能はなかったような気がする。
あとlistという変数に代入するのはよくない。やってしまいがちだけど。


ところで The Zen of Python を、具体的なコードで紹介したサンプルがあった。
ttp://artifex.org/~hblanks/talks/2011/pep20_by_example.py.txt
超初心者には難しいかもしれないけど、参考までにどうぞ。

440 :デフォルトの名無しさん:2011/02/17(木) 10:32:29
>>434
L = [0]*3
L[0] = a
L[1] = b
L[2] = c

441 :デフォルトの名無しさん:2011/02/17(木) 13:13:08
有難うございます。
変数には気をつけます。

appendが3つだと[]の方が遅いけど
六個だと[]の方が早いですね・・・
微妙
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import timeit
t = timeit.Timer(stmt="""
a = []
a.append(1)
a.append(2)
a.append(3)
a.append(4)
a.append(5)
a.append(6)
""")
print "use append: ", t.timeit(number = 1000000)

t = timeit.Timer(stmt="""
a =[0]*3
a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5
a[5]=6
""")
print "use []: ", t.timeit(number = 1000000)

442 :デフォルトの名無しさん:2011/02/17(木) 13:58:18
>>441
a[3]=4 a[4]=5 a[5]=6 がerrorに
なってるからではなくて?

443 :デフォルトの名無しさん:2011/02/17(木) 14:21:05
warota

444 :デフォルトの名無しさん:2011/02/17(木) 14:39:08
>>441
app = a.append
app(1)
app(2)
app(3)
ってやると速くなるよ。

445 :デフォルトの名無しさん:2011/02/17(木) 15:18:55
PythonでAAを表示させいんですが何かいい方法はありませんか?
Tkinterでプロポーショナルフォントを指定して表示させてもなぜかズレちゃいます

446 :デフォルトの名無しさん:2011/02/17(木) 15:50:45
import timeit
t = timeit.Timer(stmt="""
a=[]
app = a.append
app(1)
app(2)
app(3)
app(4)
app(5)
app(6)
app(7)
app(8)
app(9)
app(10)
""")
print "use app: ", t.timeit(number = 1000000)

t = timeit.Timer(stmt="""
a =[0]*10
a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5
a[5]=6
a[6]=7
a[7]=8
a[8]=9
a[9]=10

""")
print "use []: ", t.timeit(number = 1000000)

447 :446:2011/02/17(木) 15:52:49

[]の方が早かったですね・・・
use app: 2.25716801996
use []: 1.84721263457
>>442
間違えたのです・・・OTL


448 :デフォルトの名無しさん:2011/02/17(木) 17:27:36
>>445
import Tkinter
root = Tkinter.Tk()
t = Tkinter.Text(root, font=(u'MS Pゴシック', 12))
t.insert('end', u'|∧ ∧ | ∧ ∧ | ∧_∧ |\n')
t.insert('end', u'|( ゚Д゚).| (=゚ω゚)|( ;´Д`).|\n')
t.pack()
root.mainloop()

449 :デフォルトの名無しさん:2011/02/17(木) 18:20:40
>>448
うおおありがとうございます
うまくできました

450 :デフォルトの名無しさん:2011/02/17(木) 22:59:41
sympyというライブラリについて質問です。
シンボリックな微分が出来るので、これを
C#から呼んで得られた出力により再びC#のコードにしたいのですが、
sympyの出力は当然C#の関数名とは一致しません。
http://docs.sympy.org/dev/modules/printing.html
ドキュメントを見るとどうも出来そうなのですが、よくわかりません。
例えば以下のように変換したいです。
x[0] ** 2.1 → Math.Pow(x[0], 2.1)
sin(x[0]) ** (x[1] + x[0]) -> Math.Pow(sin(x[0]), x[1] + x[0])
もしどなたかsympyの出力形式の指定方法について知っていたら教えて下さい。

451 :デフォルトの名無しさん:2011/02/18(金) 00:13:01
自分で作った.pyをpy2exeでexe化したら
IOError: cannot identify image file
(画像ファイルを特定することができない)
というエラーがでて前のpyだとちゃんと動くのにexeだとうまく動きません。
どうしたらよいでしょうか?

エラーメッセージ
sys.stderrで取得した標準エラーメッセージは
Traceback (most recent call last):
File "PsdToOra.py", line 300, in <module>
File "Image.pyo", line 1980, in open
IOError: cannot identify image file
です。
自分で作った(PsdToOra.py)の300行目は
im = Image.open(newpsd)
なのでnewpsdをos.path.existsで存在チェックしたのですが
ちゃんと存在してましたOTL
newpsdのパスもちゃんと取得できたのに一体何が悪いのか・・・OTL
newpsd:C:\Users\***\Desktop\hiyuu\PsdToOra5\dist\henkan.psd


452 :デフォルトの名無しさん:2011/02/18(金) 01:06:24
psdとして認識出来ないって意味だろ

453 :デフォルトの名無しさん:2011/02/18(金) 01:23:53
うーんnewpsdを自力でキー入力して開くと開けるので
ファイル自体は壊れてないようです・・・
>>> import Image
>>> im=Image.open("C:/Users/***/Desktop/hiyuu/PsdToOra5/dist/henkan.psd")
>>> print im.size[1]
480
>>>

454 :デフォルトの名無しさん:2011/02/18(金) 01:40:47
多分PsdPlugin.pyをロードできていない
py2exeは必要なモジュールを常に全部拾えるわけじゃないから
そういう場合は自分で追加してやる必要がある

455 :デフォルトの名無しさん:2011/02/18(金) 01:57:14
ありがとう!
ああああ、検索したら
http://www.google.co.jp/search?hl=ja&biw=1135&bih=530&q=PsdPlugin.py+python&aq=f&aqi=&aql=&oq=
なんにもでないいぃぃ
なにをどうやって追加したらいいですかOTL
↓今までのsetup.py
# -*- coding: utf-8 -*-
#python2.6で作成
#PsdToOra.pyをexe化するときに使う

from distutils.core import setup
import py2exe

py2exe_options = {
"compressed": 1,
"optimize": 2,
"bundle_files": 2,
"includes" : ["gzip"] }

setup(
options = {"py2exe": py2exe_options},
console = [
{"script" : "PsdToOra.py", "icon_resources": [(1,"py.ico")]}],
zipfile = None)


456 :デフォルトの名無しさん:2011/02/18(金) 02:25:40
PsdToOra.py で明示的に import PsdImagePlugin としてみたら?

457 :デフォルトの名無しさん:2011/02/18(金) 02:37:01
>>456
できたぁぁぁああああ!!!!
有難う超ありがとう!!!
ありがとうううぅぅううう!!!


458 :デフォルトの名無しさん:2011/02/18(金) 03:12:47
setup.py でやるとしたら setup(options={'py2exe': {'packages': ['PsdImagePlugin']}}) みたいになるはず

459 :デフォルトの名無しさん:2011/02/18(金) 10:11:41
PythonのC APIについて質問があるのですが
Pythonで

import array
buffer = array.array("f")

の2行ををCのAPIを使って、

PyObject *module = PyImport_Import(PyString_FromString("array"));
PyObject *func = PyObject_GetAttrString(module, "array");
PyObject *buffer = PyObject_CallObject(func, PyString_FromString("f"));

と書いたのですがbufferが0になってしまいます。
どこが悪いのでしょうか?
moduleもfuncも値が入っているのは確認しています。
Pythonは2.6.6、IDEはVS2008です。
よろしくお願いします。

460 :デフォルトの名無しさん:2011/02/18(金) 10:26:17
PyObject_CallObject(PyObject *callable_object, PyObject *args)のargsはタプルを渡す
PyObject_CallMethodが楽

461 :デフォルトの名無しさん:2011/02/18(金) 10:33:33
>>460
ありがとうございます。
今は環境が無いので午後試してみます。

462 :デフォルトの名無しさん:2011/02/18(金) 13:28:12
>>460
動きました。
ありがとうございました。

463 :デフォルトの名無しさん:2011/02/18(金) 16:36:29
class B(db.Model):
  masterID = db.StringProperty()
  masterPass=db.StringProperty()
  bkdata_max_num = db.IntegerProperty()

  def getNextNum(self):
 def procedure():
  if self.bkdata_max_num is None:
     self.bkdata_max_num = 0
      self.bkdata_max_num = self.bkdata_max_num + 1self.put()
return self.bkdata_max_num
return db.run_in_transaction(procedure)



import models.blob
br = B.get_by_key_name(u"******")
self.bkID = br.getNextNum()

AttributeError: 'NoneType' object has no attribute 'getNextNum'



464 :デフォルトの名無しさん:2011/02/18(金) 18:40:03
>>463
板違い
http://hibari.2ch.net/test/read.cgi/php/1267057923/

465 :デフォルトの名無しさん:2011/02/18(金) 22:12:00
>>464
そうなんですか、初心者なんでもっと根本的な文法知らないのかと思って・・・

466 :デフォルトの名無しさん:2011/02/18(金) 22:48:19
自己解決・・・B.get_by_key_name(u"******")でNoneが帰ってきてました

NoneTypeね・・・言われてる通りですた

467 :デフォルトの名無しさん:2011/02/19(土) 12:17:27
テキスト処理はawkの方がかんたんだ・・・・

awkモードとか有ればいいのに。

468 :デフォルトの名無しさん:2011/02/19(土) 13:24:29
○○のほうが簡単ですむ仕事なら、○○にまかせればいいんじゃないかなあ。
Pythonが万能であるわけでもないし。

469 :デフォルトの名無しさん:2011/02/19(土) 22:05:57.92
c++のヘッダファイル(.h)の宣言やらを読む方法ってある?

470 :デフォルトの名無しさん:2011/02/19(土) 22:13:52.53
>>469
ぱっと思いつくのはANTLRで解析とか

471 :デフォルトの名無しさん:2011/02/19(土) 22:59:08.44
>>470
自前で全部実装するってことか?

472 :デフォルトの名無しさん:2011/02/19(土) 23:21:31.41
C++のパースなんて複雑すぎて素人が手を出せるもんじゃないだろう

473 :デフォルトの名無しさん:2011/02/19(土) 23:22:27.60
完璧主義で言えば自分用のコンパイラ作るようなもんじゃん

474 :デフォルトの名無しさん:2011/02/19(土) 23:40:40.30
timeitで起動時間を調べようとしたら
stack = "<?xml version='1.0' encoding='UTF-8'?>\n"
の行で止まってしまいます。
#で行をとあしてみたところ
どうも¥記号がある行の前後ぐらいで
止まるようです。
そこでこのtimeitの代わりに起動時間を調べるコマンドか
¥があってもtimeitが動く方法がありましたら教えて下さい。

475 :デフォルトの名無しさん:2011/02/20(日) 00:00:30.91
filename="C:/Users/ユーザー名/Desktop/hatena.txt"
fo = file(filename,"rb")
の行で
TypeError: 'str' object is not callable
(strオブジェクトはよい出す事が出来ない)
というエラーが出たりでなかったりするのですが
なにがいけないのでしょうか???



476 :デフォルトの名無しさん:2011/02/20(日) 00:04:25.17
>>475
そのエラーが出るときは、fileという名前の変数に文字列を代入してたりしない?
文字列の入ってる変数に()をつけて関数のように呼ぼうとすると
そういうエラーが出るよ


477 :475:2011/02/20(日) 00:23:59.77
うーん
とりあえずfileをopenにしたらエラーがでなくなりました。
filenameという変数にはファイル名を入力してますが
じっさいfileという変数は使っていません。

478 :450:2011/02/20(日) 00:36:19.76
SympyでC#のコードを生成したいという質問でしたが、自己解決しました。
http://code.google.com/p/sympy/issues/detail?id=475
ここのディスカッションを参考にして
printing.str.StrPrinterをベースに
必要な関数だけ出力を書き換えることにより可能でした。
もし、少しでもこの質問に対して時間を割いてくれた方がいたのなら
ありがとうございます。

479 :474:2011/02/20(日) 00:40:26.04
とりあえず、今の日時取得でできました。

import datetime
t_old=datetime.datetime.now()

作ったプログラム
t_new=datetime.datetime.now()
time= t_new-t_old
print time


480 :デフォルトの名無しさん:2011/02/20(日) 00:57:05.47
パイソンってローカル変数を辞書で定義してるの?

481 :デフォルトの名無しさん:2011/02/20(日) 01:05:33.12
辞書で管理してるようにみえて、実は違う。
でもだいたい辞書だと思っていい。
でもやっぱり辞書じゃない。
x = 1
locals()['x'] = 2
print(x) #=> 2 に変わる

def f():
 y = 1
 locals()['y'] = 2
 print(y) #=> 1 のまま
f()


482 :デフォルトの名無しさん:2011/02/20(日) 01:20:51.37
>>481
なんか難しいですねw
ありがとうございます

483 :デフォルトの名無しさん:2011/02/20(日) 04:03:41.20
locals()で得た辞書は変更するな、ってことになってたんだっけ。

何らかの方法で、他のローカルスコープを変更するのって、できないの?
def f():
 y=1
 g(???)
 print y # ==> 2

できてもするべきじゃないし、戻り値を複数返せるから普通は必要にならないのだけど。

484 :デフォルトの名無しさん:2011/02/20(日) 09:32:25.09
基本的な質問で悪いんですが
拡張子を指定してファイル名を取得するってどうやりますか??
↓*を付けたら駄目でした
txtlist=os.listdir("C:/Users/username/desktop/*.txt"')


485 :デフォルトの名無しさん:2011/02/20(日) 09:39:51.20
>>484
glob.glob

486 :デフォルトの名無しさん:2011/02/20(日) 10:00:25.97
>>485
できました!!有難うございます!!

487 :デフォルトの名無しさん:2011/02/20(日) 10:28:53.15
>>483
他のローカルスコープは変更できない。
locals() で得た辞書は、内部のテーブルのコピーなので、変更しても
内部のテーブルが更新されない。

488 :デフォルトの名無しさん:2011/02/20(日) 11:00:20.48
2次元配列で
L=[[1,2,3,4],[1,2,3,4],[1,2,3,4]]
をL1=[1,1,1]にしたいのですが

L1=[]
for l in L:
 L1.append(l[0])
にするんじゃなくて

L1=L[::1][0:1]かなと思ったんですが
L1=[[1, 2, 3, 4]]になってしまいました。
なにが違うんでしょうか??

489 :デフォルトの名無しさん:2011/02/20(日) 11:11:22.02
>>488
L[::n] の意味を勘違いしてる。nはスキップで、
L = [0,1,2,3,4,5,6]
L[::2] => [0,2,4,6]
なので、 n=1 は省略したときと変わらない。
L=[[1,2,3,4],[1,2,3,4],[1,2,3,4]] に対して
L[::1] は [[1,2,3,4], [1,2,3,4], [1,2,3,4]] という、 L の浅いコピー。
それに対して [0:1] すると、 L[::1] の [0] だけを要素に持ったリストが
作られるから、[[1,2,3,4]] になる。
L1 = [x[0] for x in L]
で良いと思う。

490 :デフォルトの名無しさん:2011/02/20(日) 11:17:25.30
>489
有難うございます!
一行で書けるforも教えて頂き有難うございます!!

491 :デフォルトの名無しさん:2011/02/20(日) 13:25:35.54
windowsでctypes使って、C++で作ったdllを読み込んでるんだが、
これCリンケージ指定しないとctypesで使えないんかね?

492 :491:2011/02/20(日) 13:29:28.61
ごめん自決した

493 :デフォルトの名無しさん:2011/02/20(日) 13:30:39.96
>>491
C++の mangling rule を把握していて、thiscallを使わなければ、
後は気合でなんとかなるかもしれない。

が、Cリンケージ指定するべきだと思うぞ。C++リンケージはC++以外の
言語からアクセスするためのものじゃない。

494 :491:2011/02/20(日) 13:38:13.88
>>493
ん、やっぱりか

Cリンケージと __declspec(dllimport) でいいんだよね

495 :デフォルトの名無しさん:2011/02/20(日) 17:45:04.03
PILでRGBAのPNG画像をかさねて一枚の画像を出力しようとしましたが
background = Image.frombuffer("RGBA",(縦 , 横),画像データ,"raw","RGBA",0,1)
surface = Image.open(RGBAのPNGファイル)
background.paste(surface,(縦、横,高さ,幅))
background.save(合成PNG)
とやったら
(↓)合成のPNG画像の透明部分が透明のまま重なってしまいました。
http://bbs12.aimix-z.com/photovw.cgi?room=lapius&image=271.jpg
(分かりにくかったので透明部分は黄色に塗ってます)

これはどうしたらいいのでしょうか?

496 :デフォルトの名無しさん:2011/02/20(日) 17:54:27.01
ttp://www.pythonware.com/library/pil/handbook/image.htm
background.paste(surface,(縦、横,高さ,幅),surface)


497 :デフォルトの名無しさん:2011/02/20(日) 18:10:44.86
>>496
できました!!有難うございます!!

498 :デフォルトの名無しさん:2011/02/20(日) 19:45:00.79
pythonで作ったプログラムはpythonをインストールしていないPCで動作するのでしょうか?
インタプリタを通さないと動きませんよね?
超初心者な質問ですいません。

499 :デフォルトの名無しさん:2011/02/20(日) 19:53:01.48
>>498
うむ。その通り、動かないよ。はい、次の質問は?

500 :デフォルトの名無しさん:2011/02/20(日) 19:55:28.35
>>492
つpy2exe

501 :デフォルトの名無しさん:2011/02/20(日) 20:00:37.70
>>499
ではどうやって動くプログラムを書くのですか?

502 :デフォルトの名無しさん:2011/02/20(日) 20:13:54.95
Pythonをインストールしてください

503 :デフォルトの名無しさん:2011/02/20(日) 20:19:43.22
クライアント側もpythonインストールしなくちゃだめなのか

504 :デフォルトの名無しさん:2011/02/20(日) 20:24:32.86
>>483
setattr

505 :デフォルトの名無しさん:2011/02/20(日) 20:44:46.49
>>503
つpy2exe

506 :デフォルトの名無しさん:2011/02/20(日) 20:52:06.62
>>503
CSS環境でサーバーにpythonがインストールしてあるのだとエスパーすると、クライアント
のPCではpythonのプログラムはエディタで作成できるけれど、そのプログラムはサーバー
上で実行することになる。クライアント側PCにpythonがインストールしてあれば、サーバー
とは何の関係も無しにプログラムの作成、実行はできるようになるよ。

507 :デフォルトの名無しさん:2011/02/20(日) 20:56:10.72
もしくは505が言っているようにpy2exeを使う方法もある。

「py2exeはPython スクリプトをスタンドアロンのWindows実行形式に変換するモジュールで,
distutils の拡張として実装されている. py2exeを使って実行形式にしたプログラムは,
Pythonをインストールせずに実行することができるようになる」



508 :デフォルトの名無しさん:2011/02/20(日) 21:10:41.73
>>507
それが知りたかった
ありがとう。

509 :デフォルトの名無しさん:2011/02/20(日) 21:27:48.27
質問です。
文字列を日本語のかどうか調べて
文字数(バイト数)を数えて
日本語の文字列なら別の文字列に変換するか
文字化け的でもいいので適当な文字列に
変換する方法を教えて下さい。


510 :デフォルトの名無しさん:2011/02/20(日) 21:37:35.68
>>509
文字エンコーディング判定モジュール"Universal Encoding Detector"を使え。

511 :デフォルトの名無しさん:2011/02/20(日) 21:57:28.59
>>510
できましたー!!
有難うございます!!
こんな面白いものがあるんですね!!

512 :デフォルトの名無しさん:2011/02/20(日) 22:39:31.10
PILの使い方について日本語で解説している場所、本があれば教えてください。

513 :デフォルトの名無しさん:2011/02/20(日) 22:53:07.63
ググれカス

514 :デフォルトの名無しさん:2011/02/20(日) 23:10:09.94
つ ttp://winnie.kuis.kyoto-u.ac.jp/~mizumoto/python/python_image.html

515 :デフォルトの名無しさん:2011/02/21(月) 17:45:53.84
先輩諸氏、使っているIDEを教えてください。参考にしたいです。

516 :デフォルトの名無しさん:2011/02/21(月) 17:49:33.93
秀丸

517 :デフォルトの名無しさん:2011/02/21(月) 18:13:25.08
IDEじゃねぇだろ

518 :デフォルトの名無しさん:2011/02/21(月) 19:52:02.89
Emacs

519 :デフォルトの名無しさん:2011/02/21(月) 20:45:15.67
>>515
Rubyに限らずスクリプト言語界隈では、IDEより高機能エディタを使うのが主流。
ここにいる連中はおっさんが多くて、IDEなんて使いこなせないから、ここで聞いても無駄。
ただRubyを扱えるIDEも最近は進化しているらしいから、自分で使ってみよう。

いまのところこんなのがある。
・Aptana (高機能だけどEclipseベースなので重いしメモリ食い)
・RDE(軽いけど更新が止まってる。Windows専用)
・RubyMine(エディタ好きからも好評だけど日本語化はされてないかも)
・NetBeans(Sunとともに終了)

Aptana使ってみたけどよくわからんかった。



520 :デフォルトの名無しさん:2011/02/21(月) 20:53:54.73
Pythonの場合だと、無料系ではこんな感じ。

* pydev (Eclipse) 重い。高機能
* PyScripter (Delphi) Windows専用。軽い。pydevとは少し違う方向で高機能
* PythonWin (Python+pywin32) Windows専用。軽い。低機能。特におすすめはしない。
* nbPython (NetBeans) 開発中
* Eric (Python + Qt) 起動が重い。PyQt開発を除けば中機能。

その他低機能軽量IDEや発展途上IDEが幾つかある。
WindowsならおすすめはPyScripter

521 :デフォルトの名無しさん:2011/02/21(月) 21:04:32.76
初心者でなんとなくanjutaつかってるんだけど、評価はどうよ

522 :デフォルトの名無しさん:2011/02/21(月) 23:00:51.51
どうも。参考になりました。
ググったらpycharmというのがひっかかったんですが、まずpyscripterつかってみます。ありがとうございました。

523 :デフォルトの名無しさん:2011/02/21(月) 23:51:42.56
>>515
Eric

524 :デフォルトの名無しさん:2011/02/22(火) 01:26:03.54
作ったファイルを圧縮するプログラムがエラーを出します
どうしたらいいのでしょうか??
zippath = os.path.join(batdir ,"henkan.zip")
zip = zipfile.ZipFile(zippath, 'w')
for root, dirs, files in os.walk(dirpath):
 dec_root = root.decode("cp932")
 for file in files:
  ullpath = os.path.join(root, file)
  zippathfile = os.path.relpath(fullpath,dirpath)
  enc_path = zippathfile.encode('mbcs')
  enc_fullpath = fullpath.encode('mbcs')
  zip.write(enc_fullpath,enc_path)

zip.close()

enc_path = zippathfile.encode('mbcs')の行でエラーがでます。
エラー内容は以下なのですが
UnicodeDecodeError: 'ascii' codec can't decode byte 0x94 in position 5: ordinal not in range(128)

今まででエラーが出ずに
ちゃんとzipファイルをはきだしていたのに
急に出だして文字のアスキコードとか関係あるのか
困っています・・。

525 :デフォルトの名無しさん:2011/02/22(火) 01:37:40.20
>>524
ullpath が怪しい。
のはさておき、UnicodeDecodeErrorが出てるってことは、
zippathfile.encode() を呼び出すときに zippathfile がそもそもバイト列で、
それを Unicode にデコードしてから .encode() しようとして、ASCIIじゃ
デコードできないっていうエラーになってる。

dirpath が unicode になっているか確認してみ? dirpath が unicode なら、
root, dirs, files は全部 unicode になって、 fullpath も zippathfile も
unicode になって、 .encode() の呼び出しでデコード処理が実行されなくなるから。

526 :デフォルトの名無しさん:2011/02/22(火) 01:52:35.58
chardet.detect()でdirpath調べたら100%ascii
zippathfileも全部asciiでした

これって別にユニコード変換とかしなくてもいいって事ですか???
どうすればいいんですか?


527 :デフォルトの名無しさん:2011/02/22(火) 01:56:47.92
>>526
chardetの判定結果をあてにするな。自動検出はあくまでも推測でしかない。

'ascii' codec can't decode byte 0x94 in position 5

が本当に zipfilepath.encode('mbcs') で発生したのであれば、
zipfilepath の 5バイト目に非ASCII文字 (\x94) が入ってるんだよ。
いいから最初から dirpath を unicode で扱いな。

528 :デフォルトの名無しさん:2011/02/22(火) 02:03:00.98
>527
有難うございます!!
dirpath=unicode(dirpath)を
変換前に入れたらエラーがでなくなりました!!!


529 :デフォルトの名無しさん:2011/02/22(火) 08:21:03.52
>>528
コテハン付けろ

530 :sage:2011/02/22(火) 08:36:24.09
http://doruby.kbmj.com/fujiwara_blog/20090813/_python_curses_1
ここの chat.py ってどなたか手元の環境で動きますか?

OS X 10.6.6 の Python 2.5、2.6、2.7、
および RedHat Linux 5.5 の Python 2.6 で、
curses が恐らく C の内部でこけます。

Traceback (most recent call last):
File "chat.py", line 114, in <module>
view = CursesWindow()
File "chat.py", line 9, in __init__
curses.wrapper(self.loop,host)
File "/usr/local/lib/python2.6/curses/wrapper.py", line 43, in wrapper
return func(stdscr, *args, **kwds)
File "chat.py", line 13, in loop
self.init_windows(scr)
File "chat.py", line 30, in init_windows
self.cmd_window = scr.subwin(3,79,22,0)
_curses.error: curses function returned NULL

ぐぐると readline とぶつかってる可能性が出てくるのですが、
上記ページでは動くとのことなので、どの環境だと動くのか知りたいです。
また、解決方法をご存知であれば教えて下さい。

531 :デフォルトの名無しさん:2011/02/22(火) 09:02:59.16
動いた。Ubuntu 10.10 Python2.6.6。

532 :531:2011/02/22(火) 09:05:28.24
理由は端末サイズが小さすぎるとかかもね

533 :デフォルトの名無しさん:2011/02/22(火) 17:24:38.78
layername[i].replace("背景","Background")
layername[i].replace("レイヤー","Layer")
layername[i].replace(" ","")
if not layername[i].isalnum():
 layername[i]="Layer"+str(i)

こういうのを作ったんですが
if not layername[i].isalnum():
 layername[i]="Layer"+str(i)
はうまく動くもののreplaceが動きません。
(エラーは出ず文字が置換されず)
何が悪いのでしょうか???
以下もやってみたのですがlayername[i]=="背景"の場合にも
layername[i]="Background"されませんでした・・・
if layername[i]=="背景":
layername[i]="Background"

534 :デフォルトの名無しさん:2011/02/22(火) 17:28:26.98
replaceは置換した文字列を返すので
layername[i] = layername[i].replace(...)

535 :デフォルトの名無しさん:2011/02/22(火) 17:30:22.35
>>533
コテハン付けろよ

536 :デフォルトの名無しさん:2011/02/22(火) 17:46:59.49
ソースの encoding と PSD の encoding も考えとけよ

537 :デフォルトの名無しさん:2011/02/22(火) 18:19:24.55
>534
やってみたんですが

print u"変更前:",layername[i]
layername[i] = layername[i].replace("背景","Background")
layername[i] = layername[i].replace("レイヤー","Layer")
layername[i] = layername[i].replace(" ","")
layername[i] = layername[i].replace(" ","")
print u"変更後:",layername[i]
if not layername[i].isalnum():
  layername[i]="Layer"+str(i)
結果はこんな感じでreplaceが反応してくれませんでした・・・
変更前: 背景
変更後: 背景
変更前: レイヤー 1
変更後: レイヤー1
変更前: name
変更後: name

>535
またお前かって言われてスルーされたらと思うと怖いお〜><

>536
えッ何の事だか本当に分からないので
少し説明お願いします


538 :デフォルトの名無しさん:2011/02/22(火) 18:23:28.48
>>537
ス ル ー し た い か ら コ テ ハ ン 付 け ろ

539 :デフォルトの名無しさん:2011/02/22(火) 18:23:32.30
>>535じゃないけど本当にコテハン付けて。
読みたくないから。

540 :デフォルトの名無しさん:2011/02/22(火) 18:39:33.26
>>537
print u"変更前:",layername[i]
の代わりに
print u"変更前:", repr(layername[i])
ってしてみて。これで layername[i] が unicode か str かも分かるから。

あと、このソースコード自体はどのエンコーディングで保存している?
実行しているOSは?

541 :537:2011/02/22(火) 19:43:34.78
>540
reprを付けたら
変更前: '\x94w\x8ci'
変更後: 背景
変更前: '\x83\x8c\x83C\x83\x84\x81[ 1'
変更後: レイヤー1
変更前: 'name'
変更後: name
となりました

ソースのエンコーディングは
# -*- coding: utf-8 -*-
です。
実行しているOSはwindows vistaです。


542 :デフォルトの名無しさん:2011/02/22(火) 20:10:30.79
>>541
なら、Shift-JIS(というかWindows-31J)の文字列に対して、UTF-8で
置換しようとしているから、マッチしない。

Unicode にしたら治る。
lname = layername[i].decode('cp932') # cp932 は Windows-31J の別名
lname = lname.replace(u"背景", u"Background")
...
print u"変更後", lname
layername[i] = lname

543 :デフォルトの名無しさん:2011/02/22(火) 20:19:50.12
windows7の64bitでPythonを使いたいのですが
どこからダウンロードしたらイイですか。
ちなみにPyOpenGLを使うには何をダウンロードしたら良いのでしょうか。

544 :デフォルトの名無しさん:2011/02/22(火) 22:16:00.88
pyscripterとても良いですありがとう

545 :デフォルトの名無しさん:2011/02/22(火) 22:25:44.41
>542
有難うございます、出来ました!!


546 :デフォルトの名無しさん:2011/02/22(火) 22:42:32.46
>>543
http://www.python.jp/Zope/download/pythoncore
Windows用インストーラ の python-2.7.1.msi
今は繋がらないかも

PyOpenGLは本当に必要なのか?
一応お好きにどうぞ
http://www.google.co.jp/search?q=pyopengl+インストール

547 :デフォルトの名無しさん:2011/02/22(火) 22:47:02.28
>>546
下のURLはググれってことだよ言わせんな恥ずかしい

548 :デフォルトの名無しさん:2011/02/22(火) 22:56:31.63
>>546
ああやっぱ今繋がらないんですね
ありがとうございます

549 :デフォルトの名無しさん:2011/02/22(火) 23:38:02.21
URLを指定してそこのサイトからURLだけを正規表現で抜き出して
ファイルに書き込むことを目的としたんですが最初のURLしか
抜き出してくれないです。
正規表現の指定の仕方がまずいんでしょうか?

http://codepad.org/XHlemXzK

550 :デフォルトの名無しさん:2011/02/23(水) 00:56:18.39
IDEってなに?

551 :デフォルトの名無しさん:2011/02/23(水) 01:08:05.61
似非SCSI

552 :デフォルトの名無しさん:2011/02/23(水) 01:30:06.95
>>549
正規表現そのものより、メソッドの挙動が思ってるのと違うんじゃないかなぁ。
re.search('a(b)(c)d', 'abcd\nabcd').group()
=> 'abcd'
re.search('a(b)(c)d', 'abcd\nabcd').group(1)
=> 'b'
re.search('a(b)(c)d', 'abcd\nabcd').group(2)
=> 'c'
re.search('a(b)(c)d', 'abcd\nabcd').group(3)
=> IndexError: no such group

re.search('a(b)(c)d', 'abcd\nabcd').groups()
=> ('b', 'c')

re.findall('a(b)(c)d', 'abcd\nabcd')
=> [('b', 'c'), ('b', 'c')]
re.findall('a(b)cd', 'abcd\nabcd')
=> ['b', 'b']
re.findall('abcd', 'abcd\nabcd')
=> ['abcd', 'abcd']

553 :デフォルトの名無しさん:2011/02/23(水) 03:04:55.42
pythonの正規表現よくわかってないんだけど、
searchは最初の1個マッチした時点で返ってくるのかな?

554 :デフォルトの名無しさん:2011/02/23(水) 08:44:23.73
裾野が広がるってこういうことなんだな

555 :デフォルトの名無しさん:2011/02/23(水) 08:57:37.06
>>553
http://www.python.jp/doc/release/library/re.html#re.RegexObject.search

556 :デフォルトの名無しさん:2011/02/23(水) 09:29:29.98
なんで>>546のページで今落とせないの

557 :デフォルトの名無しさん:2011/02/23(水) 09:42:37.50
http://www.python.org/


558 :デフォルトの名無しさん:2011/02/23(水) 10:21:45.36
jpから落とすといろいろめんどくさい
テンプレからもなるべく省いてるんだから空気読んで欲しい

559 :530:2011/02/23(水) 11:03:11.76
>>531-532
ありがとうございます。
端末拡大したら動きました。

560 :デフォルトの名無しさん:2011/02/23(水) 11:29:31.92
>>558
馬鹿には無理

561 :デフォルトの名無しさん:2011/02/23(水) 14:26:24.96
.orgもタイムアウトするじゃんw
Pythonがんばれよ

562 :デフォルトの名無しさん:2011/02/23(水) 14:31:13.11
しないし応答も遅くないぞ

563 :デフォルトの名無しさん:2011/02/23(水) 18:00:54.84
>>552
返信遅れましたがありがとうございました。
一度家で修正してみます。

564 :デフォルトの名無しさん:2011/02/23(水) 18:24:12.13
>>561
馬鹿には無理

565 :Perl忍者lvl2(悪) ◆M5ZWRnXOj6 :2011/02/23(水) 20:55:08.96
僕もPythonやりたくなったんだけど
Perlとの違いおしえて

ぼくもPythonやっていいかな?

566 :デフォルトの名無しさん:2011/02/23(水) 21:03:37.74
失せろカス二度とくんな

567 :Perl忍者lvl2(悪) ◆M5ZWRnXOj6 :2011/02/23(水) 21:19:49.35
ひどい・・・

568 :デフォルトの名無しさん:2011/02/23(水) 21:40:06.60
ここの人たちは真面目だから冷やかしとか冗談は通用しないよ。

569 :デフォルトの名無しさん:2011/02/23(水) 23:28:52.77
>>565
> Perlとの違いおしえて
名前が違う。

> ぼくもPythonやっていいかな?
そう言うことを聞くからには当然「ダメ」と言われたらやらないんだよな?
なら当然答えは「ダメ」になるな。失せろカス二度とくんな。

570 :デフォルトの名無しさん:2011/02/24(木) 00:52:59.52
まさに正論

571 :デフォルトの名無しさん:2011/02/24(木) 01:06:07.52
http://www1.axfc.net/uploader/H/so/127633.zip
どうもいつもお世話になってます
PSDがどうたらこうたら言ってたやつですけど
大体直しました
いろいろ教えて下さった方々有難うございました!!

572 :デフォルトの名無しさん:2011/02/24(木) 04:35:59.69
Python忍者に改名汁
話は其れからだ

573 :デフォルトの名無しさん:2011/02/24(木) 05:53:55.61
>>572
貴様、産廃をこっちに押し付けようとするPerl使いだな

574 :デフォルトの名無しさん:2011/02/25(金) 03:42:51.19
木構造を使ったプログラムを書きたいのですか、標準的なライブラリって存在するでしょうか。

575 :デフォルトの名無しさん:2011/02/25(金) 05:06:33.59
スレちがいかもしれないけど、
EmacsからM-x pdbでpdb起動してpythonスクリプト表示しても
なんにも表示されないけどなんで?

576 :!ninja:2011/02/25(金) 05:20:10.02
画像ファイルを開いて、Blobのフィールドに入れたいのですが、どのようにしてsql文に挿入するべきでしょうか?
image = open('path/to/image', 'rb').read()
cur.execute("INSERT INTO image(name, ext, image) VALUES(%s, %s, ???)" % (name, ext, image))

%sで入るのかと思ったのですが、unicodeの文字列?だと勘違いされているようでエラーが出てしまいます。

577 :デフォルトの名無しさん:2011/02/25(金) 06:16:11.34
>>574
もうすこし具体的に

578 :デフォルトの名無しさん:2011/02/25(金) 08:08:20.30
>>576
文字列の % 処理をSQL作るのに使っちゃダメ。
Blogを保存できないくらいなら良いけど、SQLインジェクション許して
ヤバイデータを撒き散らすことになるよ。

cur.execute("INSERT INTO image(name, ext, image) VALUES(%s, %s, ???)" % (name, ext, image))

cur.execute("INSERT INTO image(name, ext, image) VALUES(%s, %s, %s)", (name, ext, image))
にすればいけるんじゃないかな。(MySQLdbの場合)



579 :デフォルトの名無しさん:2011/02/25(金) 08:23:17.10
>>578
うまくいきました。ありがとうございます。

580 :デフォルトの名無しさん:2011/02/25(金) 09:24:26.84
>>578
>文字列の % 処理をSQL作るのに使っちゃダメ。
>Blogを保存できないくらいなら良いけど、SQLインジェクション許して
>ヤバイデータを撒き散らすことになるよ。

生データ渡すからいけないんであって
Validation 通したデータなら問題ないんじゃね?

581 :デフォルトの名無しさん:2011/02/25(金) 09:40:33.50
taint処理が正確なら良いのだけど、UTF-8の化け文字などを見通せして、
フィルター書ける輩は少ないからねぇ・・・

582 :デフォルトの名無しさん:2011/02/25(金) 09:49:57.79
>> 575
python 実行時に -u オプションつけるか、環境変数 PYTHONUNBUFFERED を設定するとかでどうよ

583 :デフォルトの名無しさん:2011/02/25(金) 09:58:59.39
>>580
validationだけじゃなくて、正確なエスケープが必要。
自分で _mysql の関数使って正しくエスケープするなら、 % も使えなくはない。

584 :デフォルトの名無しさん:2011/02/25(金) 16:08:38.13
>>581
化けてる文字を削除/正規化したいとかDB以前の文字列の問題のような。
一度適切なencodeを事前にしておけばいいだけじゃないの?
>>583
validationってexecute前のパラメータに対して行うからエスケープ
関係ないかと思ったけど違うの?

585 :584:2011/02/25(金) 17:17:28.39
あ、%演算子使ってたのか。勘違いしてた。%演算子は無条件にダメでいいよ。
例外的に使うケースを考えて正確にしても、俺のようにかえって勘違いしやすくなる。

586 :デフォルトの名無しさん:2011/02/26(土) 15:39:39.91
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3245, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)

中略

File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\newforms\util.py", line 15, in smart_unicode
s = unicode(s, settings.DEFAULT_CHARSET)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x89 in position 0: invalid start byte

Python2.5です。windows7
GAEを使ってローカルサーバでテストしているのですが、このエラーでつまづいてしまいました。
Djangoを使って入力フォームの作成をしています。

587 :デフォルトの名無しさん:2011/02/26(土) 16:02:57.71
板違い
http://hibari.2ch.net/test/read.cgi/php/1267057923/

588 :デフォルトの名無しさん:2011/02/26(土) 16:52:01.21
>>587
わざわざありがとうございます。

589 :デフォルトの名無しさん:2011/02/28(月) 00:03:00.77
ちょっと質問なんですが、
PythonでGUIアプリを作るときに、
ツールキットではなくそれをラッピングした
フレームワークって何かありますか?

Webフレームワークのように、アプリケーションを作りやすくする基盤に当たるものです。

590 :デフォルトの名無しさん:2011/02/28(月) 18:00:30.63
上の方で出てましたが、PythonのSQLインジェクション対策ってどんな感じでしょうか?
phpでいうmysql_escape_stringみたいな関数ってありますか?

591 :デフォルトの名無しさん:2011/02/28(月) 18:07:04.46
dbapi2なら
SQL文の文字列:"SELECT カラム名 FROM テーブル名 WHERE カラム1=? AND カラム2=?"

入力されたデータ:(1つ目の?に入るデータ, 2つ目の?に入るデータ)
を分けてexecute関数に渡す

592 :デフォルトの名無しさん:2011/02/28(月) 18:15:05.34
>>591
ありがとうございます。
executeの引数が2つで、executeで安全なものにして合成されるってことですね。

593 :デフォルトの名無しさん:2011/02/28(月) 21:07:00.58
2.6ですが、下記コードがエラー(bad character range)になります。
import re
re1 = re.compile(u"[あ-ん]")
ドキュメントには、reモジュールのパターンにunicodeが
使えると書いてありますが、なんでですかね?

594 :デフォルトの名無しさん:2011/02/28(月) 21:09:41.71
>>593
>>> import re
>>> re.compile(u"[あ-ん]")
<_sre.SRE_Pattern object at 0x01060008>
>>> _.match(u"け")
<_sre.SRE_Match object at 0x00FA8B10>

何が違うんだろう?

595 :デフォルトの名無しさん:2011/02/28(月) 21:20:32.56
IDLEとかでやっててu""リテラルが壊れてるんじゃ?

596 :デフォルトの名無しさん:2011/02/28(月) 21:31:20.04
>>594>>595 情報ありがとうございます
たぶん、もしかすると、おそらく、きっと IDLEが関係しているかもしれない。
もうちょっと調べてみます。

597 :デフォルトの名無しさん:2011/02/28(月) 21:39:41.48
>>596
あぁ、なんだ。IDLE使ってるのか。
IDLE使うと u"" リテラルは使えない。 IPython も一緒。
u"" 使いたかったらコマンドライン使うしかない。

598 :デフォルトの名無しさん:2011/02/28(月) 22:09:00.34
>>597
ありがとうございます。一つ勉強になりました。

599 :デフォルトの名無しさん:2011/02/28(月) 22:20:08.19
IDLEの利便性が何一つ考えられない

600 :デフォルトの名無しさん:2011/03/01(火) 14:57:31.43
まだ書けない?

601 :デフォルトの名無しさん:2011/03/01(火) 15:04:00.84
書けた!祝規制解除!

>>403
亀レスだが今日同じコーディングをしたので報告する。
blobstore_handlers.BlobstoreUploadHandler の self.get_uploads で取得した
blob_info.filename は確かに"=?ISO-2022-JP?B?.." だし、長いファイル名だと
ぶち切れている。
しかし、blobstore.BlobInfo.get(blob_info.key()) して、しっかり取得すると
デコード済みなファイル名を完璧に取得できる。

さらにダウンロードファイル名を決めようと self.response.headers['Content-Disposition']
に日本語を指定すると指定したヘッダが無視される。
半角なら問題ない。これはバグGAEのバグなのかな。
ISO-2022-JPにすれば FireFox等ではOKだが、IEはこのフォーマットに対応していない。
悩ましいなぁ。

602 :デフォルトの名無しさん:2011/03/01(火) 15:34:24.09
>>601
タグだらけのHTMLでISO-2022-JPとか、どこのマゾだよ。
あれ、エンコードされたバイナリに半角記号混ざりまくりなんだぞ。

603 :デフォルトの名無しさん:2011/03/01(火) 15:41:55.70
>>602
ま、URLを教えてあげるから頑張って勉強してね。
http://d.hatena.ne.jp/guangda/20100106/1262762061

604 :デフォルトの名無しさん:2011/03/01(火) 15:51:17.26
なるほど、分からん

605 :デフォルトの名無しさん:2011/03/02(水) 13:00:33.74
プログラム組める人が羨ましい。勉強してるけどなかなか先に進まない。早く思い通りに出来るようになりたいのに。

606 :デフォルトの名無しさん:2011/03/02(水) 13:51:02.79
>>605
楽しめるかどうかだよ。がんば。

607 :デフォルトの名無しさん:2011/03/02(水) 13:53:10.88
PythonみたいなLL言語なら全体を勉強する必要ない
わからない所をその都度調べれば組み込みでもライブラリでも一緒

608 :デフォルトの名無しさん:2011/03/02(水) 14:04:11.41
>>605
クラスとモジュールのいろはさえ分かれば
Pythonはプログラムすぐ書き始められるよ。

作りたいものありきで、下手でもいいから
さっさとプログラムを作り始めることをおすすめ。

609 :デフォルトの名無しさん:2011/03/02(水) 15:52:22.02
ありがとうございます!やる気が出てきました!

610 :デフォルトの名無しさん:2011/03/02(水) 16:11:04.86
Model.delete をオーバライドして関連するエンティティを削除していたのだけれども、
db.delete(entity) や、db.delete(entities) だと呼ばれない事に気付いた。
当たり前だけどちょっとハマった。

611 :デフォルトの名無しさん:2011/03/02(水) 19:24:16.06
tweepyモジュールでmentionで送ってきた相手のアカウント名を知る方法はないでしょうか?
このスレで聞いていいものか分からないんですが

612 :デフォルトの名無しさん:2011/03/03(木) 11:15:53.63
自己解決しました。

613 :デフォルトの名無しさん:2011/03/03(木) 18:04:11.59
class Aのdefで定義した関数の中の変数を
class Bで使いたい場合はどうすればいいんでしょうか?

class Aで最後に代入した値を引っ張ってきたいんです

614 :デフォルトの名無しさん:2011/03/03(木) 18:15:22.96
>>613です。
たとえば
class A
def post(self):
y =2 z =3
x = y + z

このxを
class B
def post(self):
print x # x=5

このようにして使いたいんです。

615 :デフォルトの名無しさん:2011/03/03(木) 21:55:40.93
pass

616 :デフォルトの名無しさん:2011/03/03(木) 22:02:29.05
class A:
  def post(self):
    y =2
    z =3
    A.x = y + z

class B:
  def post(self):
    print A.x=5

こうすればできるが、こんな書き方をしないと駄目な
プログラムは、設計がおかしいと思う。

617 :デフォルトの名無しさん:2011/03/03(木) 22:11:41.52
>>613
普通はB側でAのインスタンスを持つか、
アクセスするときに一時的に引数でもらうかするんじゃないかしら。

Aのメソッド内で使用している変数を外で使いたいということだけど、
メソッド内で使用している変数というのが一時変数なら
Aのメソッドの呼び出しが終わった時点で消えてしまうので、
Aのクラスもしくはインスタンスに、属性として付ける形になると思います。

で、そのBからアクセスしたい変数が
クラス変数なのかインスタンス変数なのかは
その変数の使われ方によるでしょう。

618 :デフォルトの名無しさん:2011/03/04(金) 03:30:11.49
>>614
変数xは、A.post()の**ローカル変数**なので、よほど小細工を施さない限り、外からアクセスできるわけがない。
できたらローカル変数の意義がなくなってしまう。
違う方法を考えるべき。

619 :デフォルトの名無しさん:2011/03/04(金) 10:50:51.88
おはようございます。

"西十条南四十一丁目"→"西十条南41丁目"

このように変換したいです。
丁目は全国最大で3文字が上限。

自分だと
一から九十九までの辞書をゴリゴリ手書きで作成[["一","1"]....["九十九","99"]]
ループ長い文字列から順に正規表現で丁目の前で文字列のマッチング
マッチしたら変換

こんな風に書くと思います。
手書きでゴリゴリリストを書かなくていい方法
ループで正規表現しなくていい方法
など、効率的なよい方法を教えてください

620 :デフォルトの名無しさん:2011/03/04(金) 11:07:02.91
1から9までで良くないか

621 :デフォルトの名無しさん:2011/03/04(金) 11:18:33.74
それより「西10条」にならない方法を考えなきゃ。


622 :デフォルトの名無しさん:2011/03/04(金) 11:19:34.83
>>620
地名の最後に漢数字が来る場合を想定して
山一一丁目みたいなケースだけでも排除しようと思いまして。
これでも山一十丁目は山10丁目に変換されてしまうので完全ではないですけど。

623 :デフォルトの名無しさん:2011/03/04(金) 11:20:07.60
漢数字が地名に直接入り込んでるのはよくある話だからなあ。
八日市とか廿日市とか。

まあ、619は丁目も含めてひっかけるつもりみたいだけど。

624 :デフォルトの名無しさん:2011/03/04(金) 11:21:06.07
>>621
それは丁目とマッチングして丁目の前3文字までを対象としてマッチングすればいいかと。
ひょっとしてそんな正規表現の書き方ありませんか?

625 :デフォルトの名無しさん:2011/03/04(金) 11:24:16.25
>>623
あ!リストに最初から丁目を含めておいて正規表現かけた方がより高速ですね!そうか!

626 :デフォルトの名無しさん:2011/03/04(金) 11:30:15.05
tr=string.maketrans("九十九丁目", "99丁目"..."一丁目", "1丁目")
s.translate(tr)
これですかね?これなら正規表現しなくてすむ?

627 :デフォルトの名無しさん:2011/03/04(金) 11:53:34.94
>>626
maketransを完全に誤解してました。むー

628 :デフォルトの名無しさん:2011/03/04(金) 12:07:18.03
やってみた。
import re
kanlist = {u'一':1, u'二':2, u'三':3, u'四':4, u'五':5,
           u'六':6, u'七':7, u'八':8, u'九':9}

def kton(s, c, mult):
    if s:
        return kanlist[c]*mult if c else mult
    else:
        return 0

def ntos(n):
    return unicode(n)

def henkan(s):
    return re.sub(u'(([二三四五六七八九]?)百)?(([二三四五六七八九]?)十)?([一二三四五六七八九])?(丁目)',
                  lambda m: ntos(
            kton(m.group(1), m.group(2), 100) +
            kton(m.group(3), m.group(4), 10) +
            kton(m.group(5), m.group(5), 1)) + m.group(6),
                  s)


629 :デフォルトの名無しさん:2011/03/04(金) 12:23:07.40
>>628
うわっすげえ

初心者にとっては助かったとかいうレベルじゃなくソース見てちょっと鳥肌が立ちました。
さっそく組み込んでテストしてみます!
ありがとうございました!

630 :デフォルトの名無しさん:2011/03/04(金) 12:40:44.37
うはw なにげに100の位まで作ってあるw

631 :デフォルトの名無しさん:2011/03/04(金) 12:45:56.42
頭いいなあ。どうやったらそうなれるの?

632 :デフォルトの名無しさん:2011/03/04(金) 12:50:27.15
あー、結果の数字を全角にするのを忘れてた。
まあそのへんは適当に。


633 :デフォルトの名無しさん:2011/03/04(金) 13:57:34.45
>>616
>>617
>>618

ありがとうございます。
別の方法ですか・・・。
classAでフォームから入力されたデータをいじって、
そのデータを取り出したいんですが、その場合は同じクラスでやるしか
ないんですかね。

634 :デフォルトの名無しさん:2011/03/04(金) 14:01:15.05
>>616のやり方でやってみたんですが、
AttributeError: type object '◯◯' has no attribute '××'
となってしまいました。


635 :デフォルトの名無しさん:2011/03/04(金) 14:42:09.60
>>628
20を超えると正確に置換できないようですのう。

628のコードをよりPythonicにしたらどうなるんでしょうね。

636 :デフォルトの名無しさん:2011/03/04(金) 16:11:30.85
>>635
>20を超えると正確に置換できないようですのう。
どういうこと?

637 :デフォルトの名無しさん:2011/03/04(金) 16:27:14.40
>>636

adlist = [
 u'銀座四丁目',
 u'銀座十四丁目',
 u'銀座十四丁目',
 u'銀座ニ十丁目',
 u'銀座ニ十四丁目',
]

for line in adlist:
 print henkan(line)
>>>
銀座4丁目
銀座14丁目
銀座14丁目
銀座ニ10丁目
銀座ニ14丁目
>>>

638 :デフォルトの名無しさん:2011/03/04(金) 16:41:59.60
>>637
ニ十がナニヌネノのニになってる

639 :デフォルトの名無しさん:2011/03/04(金) 16:48:40.97
www

640 :デフォルトの名無しさん:2011/03/04(金) 17:30:19.85
>>632
テストで正常に動きました。全角への変換は別のモジュールでやってみます。ありがとうございました。
>>638
www

641 :デフォルトの名無しさん:2011/03/04(金) 18:32:31.09
サニタイズを間違えてサニタリーって大声で言う人がいて困っています

642 :デフォルトの名無しさん:2011/03/04(金) 19:02:18.14
>>638
マジカw それはすまんかったwww

643 :デフォルトの名無しさん:2011/03/04(金) 19:17:36.66
>>632
テストの結果もともと全角アラビア数字が入ってるデータに遭遇したらおかしなことになりました。
旭台1丁目→旭台10丁目

マッチングせず0が返ってきた場合の対応ですかね?
じっくり考えてみます。

644 :デフォルトの名無しさん:2011/03/04(金) 20:39:17.68
python version 2.6.5
os ubuntu linux

class HogeHoge:
  def __init__(self, name):
    self.name = name

temp = []
for x in ("市川海老蔵", "島田紳助", "仙谷由人", "小沢一郎", "鳩山由紀夫", "みのもんた", "押尾学", "亀田興毅", "亀田史郎", "亀井静香"):
  temp.append(hogehoge(x))

この作成した"temp"リストの各HogeHogeクラスのインスタンスの"name"要素に
例えば"亀"を持つインスタンスを抽出する場合の定番のやり方を教えてくださいよろしくお願いします。
それとみなさん字下げはどうやってるのですか?上記は全角スペースを使ってます。

645 :デフォルトの名無しさん:2011/03/04(金) 20:42:43.40
>>538
なんでわかったの?

646 :デフォルトの名無しさん:2011/03/04(金) 20:47:28.34
>>644
filter(lambda e: '亀' in e.name, temp)
[e for e in temp if e in e.name]

日本語はUnicode文字列(u'亀井'とか)じゃないとそのうちバグるかもしれない
字下げは全角スペースでも実体参照(&nbsp)でも好きな方で

647 :デフォルトの名無しさん:2011/03/04(金) 20:49:00.91
>>646は2chに書き込む際の話ね
ソースコード中の字下げは半角スペース*4がお約束

648 :644:2011/03/04(金) 21:04:15.06
>>644-647
こんなに早い回答ありがとうございます

> >>646は2chに書き込む際の話ね
すみません、2chに書き込むときと書き忘れていました
早速試してみます

649 :デフォルトの名無しさん:2011/03/04(金) 22:50:27.37
Cygwinでnumpyとscipyを使う方法教えてください

650 :デフォルトの名無しさん:2011/03/05(土) 00:37:53.98
いまどきcygwin使ってるひとって

651 :628:2011/03/05(土) 02:27:38.26
>>643

あー、そこはちょっと気になってた。とりあえず数字を文字列に直すところで
0 を空文字列にすれば大丈夫のはず。
せっかくだから全角に直すのを >>626 の translate を使ってやってみた。

fulltable = {ord('0'):u'0',ord('1'):u'1',ord('2'):u'2',ord('3'):u'3',
'''''''''''' ord('4'):u'4',ord('5'):u'5',ord('6'):u'6',ord('7'):u'7',
'''''''''''' ord('8'):u'8', ord('9'):u'9'}

def ntos(n):
''''return unicode(n).translate(fulltable) if n != 0 else ''

あとは同じでいいはず。

translate って使いにくい…… こんなもの?



652 :628:2011/03/05(土) 02:28:47.11
>>651
ぎゃ、手作業で変換したら apos になってる!

fulltable = {ord('0'):u'0',ord('1'):u'1',ord('2'):u'2',ord('3'):u'3',
             ord('4'):u'4',ord('5'):u'5',ord('6'):u'6',ord('7'):u'7',
             ord('8'):u'8', ord('9'):u'9'}

def ntos(n):
    return unicode(n).translate(fulltable) if n != 0 else ''


653 :デフォルトの名無しさん:2011/03/05(土) 03:35:31.91
九十九九十九丁目

654 :デフォルトの名無しさん:2011/03/05(土) 06:41:59.62
九十九十丁目

655 :デフォルトの名無しさん:2011/03/05(土) 07:32:44.29
>>652
勉強になります

656 :デフォルトの名無しさん:2011/03/05(土) 16:02:50.76
次元が違いすぎてついていけないでござる

657 :デフォルトの名無しさん:2011/03/05(土) 16:06:22.33
そういうのはどこがわからないか聞けば誰かが教えてくれるよ
全部わかりませんだと入門書嫁か帰れって言われるけど

658 :デフォルトの名無しさん:2011/03/05(土) 17:18:19.88
>>652
ありがとうございます。全角半角変換は他でも使ってたのでzenhan.pyを借りてきてつかってました。
http://straitmouth.jp/blog/setomits/139

ntos()の変更はコードみてわかりましたけど

 if n:
  return unicode(n).translate(fulltable)
 else:
  return ''

こんな書き方になる初心者には相変わらず神ですね。お陰さまで完全な結果を得られました。
なさねがさねありがとうございました。

659 :デフォルトの名無しさん:2011/03/05(土) 17:23:42.57
単なる三項演算子じゃね

660 :デフォルトの名無しさん:2011/03/05(土) 17:49:19.44
3.xだと
str(n).translate(str.maketrans('0123456789', '0123456789'))
でいいのかな多分

2.xだとstring.maketrans()はあるが、unicodeには使えんようだからな
unicode(n).translate(dict(zip(map(ord, '0123456789'), u'0123456789')))
とかか

まーいずれにせよtrに比べると使いにくいわな

661 :デフォルトの名無しさん:2011/03/05(土) 18:44:48.31
python.orgの
下載ってなんですか?
中国人の頁でしたか

662 :デフォルトの名無しさん:2011/03/05(土) 18:46:55.40
ダウンロードだっけ

663 :デフォルトの名無しさん:2011/03/05(土) 19:33:04.15
>>661
バージョン番号が天安門事件の日付とかぶってるせいで、中国人が
great fire wall に阻まれてダウンロードできなくなってるから、
その対策。

664 :デフォルトの名無しさん:2011/03/05(土) 20:20:48.31
簡単な作業をスクリプトに書いたんですが
起動するまで他の言語で作ったスクリプトよりも時間かかりますね
これ起動を早くする裏技みたいなのってありませんか?
windows pytthon3.2です

665 :デフォルトの名無しさん:2011/03/05(土) 21:08:53.95
ハードウェアを速いものに交換する (CPU, HDD, RAM, etc...)
ソフトウェアを速いものに交換する (OS, Driver)
PCを投げ捨てる (Throw away a PC)

666 :デフォルトの名無しさん:2011/03/05(土) 21:18:11.07
>>664
1回目はコンパイルしてるから。
2回目以降は普通に早いはずだけど?
特にWindowsなら。

667 :デフォルトの名無しさん:2011/03/05(土) 21:26:37.66
>>664
どんなスクリプトを書いて、どれくらい時間がかかってるのか出さないと、
何もアドバイスできないぞ。

668 :デフォルトの名無しさん:2011/03/05(土) 21:27:49.72
thumbnailとimageはblob型のフィールドで、num1,num2はint、それ以外はstrです。

cursor.execute("INSERT INTO image(num1, num2, filename, ext, thumbnail, image) VALUES(?, ?, ?, ?, ?, ?);" , (num1, num2, _name, _ext, _thumb, _image))

こんな感じでDBに入れたいのですが、not all arguments converted during string formatting というエラーが出てしまいます。
これは入れる値はすべてstrでないといけないのでしょうか?intを入れたいのですが。。

わかる方よかったらお願いします。

669 :デフォルトの名無しさん:2011/03/05(土) 21:38:44.92
>>661
http://hibari.2ch.net/test/read.cgi/tech/1297602466/81-84

670 :デフォルトの名無しさん:2011/03/05(土) 21:50:32.12
IEのフォームのinputに文字列をペーストしたいのですがjavascriptかなにかで禁止されててできないページがあります
具体的にはパスワードの変更とかでパスワード生成ソフトを利用して作った文字列を入力するのはキツイ&間違って入力したら大変なのでpythonでキーボードを入力させたいのですが
pythonでそういう事はできますでしょうか?

671 :デフォルトの名無しさん:2011/03/05(土) 21:50:44.16
じゃあx64は規制か

672 :デフォルトの名無しさん:2011/03/05(土) 22:08:30.15
>>670
JavaScriptを無効にするか、onPasteをいじる

673 :デフォルトの名無しさん:2011/03/05(土) 22:13:51.84
>>668
使ってる DB は何?SQLite?
print repr(num1, num2, _name, _ext, _thumb, _image)
して結果を張って。

674 :デフォルトの名無しさん:2011/03/05(土) 22:17:33.42
>>670
ttp://lastpass.com/
この手のやつを使えばいいんじゃね

675 :デフォルトの名無しさん:2011/03/05(土) 22:31:34.76
少し前に脆弱性が見つかったやつじゃないか

676 :デフォルトの名無しさん:2011/03/05(土) 23:08:46.31
>>673
ありがとうございます。MySQLです。長すぎるので貼付けは出来ませんが、
num1, num2は 1L, 1L となってて、strのところはunicodeの文字列、画像のところは凄く長いです。

677 :デフォルトの名無しさん:2011/03/05(土) 23:15:06.24
>>676
すごく長いです、じゃなくて、型は何?

678 :デフォルトの名無しさん:2011/03/05(土) 23:22:28.36
>>676
DBに画像を放り込むならフィールドの型を
BLOBにしておかないといけないけど、
そういう設定をちゃんとやってるのかしら。

679 :デフォルトの名無しさん:2011/03/05(土) 23:29:33.27
>>676
blobでつくってます。num1, num2のところを変数ではなく最初から代入された状態(埋め込んだ)にしたらいきました。
? にはintが入らないということでしょうか?

680 :デフォルトの名無しさん:2011/03/05(土) 23:36:11.38
>>679
? じゃなくて %d や %s を使えば良いと思うよ。

681 :デフォルトの名無しさん:2011/03/05(土) 23:47:29.65
674
672
javascript切るとボタンが聞かなくなるので出来ないです(onclick使っていると思われます)
あまりjavascriptのほうはいじりたくないです(サーバー側でクラックしてると思われるので)
lastpassじゃないのですがkeepassは利用してます
パスワード生成ソフトと入力ソフトはセキュリティ的に分けたいのです
無理そうなので諦めます

682 :デフォルトの名無しさん:2011/03/06(日) 00:19:07.99
COM経由でブラウザを操作すればできるけど
それだと言語はpythonがベストな選択肢じゃない。
自分ならGreasemonkeyでHTMLを書き換えるだけだがIEは知らん。

683 :デフォルトの名無しさん:2011/03/06(日) 00:20:24.79
PythonでUAを外から操作するんじゃなくて、
Pythonで直接ウェブサーバーにアクセスして
POST/GETかけることを考えたほうがいいと思うよ。

684 :デフォルトの名無しさん:2011/03/06(日) 14:05:11.91
他のアプリケーションをpythonからコントロールをしたいのですが
どうやったらいいのでしょうか?
具体的にはmpc-hcをほぼすべて完璧にコントロールしたいのです。

参考になるリンクだけでもお願いします。

685 :デフォルトの名無しさん:2011/03/06(日) 14:11:30.30
mpc-hcって何?それが分かれば回答できるかもしれないが

686 :デフォルトの名無しさん:2011/03/06(日) 14:17:34.80
>>685
http://mpc-hc.sourceforge.net/

起動自体はコマンドラインからできるし、各操作のショートカットキーも設定できるから
Pythonで完璧にコントロールの意味がわからんのだけど

687 :デフォルトの名無しさん:2011/03/06(日) 14:19:15.70
>>684
WM_COPYDATAを使ってコマンドを送れる
http://code.google.com/p/mpc-hc/source/browse/trunk/src/apps/mplayerc/MpcApi.h

688 :デフォルトの名無しさん:2011/03/06(日) 14:32:01.59
正直に言うと、エロ動画が増えすぎてサムネイル管理したいのですが
WhiteBrowserじゃサムネイルが作られない動画が多くて
mpc-hcにさせようと思ったんです。
ところがサムネイルにはショートカットキーもなければ
紹介されたAPIにもサムネイルはないみたいだし・・・・・

689 :デフォルトの名無しさん:2011/03/06(日) 14:43:11.68
ffmpegでやれば?
ffmpeg と imagemagick で動画のサムネイルを作る - World Wide Walker
ttp://yoosee.net/d/archives/2007/05/14/003.html

690 :デフォルトの名無しさん:2011/03/06(日) 15:00:15.92
>>688
ffmpegが扱える形式なら、ffmpegつかって以下のようなコマンドラインで
サムネイル作れるよ

ffmpeg -an -vframes 1 -s 幅x高さ -ss 位置(HH:MM:SS) -i 入力ファイル 出力.jpg

後は、AviSynthでもサムネイル作れる
ffmpegほど手軽じゃないが、DirectShowSource()使えば、DirectShowのフィルタで
再生できるようになってる形式は全部対応できる



691 :デフォルトの名無しさん:2011/03/06(日) 15:01:01.86
>>689
前に使ったことある。安定してていいツールだよね。

692 :690:2011/03/06(日) 15:01:16.59
リロードしてなかったスマソ

693 :デフォルトの名無しさん:2011/03/06(日) 15:08:21.51
半年前に要求が出てるが

#639 (command line option to generate thumbnails) ? Media Player Classic - Home Cinema
http://sourceforge.net/apps/trac/mpc-hc/ticket/639

優先度は minor のままだな。

694 :デフォルトの名無しさん:2011/03/06(日) 16:24:02.91
すいませんPythonをWindowsにインストールしてみましたが今市Pythonで何が作れるのかわかりません
プロジェクト管理みたいなのを作りたいのですがガンチャートみたいなやつってPythonだけじゃ作れませんよね?

695 :デフォルトの名無しさん:2011/03/06(日) 16:39:24.83
>>694
GUIアプリとして作るのかコマンドラインアプリとして作るのか
ウェブアプリとして作るのかで全然変わってくるわけだが。

最後のだとTracであるんじゃないかい?

696 :エロ動画のサムネイル:2011/03/06(日) 19:28:50.56
すっげーです。ffmpg
かんたんに作ることができました。
これで心置きなくお猿さんになることができます。
ありがとうございました。

697 :デフォルトの名無しさん:2011/03/06(日) 22:42:19.83
Unicode文字列から日本語だけ抽出したいんだけど良い方法ありますか

698 :デフォルトの名無しさん:2011/03/06(日) 23:10:24.59
>>> import unicodedata
>>> [unicodedata.name(i) for i in u'aあアア亜11一']
['LATIN SMALL LETTER A', 'HIRAGANA LETTER A', 'KATAKANA LETTER A', 'HALFWIDTH KATAKANA LETTER A', 'CJK UNIFIED IDEOGRAPH-4E9C', 'DIGIT ONE', 'FULLWIDTH DIGIT ONE', 'CJK UNIFIED IDEOGRAPH-4E00']

699 :デフォルトの名無しさん:2011/03/06(日) 23:32:19.27
>>698
こんなモジュールがあったんですね。
後はunicode名によって場合分けしたら良いかな

700 :デフォルトの名無しさん:2011/03/06(日) 23:48:34.55
CJK統合漢字、互換漢字には日本で使われてない文字も含まれてるから
面倒だろうな

701 :デフォルトの名無しさん:2011/03/06(日) 23:55:48.55
文字から日本語かどうか判断しようというのがそもそも良くない。
WATASHI ENGLISH WAKARIMASEN
これは何語だ?

702 :デフォルトの名無しさん:2011/03/07(月) 00:29:37.99
Googleとかどうやって判定してるんだろうな。
lang属性があるサイトばっかりじゃないだろうに。

703 :デフォルトの名無しさん:2011/03/07(月) 06:21:12.00
>>702
文字の出現頻度の統計とか、サーバーがどこにあるかとか。
Googleだってページ全体が何語か判定しているだけで、ページの中から
日本語を抜き取るとかまではしていないしな。

704 :デフォルトの名無しさん:2011/03/07(月) 10:01:08.90
一時はC++の勉強を考えていたのですが
C++より簡単だという噂とPortable版の存在を知ってPythonに興味を持ちました
まずはバージョン3.1を導入すればよろしいのでしょうか?

705 :デフォルトの名無しさん:2011/03/07(月) 10:20:34.59
2.x の方がいいよ

706 :デフォルトの名無しさん:2011/03/07(月) 10:20:44.66
全部間違ってる
C++は初学者には適さない(Visual Studioの勉強ならC#でいい)
その分学習用に設計されたPythonは勉強しやすいはず
だからといってPythonが簡単とは言えない、
大概がCやJavaなどの経験があった上での簡単なので信用ならん
Portable版でやる意味がよく分からんが
3.xはまだまだ発展途上なので2.xを使うべきだしPortable Pythonは3.0.1までしかないはず

707 :デフォルトの名無しさん:2011/03/07(月) 10:28:45.11
>>704
それでいいと思うよ。

今から勉強するなら、Python3.0以降(3.1も含む)の方が、
一貫性があっていいかもしれないね。

実務だと周辺ライブラリの対応が必要になるので
2.6対応が避けられなくなっちゃうけど。

708 :デフォルトの名無しさん:2011/03/07(月) 10:44:13.28
GAEが対応するまで、私はPython 2.6.6を続けるよ

709 :デフォルトの名無しさん:2011/03/07(月) 11:07:12.67
>>705
>>706
>>707
アドバイスありがとうございます。
2.6を導入してみます。

710 :デフォルトの名無しさん:2011/03/07(月) 12:28:33.69
>>706
C++が初学者に適さない、という所以外は首肯しがたいな。
Pythonは学習用に向いているけど学習用に設計されたわけではない。
(Guido自身がそう言ってる)

Pythonは言語仕様を簡潔に保つことを常に心がけられているから、
RubyやPerlよりも学習は楽と言っていいと思う。

3.xはもうだいぶ枯れてきてるよ。
3.2では言語仕様面での追加はなくて、
ユーティリティーライブラリの強化が中心だし。

711 :デフォルトの名無しさん:2011/03/07(月) 12:34:04.11
初学者へのレスなんだから少しは行間を読め
学習(の)用(途)に(も)設計された
3.x(のコミュニティ)はまだまだ発展途上なので(ドキュメント・ライブラリ数が圧倒的に少ない)

712 :デフォルトの名無しさん:2011/03/07(月) 13:07:24.37
>>711
いやさすがにそれはちょっと無理がある

713 :デフォルトの名無しさん:2011/03/07(月) 13:08:33.36
だいたいあってる

714 :デフォルトの名無しさん:2011/03/07(月) 13:12:43.07
> 3.xはもうだいぶ枯れてきてるよ。
> 3.2では言語仕様面での追加はなくて、
> ユーティリティーライブラリの強化が中心だし。

これはPEP3003によって設けられた「モラトリアム」のために、
意図的に言語仕様を変えなかったからだろう
つまり変化が無いのはあたりまえで、それを枯れてるの根拠にするのは
なんか違うんじゃないか

715 :デフォルトの名無しさん:2011/03/07(月) 13:16:19.36
俺は初心者だけど3.1からでもすんなり学習できたよ
print("")って書くのとモジュールの名前が違うってのだけ知ってれば後はggrば答えが見つかるし別に困らなかった

716 :デフォルトの名無しさん:2011/03/07(月) 13:34:52.66
version 2.6.5

import sys
import zipfile

ziparc = zipfile.ZipFile(sys.argv[1], "r")
for load_file in ziparc.namelist():
    zipfile = ziparc.read(load_file, "r")
    text = open(zipfile, "r").read()
    print text

zipファイル内のテキストファイルを読み出そうとしています
一応読み出せはするのですが"IOError: [Errno 36] File name too long"と怒られるのですが
正しいやり方を教えてください、お願いします

717 :デフォルトの名無しさん:2011/03/07(月) 13:37:02.95
>>715
ライブラリ使ってないの?

718 :デフォルトの名無しさん:2011/03/07(月) 13:45:09.06
text = open(zipfile, "r").read()がいらない

for load_file in ziparc.namelist():
  text = ziparc.read(load_file, "r")
  print text

719 :デフォルトの名無しさん:2011/03/07(月) 13:46:04.56
ライブラリって何?
とりあえずpythonをインストーラでインストールして使ってるだけだよ

720 :デフォルトの名無しさん:2011/03/07(月) 13:47:04.17
ミスった
for load_file in ziparc.namelist():
  text = ziparc.read(load_file)
  print text

721 :デフォルトの名無しさん:2011/03/07(月) 13:56:57.74
無責任に3.xを薦めるとライブラリすら知らない
頭の悪い人が使っちゃうからやめてよね

722 :デフォルトの名無しさん:2011/03/07(月) 13:59:22.89
>>716
http://www.python.jp/doc/release/library/zipfile.html#zipfile.ZipFile.read

723 :デフォルトの名無しさん:2011/03/07(月) 14:12:22.23
2.x厨 vs 3.x厨

724 :デフォルトの名無しさん:2011/03/07(月) 14:17:20.14
>>721
頭悪そう

725 :デフォルトの名無しさん:2011/03/07(月) 15:49:10.74
Pythonでツールチップを出す場合はどのライブラリを使えばよいでしょうか?

726 :デフォルトの名無しさん:2011/03/07(月) 15:57:09.11
>>725
ツールチップっていうのはOSにもGUIツールキットにも依存するから、
どのライブラリとかそういう次元じゃないよ。

少なくともQt系ならできるはず。

727 :デフォルトの名無しさん:2011/03/07(月) 16:01:41.85
>>718,720
こんなアホな質問に丁寧に回答ありがとう
エラー無しで通りました

728 :デフォルトの名無しさん:2011/03/07(月) 19:56:29.91
ここに居る人ってjavascriptも当たり前のように使いこなしている気がするんですがどうですか?

729 :デフォルトの名無しさん:2011/03/07(月) 20:05:29.62
C,C++,Java,C#,VB,VB.net,CSS,HTML,XHTML,HTML5,JavaScript,jQuery,prototype,
Lua,Ruby,Python,Perl,ActionScript2.0,ActionScript3.0,Basic,HSP,PHP,Objective-C

業務でやって来たのはこのくらいか
プログラミング暦30年

730 :デフォルトの名無しさん:2011/03/07(月) 20:15:24.66
業務でHSP?

731 :デフォルトの名無しさん:2011/03/07(月) 20:47:25.59
これ インタラクティブモードのエンコード
ttp://python.matrix.jp/tips/compatibility/interact_encoding.html

ってMacでも一緒なんですか?

732 :デフォルトの名無しさん:2011/03/07(月) 20:56:08.45
>>729
凄いw
やはりpythonだけしか知らないという人は日本では少ないのかもしれないですね。

733 :716:2011/03/07(月) 21:11:09.66
version 2.6.5
"苗字:名前:性別"が行ごとに区切り文字":"で区切られ並んでいるファイルがありそれを取り込む際に
text = open("text.txt", "r").read()
for lines in text.splitlines():
  for cnt, txt in enumerate(lines.split(":")):
    if cnt == 0:
      temp_last_name = txt
    elif cnt == 1:
      temp_first_name = txt
    elif cnt == 2:
      temp_first_name = txt
      personal_data.append(temp_last_name, temp_first_name, temp_sex)
上記のように一々if~elif文を使う以外に適切な分割方法ありましたらお教えください、おねがいします

>>722
"バイト列にして返します"とあったのでファイルとして開く必要があると誤解してました、ありがとうございます

734 :デフォルトの名無しさん:2011/03/07(月) 21:20:58.68
with open('text.txt') as f:
 for line in f
  personal_data.append(line.split(':'))

735 :デフォルトの名無しさん:2011/03/07(月) 21:25:05.53
>>728
BESICも使えないよ

736 :716:2011/03/07(月) 21:33:24.42
>>734
出来ました、ありがとう

737 :デフォルトの名無しさん:2011/03/08(火) 08:44:18.72
>>729
自慢は他でやれおっさん

738 :デフォルトの名無しさん:2011/03/08(火) 09:15:45.71
>>737
何でくやしがってレスしにきてんお?

739 :デフォルトの名無しさん:2011/03/08(火) 09:30:55.82
おしり


740 :デフォルトの名無しさん:2011/03/08(火) 10:31:42.02
ライブラリやフレームワーク含めるのは有りなのか?

741 :デフォルトの名無しさん:2011/03/08(火) 10:34:15.89
どこの誤爆

742 :デフォルトの名無しさん:2011/03/08(火) 17:16:39.54
いいじゃん、みんなの勉強してる言語教えてよ。

743 :デフォルトの名無しさん:2011/03/08(火) 18:23:10.18
>>742
Python3.2

744 :デフォルトの名無しさん:2011/03/08(火) 18:57:20.28
>>742
本が届いたらpython 3の予定

745 :デフォルトの名無しさん:2011/03/08(火) 20:07:57.86
言語が出来たからってライブラリとフレームワークが使えるわけでもないし

746 :デフォルトの名無しさん:2011/03/08(火) 21:47:32.49
標準関数の使い方や定石コードは知っておくべき

747 :デフォルトの名無しさん:2011/03/09(水) 05:30:27.79
いつのまにか fopen が fopen_s になってたりするんですねわかります


748 :デフォルトの名無しさん:2011/03/09(水) 11:30:07.82
ライブラリとモジュールの違いを教えてくれ。。

749 :デフォルトの名無しさん:2011/03/09(水) 11:43:36.29
PHPしかできないクズだけどさ
Pythonって何に特化してるのか教えてください

750 :デフォルトの名無しさん:2011/03/09(水) 12:14:27.91
>>749
むしろPHPがサーバーサイドに特化している。

751 :デフォルトの名無しさん:2011/03/09(水) 12:14:45.79
何に特化しているとかはないが、他のスクリプト言語に比べると数値計算とかアルゴリズムの記述がやりやすいかな

752 :デフォルトの名無しさん:2011/03/09(水) 13:07:57.35
アルゴリズムの本とかにある仮想言語に似てるよね

753 :デフォルトの名無しさん:2011/03/09(水) 13:31:00.37
Pythonは何にも特化していない汎用言語。
データ解析にもWebアプリにもGUIアプリにもサーバーにもスクリプティングにも使える。

754 :デフォルトの名無しさん:2011/03/09(水) 13:47:23.85
ライブラリとモジュールの違いを教えてくれ〜

755 :デフォルトの名無しさん:2011/03/09(水) 14:04:47.57
ライブラリはlibrary
モジュールはmodule

756 :デフォルトの名無しさん:2011/03/09(水) 14:21:10.97
外部関数用にランタイム化されたものを取り込んで使うのが、ライブラリ。
Pythonのスクリプトにより定義されたものを、取り込んで使うのがモジュール。


757 :デフォルトの名無しさん:2011/03/09(水) 14:43:18.07
>>756
なるほど、ありがとう

758 :デフォルトの名無しさん:2011/03/09(水) 15:37:20.38
勉強用にPythonスタートブックという本の購入を検討しています。
この本はPython3が対象なのでしょうか?

759 :デフォルトの名無しさん:2011/03/09(水) 16:08:14.83
Python勉強してるんですが、複雑な式(論理式?)等が出てくると、途端に難解になります。力を付けたいのですがどの様な知識が必要なのでしょうか?助言お願いします。

760 :デフォルトの名無しさん:2011/03/09(水) 16:14:34.69
日本語を理解する能力

761 :デフォルトの名無しさん:2011/03/09(水) 16:29:35.73
置き換えれば簡単になるんだけどな
a == b and c != d or not (e is f and g is not h) and i not in j
-> A and B or not (C and D) and E
-> S or not T and U
-> X or Y

762 :デフォルトの名無しさん:2011/03/09(水) 17:31:16.03
ベン図でも書けば

763 :デフォルトの名無しさん:2011/03/09(水) 17:34:33.55
ありがとうございます。出直して来ます。

764 :デフォルトの名無しさん:2011/03/09(水) 18:34:20.25
ド・モルガンの法則くらいは知ってた方が良い

765 :デフォルトの名無しさん:2011/03/09(水) 18:35:38.99
>>759
というか、デバッグしたり解析したりする場面を除いて、
具体的なクラスやメソッドの中身を理解する必要は通常ないはずだよ。

モジュールやクラスや関数のインターフェイスや、
その使い方を知りたい、というケースがほとんど。

したがって、コード中の複雑なロジックを頑張って理解しようとして乙だが、
実務で大事なのはそこじゃないかもね、ってこと。

766 :デフォルトの名無しさん:2011/03/09(水) 18:38:55.15
__builtin__.__dict__[funcname] = func
とかして、特定の関数を初めから使えるようにして、
pythonのモジュールをプラグインとして書かせてimportするのってアリなんですか?
できるかできないかではなく、その、仕組みとして。

767 :デフォルトの名無しさん:2011/03/09(水) 18:39:16.14
>>762
それを言うならカルノー図では

768 :デフォルトの名無しさん:2011/03/09(水) 18:44:01.30
>>766

from the_module import the_keyword

の構文で全く同じことができるから、
そんなトリッキーなことを考える必要はない。

769 :デフォルトの名無しさん:2011/03/09(水) 18:55:19.63
>>768
それ書くとしたら、プラグイン側ですよね?
かなり数があるので、呼び出しもとでまとめて関数定義しておいて、プラグイン側は好きなの適当に呼び出す方が、書きやすいかなぁと。
いや、まぁそれでも
from modulename import *
一行書かせればいいんですが。

770 :デフォルトの名無しさん:2011/03/09(水) 19:04:49.43
javaのinterfaceみたいなの想定してる?

771 :デフォルトの名無しさん:2011/03/09(水) 19:11:47.15
>>770
あ、まさにそんな感じです。
boost.pythonから呼び出そうと思ってまして。

772 :デフォルトの名無しさん:2011/03/09(水) 19:58:40.32
ユーザスクリプトに見せたい名前を辞書fooに突っ込んでおいて
exec userscript in foo
とかでもいいんじゃないのかな

773 :デフォルトの名無しさん:2011/03/09(水) 22:44:09.23
あの〜、ここは超初心者が見ていてもよろしいのでしょうか?

774 :デフォルトの名無しさん:2011/03/09(水) 23:17:49.28
>>772
どなるほ
一度実行するだけで、スクリプト内の関数にアクセスする必要がなければ、それがシンプルですね。
それとも、実行すると、辞書って更新されます?

775 :デフォルトの名無しさん:2011/03/09(水) 23:21:34.99
>>> foo = {}
>>> exec 'def add(x,y): return x + y' in foo
>>> foo
とかやってみるとわかりますん

776 :デフォルトの名無しさん:2011/03/09(水) 23:34:28.84
PyScripter使ってるんだけど、
import sqlite3
con = sqlite3.c
としたときに、インテリセンスで候補がでてこないんだけど俺だけ?
空白なんだが。

777 :デフォルトの名無しさん:2011/03/09(水) 23:37:49.95
インテリセンスってMSのマウスかと思ったわ
入力補完のことだろうけどやめてよね

778 :デフォルトの名無しさん:2011/03/10(木) 01:16:23.13
>>775
foo['add'](1,2)
ができますた。
とてもよく理解できました。
さすが関数型言語。

779 :デフォルトの名無しさん:2011/03/10(木) 09:02:16.60
>>778
Pythonはマルチパラダイム言語だが、
関数型言語なんて呼んでるのは初めて見たな。

780 :デフォルトの名無しさん:2011/03/10(木) 09:13:10.22
foo['add'] = lambda x, y: x + y
とどう違うの?


781 :デフォルトの名無しさん:2011/03/10(木) 09:24:58.79
関数型言語(に影響されたオブジェクト指向言語)

782 :デフォルトの名無しさん:2011/03/10(木) 10:25:09.10
python3.2が動く無料サーバってないですか?
GAEって2.6ですよね?

783 :デフォルトの名無しさん:2011/03/10(木) 10:27:02.77
3.2じゃないといけない理由はなにかあるのか

784 :デフォルトの名無しさん:2011/03/10(木) 10:28:10.48
3.2から勉強始めたためなのです

785 :デフォルトの名無しさん:2011/03/10(木) 10:32:15.21
>>780
evalやexecは「任意の」文字列を実行時にコンパイルして実行することができるのが
いちばんの違い

exec statement in foo
では、fooをexecの「環境」になるので、読み書き両用
つまり、statementから参照できる識別子を与えることもできるし
statementが生成した識別子を格納することもできる


786 :デフォルトの名無しさん:2011/03/10(木) 10:34:19.97
よくしらんけどWeb系なら3.2はやめたほうがいいんじゃないの
GAEが2系ってだけじゃなく、Django他、3系未対応のフレームワークだらけだったと
思うけど

787 :778:2011/03/10(木) 11:25:57.63
exec userScr in locals(), dic
とかすれば、モジュールのオブジェクトをプラグインに公開しつつ、プラグイン毎に定義したオブジェクトも後から使えるので、便利ですね〜…

ようやくシンボルテーブルの使い方がわかり始めました。
理解できれば納得な点が多いけど、いかんせんC系言語に慣れてると、なかなか難しい…

788 :デフォルトの名無しさん:2011/03/10(木) 11:37:01.27
GAEは2.5.xだよ
基本的にライブラリが2.5、良くて2.7までしか対応してないから
ライブラリのラッパーをしたライブラリで3.xなんて論外。

789 :デフォルトの名無しさん:2011/03/10(木) 11:49:06.05
>>787
個人的にC++→Pythonはそんなに入りにくいとは思わなかった
C++はメジャーな言語の中でも一番複雑なものの一つだし
マルチパラダイムでジェネリック重視、ダックタイピングを多用するのも似てる

動的言語を使ったことがないならそれに慣れればいいだけで
少なくともC++よりはずっとシンプルで楽ですよ

790 :デフォルトの名無しさん:2011/03/10(木) 12:04:03.96
Cやってたけど全く苦労しなかったな
もしかしてスクリプト言語触ったことないとか

791 :デフォルトの名無しさん:2011/03/10(木) 13:04:40.10
何で3.2移行が進まないんですか?

792 :デフォルトの名無しさん:2011/03/10(木) 13:14:19.84
主要なライブラリが対応したら本気出す

793 :778:2011/03/10(木) 13:37:32.13
>>789-790
javaScript, cmd, powershellぐらいしか。
いや、わかり始めればなんてことはなく、スムーズ何ですけどね。

794 :デフォルトの名無しさん:2011/03/10(木) 13:47:59.46
>>688
http://code.google.com/p/mpc-hc/source/detail?r=2964

795 :デフォルトの名無しさん:2011/03/10(木) 13:51:20.60
shell言語はどれも綺麗とも素直とも言い難いからあんま参考にならないと思う
Pythonは名前空間がわかれば大丈夫

796 :デフォルトの名無しさん:2011/03/10(木) 14:03:27.87
何故ライブラリ作者は3.2に移行しないの?
ただ面倒くさいだけ?それとも3.2って魅力内の?

797 :デフォルトの名無しさん:2011/03/10(木) 14:12:51.65
ライブラリ作者「俺が使ってないから対応しない」
有料でもクローズドでもないのが大半なんだから自分でどうにかすべきだと思うよ

798 :デフォルトの名無しさん:2011/03/10(木) 14:18:13.11
>>796
ガンガン移行作業中だよ。3.2がリリースされて、いままで移行してなかった
たくさんのライブラリが移行を始めてる。

799 :デフォルトの名無しさん:2011/03/10(木) 14:25:01.38
>>796
http://www.python.org/dev/peps/pep-3333/
これがWSGIのPython3.x用の仕様らしいが、承認されたのがごく最近のようだ
WSGIってPythonのWebアプリの基盤だから
Web系の移行が遅れてるのは当然の結果なんだろうなと思った

800 :デフォルトの名無しさん:2011/03/10(木) 14:28:50.28
pyqtなんてゴミはいらんから
wxを3.xに対応させて欲しい

801 :デフォルトの名無しさん:2011/03/10(木) 14:51:16.74
>>800
PyQtのどこがゴミなんだろう・・・
wxは、 wxWidgets 3.0 待ちじゃないかな?タイミング的に wx2系を
Python 3 対応させても、すぐに wx3 対応作業が発生しちゃうから。

802 :デフォルトの名無しさん:2011/03/10(木) 15:22:45.67
Qtは糞

803 :デフォルトの名無しさん:2011/03/10(木) 15:34:32.99
QtはPythonでの利用価値がない
WxはC++での利用価値がない

804 :デフォルトの名無しさん:2011/03/10(木) 15:51:24.74
1行目は同意出来る部分はあるが
2行目はそうでもない
wx を C++ で使ってるけど結構快適だよ
もちろん Qt4 を C++ で使ったこともあるよ


805 :デフォルトの名無しさん:2011/03/10(木) 16:25:29.78
>>773
ここPython超初心者スレだけど、プログラミング超初心者スレじゃないんだよ

806 :デフォルトの名無しさん:2011/03/10(木) 16:42:55.98
>>803
なぜ?
TortoiseHGのGUIもBazaarのGUIもwxじゃなくてQtで作られてるけど。

807 :デフォルトの名無しさん:2011/03/10(木) 16:51:52.05
GPL感染者がきたぞー

808 :デフォルトの名無しさん:2011/03/10(木) 17:14:11.48
>>801
PyQtはライセンスがGPLだからだろ。
PySideはライセンスがLGPLだから俺はPyQtよりPySideの方が好きだ

809 :デフォルトの名無しさん:2011/03/10(木) 17:45:45.06
すみません。
ループの中でエラーを検出したら飛ばして次の列に進むってどうやって書けば・・・
for e in list
 try:
  do.something(e)
 except:
  pass

810 :デフォルトの名無しさん:2011/03/10(木) 17:52:25.25
どのようなエラーなのかわからないとなんとも

例外とエラーは違うんだけど
for e in list:
&&if has_something_error:
&&&&continue
とか

811 :デフォルトの名無しさん:2011/03/10(木) 17:53:20.50
メタモルフォーゼしてしまった

812 :デフォルトの名無しさん:2011/03/10(木) 18:01:28.82
あ、すみません。例外です。
continue!
これで戻れますか?

813 :デフォルトの名無しさん:2011/03/10(木) 18:06:29.06
>>812
continueはイテレータを次に進めて
ループの始めからやり直すわけだが。
戻るのとはちょっと違うよね。

814 :デフォルトの名無しさん:2011/03/10(木) 18:18:11.89
説明がわかりにくくてすみません。

for e in list
 try:
  do.something(e)
 except:
  continue
こう書いてdo.something(e)で例外が発生した場合
イテレータを次に勧めて処理を続行できますか?

815 :デフォルトの名無しさん:2011/03/10(木) 18:44:50.29
その場合、continueでもpassでもかわらない

list = ('1.4142', '1.7320', '2.2362', '2,7182', '3.1415',)
for e in list:
    try:
        print float(e)
    except ValueError:
        continue
for e in list:
    try:
        print float(e)
    except ValueError:
        pass

816 :デフォルトの名無しさん:2011/03/10(木) 21:16:53.91
超初心者は Python から入門するべきではないと?

817 :デフォルトの名無しさん:2011/03/10(木) 21:20:30.51
超初心者はHTML→CSS→JavaScript→PHPの順番で学習すると良い

818 :デフォルトの名無しさん:2011/03/10(木) 21:32:30.26
趣味でやるなら好きにやればいいんじゃない?

819 :デフォルトの名無しさん:2011/03/10(木) 23:10:41.10
C->C++->Python->Lisp

820 :デフォルトの名無しさん:2011/03/10(木) 23:27:11.14
>>815
うーむ・・・ ループの先頭に復帰させるにはどうしたらいいのでしょう

821 :デフォルトの名無しさん:2011/03/10(木) 23:43:25.80
>>776
同じく。
PyScripterはpydの中までは拾ってくれないみたいね
NetBeansならいけるけどJavaのGUIアプリはもっさりなんだよなぁ

822 :デフォルトの名無しさん:2011/03/10(木) 23:58:29.83
個人的にはC言語から入るのがいいと思うけどねぇ。
LISPは好きなように拡張できる自由度は魅力だけど自由すぎる。

他の言語は、C言語やってから好きなの選べばいいと思う。

823 :デフォルトの名無しさん:2011/03/11(金) 00:34:17.15
>>820
お前の言っているループの先頭ってどこだ?

824 :デフォルトの名無しさん:2011/03/11(金) 00:53:23.61
>>814
出来るよ

815が言ってるのは
ループスコープの最後でcontinueしても
その後に実行される文が無いからpassしてるのと同じだよってこと

825 :575:2011/03/11(金) 06:39:11.24
>>582
> python 実行時に -u オプションつけるか、環境変数 PYTHONUNBUFFERED を設定するとかでどうよ

環境変数設定してみたけど、
M-x pdbは相変らず何も表示されなかったです。

pdb起動するのに -uオプションってどうやってつけるのかよく分らなかったので試せませんでした。


826 :デフォルトの名無しさん:2011/03/11(金) 09:20:21.01
簡単で、分かりやすく、強力な言語だと聞いてpythonから始めたのに、、。

827 :デフォルトの名無しさん:2011/03/11(金) 09:37:37.58
Who told you that?
You may not talk with terrorist.

828 :デフォルトの名無しさん:2011/03/11(金) 10:12:54.87
問題:
次のコードを実行した場合、XXXは出力されるか。
はいかいいえで答えろ。

try:
  int('hoge')
  print('XXX')
except ValueError:
  pass


良くない回答例:
「pass」
「答えろだと?てめェが答えろよ!」

829 :デフォルトの名無しさん:2011/03/11(金) 10:14:32.16
>>825
それそもそも pdb ちゃんと起動出来てる?
M-x pdb の後に聞かれるコマンドは python -m pdb hoge.py みたいにやってる?


830 :デフォルトの名無しさん:2011/03/11(金) 10:31:31.60
tryの前でint()が再定義されているかもしれないじゃないか

831 :デフォルトの名無しさん:2011/03/11(金) 17:25:25.33
自分のパソコンはwindowsなんですが
他の環境で動くかどうか確かめる方法なんて
あるんでしょうか?

832 :デフォルトの名無しさん:2011/03/11(金) 17:26:08.43
おめえこの状況でよく質問なんてできるよなks

833 :831:2011/03/11(金) 17:27:07.94
すいません、書き直します
自分のパソコンはwindowsなんですが
作ったプログラムが
他のOSで動くかどうか確かめる方法なんて
あるんでしょうか?

834 :デフォルトの名無しさん:2011/03/11(金) 17:27:38.98
VMWareやDual Bootを利用して確認する
あるいは特定環境のユーザーに報告してもらう。
基本的には環境依存のライブラリや組み込み関数を避ければ大丈夫

835 :デフォルトの名無しさん:2011/03/11(金) 17:28:10.08
ある。
次の方どうぞ。

836 :831:2011/03/11(金) 17:51:01.16
ありがとうございます
今まで自分の環境のみでなんとか動くものを、と
考えて作っていたのですが
他のOSで動く事を考えるには
・#-*- coding: utf-8 -*-は使ってはいけない
・Ansiで保存
・cp932やmbcsは使わずunicodeで扱う
でいいんでしょうか?


837 :デフォルトの名無しさん:2011/03/11(金) 17:52:19.10
>>836
>#-*- coding: utf-8 -*-は
は使っていいよ。

838 :831:2011/03/11(金) 18:00:23.43
あ、そうなんですか?
以前、外国の人に
ファイル_must_に書かれるファイル名がコード化されるUTF-8であるということである、それはシステム符号化に依存することができない。
て言われたんで#-*- coding: utf-8 -*-は使っちゃいけないかと思ってました

839 :デフォルトの名無しさん:2011/03/11(金) 18:03:13.37
>>838
コテハン付けてね

840 :デフォルトの名無しさん:2011/03/11(金) 18:12:16.90
[地震]マグニチュード8.8に修正 世界で5番目 http://j.mp/efdSpe

841 :デフォルトの名無しさん:2011/03/11(金) 19:10:18.38
>>838
ファイルの中がUTF-8であることと
ファイル名がUTF-8であることは全く違うんだが。

書いたPythonプログラムを再配布するときは、
スクリプトのファイル名に日本語を使ったらダメ。

842 :デフォルトの名無しさん:2011/03/11(金) 22:26:10.07
>>840
> M8.8の地震のエネルギーは、6000人以上が犠牲になった阪神大震災(M7.3)の約180倍に当たる。

今回は数万人死んだのかな

843 :デフォルトの名無しさん:2011/03/12(土) 07:45:54.71
Windows7 64bitでpygtkを使いたいのですが使えている人いますか?
どうも僕の環境ではうまく動作してくれません。

環境
Windows: 7 Home Premium 64bit
python: 2.6.6(32bit)
gtk+: 2.12.9-win32-2
pygtk: 2.220.0-1.win32py2.6
pycairo: 1.8.10.win32py2.6
pyobject: 2.26.0-1.win32py2.6

Pythonを32bit版に選んだ理由は、64bit版をインストールしているときに
pygtk、pycairo、pyobjectをインストールしようとすると、
「Python version 2.6 required, which was not found in the registry.」
というエラーがでたためです。
またpygtkなどには64bit版のパッケージは見つかりませんでした。

32bit版のPythonをインストールすると、pygtkなどはうまくインストール出来たのですが、
今度は、コンソール上で「>>> import gtk」でエンターすると、

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python26\lib\site-packages\gtk-2.0\gtk\__init__.py", line 30, in <module>
import gobject as _gobject
File "C:\Python26\lib\site-packages\gtk-2.0\gobject\__init__.py", line 26, in <module>
from glib import spawn_async, idle_add, timeout_add, timeout_add_seconds, \
File "C:\Python26\lib\site-packages\gtk-2.0\glib\__init__.py", line 22, in <module>
from glib._glib import *
ImportError: DLL load failed: 指定されたプロシージャが見つかりません。

というエラーが発生します。
どうにかしてwin7の64bitでpygtkを使う方法はないでしょうか?

844 :デフォルトの名無しさん:2011/03/12(土) 09:43:36.40
あるクラスのデストラクタで一時ファイルの削除を行っているのですが、
ファイルが削除されないことが多々あります。

デストラクタはオブジェクトが不要になった際に確実に実行されるという認識なのですが、
この認識は誤りなのでしょうか?


845 :デフォルトの名無しさん:2011/03/12(土) 09:47:29.50
>>844
循環参照の一部になっているオブジェクトのデストラクタは呼ばれません。
一般的に、 __del__ を使ってリソース解放するのは悪いアイデアです。
コンテキストマネージャを使いましょう。

846 :デフォルトの名無しさん:2011/03/12(土) 11:41:57.81
>>843
GTK+ runtimeは入れた?
http://www.pygtk.org/downloads.html

847 :デフォルトの名無しさん:2011/03/12(土) 12:36:26.97
>>843
GTK+系ライブラリをバラバラに入れるのは
非常におすすめできない。
一旦Python本体及び周辺ライブラリを全てアンインストールして、
Python本体を入れなおした後、
Python側からeasy_installでインストールすることをおすすめ。
Active Pythonならpypmという手もある。

848 :デフォルトの名無しさん:2011/03/12(土) 12:44:38.01
all-in-one installerがあるじゃん

849 :デフォルトの名無しさん:2011/03/12(土) 13:28:24.40
>>848
何のことかと思ったよ。
これのことだね。
http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.22/

850 :デフォルトの名無しさん:2011/03/12(土) 13:30:02.94
руgtkはいらんなあ

851 :デフォルトの名無しさん:2011/03/12(土) 15:21:33.65
weak_ptr的なものは無いのかというのは、Cに毒されすぎ?
こういう場合、どう組めばいいのだ?

852 :デフォルトの名無しさん:2011/03/12(土) 15:27:49.93
>>851
weakref はあるよ。
こういう場合って、どういう場合?

853 :デフォルトの名無しさん:2011/03/12(土) 22:25:57.36
>>841
ありがとうございます
ちょっと文字列とUTF−8とかcp932の事が理解できて無いみたい
なので
もうちょっと調べてみます。

854 :デフォルトの名無しさん:2011/03/13(日) 04:10:19.89
>>843です。報告遅くなりました

>>846
× gtk+: 2.12.9-win32-2
○ gtk+ runtime: 2.12.9-win32-2
記述漏れです
ちゃんと入っていました

>>847
確かにバラバラに入れるもんじゃないですね
easy_installを試す前に
公式にあるall-in-one installerを試したらうまく言ったので
このままこれでいってみようと思います

>>848
all-in-one installerを試したらうまくいきました。
ありがとうございました



855 :デフォルトの名無しさん:2011/03/13(日) 08:15:10.99
py2exeでexeファイルを作ろうとしたところうまくいきません。
py2exeをダウンロードし、ファイルも2つ用意しました。
test.pyとsetup.pyの2つです。
プログラム内容はサンプルコードのようなものなので間違ってはいないと思います。
Python Shellのコマンドラインで、
python setup.py py2exe
と入力したところ、
SyntaxError: invalid syntax
とエラーがでて、入力したコマンドのsetupのところが赤くなっています。
構文エラーということはコマンドが何か違うのでしょうか?
Python(command line)のほうでもやってみたのですが同じような結果です。
Pythonのバージョンは2.5です。
分かる方いましたらお願いします。


856 :デフォルトの名無しさん:2011/03/13(日) 08:25:03.36
とりあえず、そのsetup.pyをcatしろ

857 :デフォルトの名無しさん:2011/03/13(日) 08:29:38.27
>>856
すいません、catとはなんでしょうか?
ググッてもよくわからなかったのですが

858 :デフォルトの名無しさん:2011/03/13(日) 10:17:58.00
じゃあ、わかるまでググれ

859 :デフォルトの名無しさん:2011/03/13(日) 10:22:14.31
猫かわいい

860 :デフォルトの名無しさん:2011/03/13(日) 12:15:04.39
pythonで
for(3回ループ)
{case 1回目:処理A
    2回目:処理B
    3回目:処理C

としたいのですがどうすれば良いでしょうか?

861 :デフォルトの名無しさん:2011/03/13(日) 12:41:29.51
try:
処理A
処理B
処理C
except:
pass

for i in range(3):
if i==0: 処理A
elif i==1: 処理B
elif i==2: 処理C

for i in range(1,4):
if i==1: 処理A
elif i==2: 処理B
elif i==3: 処理C

862 :デフォルトの名無しさん:2011/03/13(日) 12:47:33.66
ありがとうございました

863 :デフォルトの名無しさん:2011/03/13(日) 20:11:27.91
for p in [処理A,処理B,処理C]:
 p()

864 :デフォルトの名無しさん:2011/03/13(日) 20:12:36.95
ありがとうございました

865 :デフォルトの名無しさん:2011/03/14(月) 02:47:13.54
import tkinter

from tkinter import *
の違いってなんですか?

866 :デフォルトの名無しさん:2011/03/14(月) 07:22:44.46
モジュールのインポートか
モジュールの名前空間を外してモジュール内の全てをインポートか

867 :デフォルトの名無しさん:2011/03/14(月) 13:44:34.52
ありがとうございます
名前空間がわからないので出直してきます

868 :デフォルトの名無しさん:2011/03/14(月) 16:31:00.57
import tkinter
の場合
root = tkinter.Tk()
とモジュールを明示的に指定して書けるのに対して
from tkinter import *
の場合
root = Tk()
とだけ書けば良いので「手抜き」コードになってしまう
ただしグローバルの名前空間を破壊するので
元々 Tk() という関数があったら上書きされる
そもそも * で import してしまうと
何が上書きでつぶされるか判らないので
何をやってるか判ってないと危険

名前空間判ってないときは
from hoge import *
はやめて
from hoge import fuga
とすれば
fuga()
で済むので安全というかマシ

869 :デフォルトの名無しさん:2011/03/14(月) 16:41:36.37
ありがとうございます。

870 :デフォルトの名無しさん:2011/03/14(月) 20:18:19.72
hogehoge.__class__.__name__でクラス名で判定して処理しているのですが
こんな使用は一般的に許容されるでしょうか?

871 :デフォルトの名無しさん:2011/03/14(月) 21:03:04.20
>>870
そういうコーディングは不可能ではないが、
一般的にRubyやPythonのような動的言語は
ダックタイピングを好むので、型ではなく振る舞いによる実装を行う。

それから、instanceofを使うといい。

872 :デフォルトの名無しさん:2011/03/14(月) 21:03:45.15
isinstanceだた

873 :870:2011/03/15(火) 01:02:18.22
>>871-872
ありがとう、参考にします

874 :デフォルトの名無しさん:2011/03/15(火) 12:34:09.18
python(2.6.2)のcursesで日本語UTF-8を表示するにはどうすればいいんでしょうか?
以下のコードでaddstrの出力が文字化けしてしまいます
printの出力は正常なので端末の問題ではないと思うのですが

#!/usr/bin/python
# -*- coding: utf-8 -*-
import curses
s = "テスト"
def main(scr):
 print s
 scr.addstr(s)
 scr.refresh()

curses.wrapper(main)


875 :デフォルトの名無しさん:2011/03/15(火) 12:36:40.78
s = u"テスト"

876 :デフォルトの名無しさん:2011/03/15(火) 13:09:07.74
>>875
それだけだと以下のエラーになりました
File "test.py", line 7, in main
scr.addstr(s)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

scr.addstr(s.encode("utf-8"))
にするとエラーはなくなりましたが
結果は同じで文字化けしました

877 :デフォルトの名無しさん:2011/03/15(火) 14:57:56.72
>>876
locale.setlocale(locale.LC_ALL,"")


878 :デフォルトの名無しさん:2011/03/15(火) 16:20:52.12
>>877
import localeしてそれを書いとくことで文字化けしなくなりました
ありがとうございます

879 :デフォルトの名無しさん:2011/03/15(火) 18:41:07.78
いえいえ

880 :デフォルトの名無しさん:2011/03/15(火) 20:06:20.76
本当のことを教えてください

881 :Perl忍者lvl2(悪) ◆M5ZWRnXOj6 :2011/03/16(水) 00:46:38.93
pythonはじめました

882 :Perl忍者lvl2(悪) ◆M5ZWRnXOj6 :2011/03/16(水) 00:47:24.23
Python引退します

さようなら

883 :デフォルトの名無しさん:2011/03/16(水) 00:48:05.23
We're grateful for your leaving, thank you farewell.

884 :デフォルトの名無しさん:2011/03/16(水) 00:51:32.73
タプルとかリストとかややこしくてわけわからん

885 :デフォルトの名無しさん:2011/03/16(水) 00:54:20.62
タプルなんて定数以外に使わんからいらんよ

886 :デフォルトの名無しさん:2011/03/16(水) 00:58:19.13
それならちょっと知っておくくらいでいいのかね
リストのほうしっかり勉強しときます、さんくす

887 :デフォルトの名無しさん:2011/03/16(水) 12:03:13.61
タプルは値の組み合わせを定数として扱いたい時に使う。
同じグループが変動していくならリストでいい。

888 :デフォルトの名無しさん:2011/03/16(水) 12:09:46.57
具体的には、

1) 辞書のキーに使う
2) 関数から複数の戻り値を返したい時に使う
3) スワップを x, y = y, x のようにできる。フィボナッチなら x, y = y, x+y

というのが分り易いタプルの出番。
使っていけば、そのうちタプルを使うべき場面が判るようになってくる。

889 :デフォルトの名無しさん:2011/03/16(水) 13:19:40.90
Cの構造体に相当するものが無い(無かった)からな

890 :デフォルトの名無しさん:2011/03/16(水) 13:58:30.44
構造体なら空クラスにインスタンス変数でいいと思うの

891 :デフォルトの名無しさん:2011/03/16(水) 15:54:44.83
構造体みたいなバイトガチガチなものなんて、
Pythonにはいらないよ。

どうしてもやりたいならCythonで記述すればいいし。

892 :デフォルトの名無しさん:2011/03/16(水) 15:56:16.27
構造体としてのクラスとタプルの利点を合わせ持った namedtuple というものもある。

893 :デフォルトの名無しさん:2011/03/16(水) 16:35:39.86
version 2.6.5
class test1:
  def __init__(self, num):
    self.num = num

class test2:
  def __init__(self, lst):
    self.lists = lst

temp = []
lists = []
for x in range(10):
  temp.append(test1(x))
lists.append(test2(temp))
temp[:] = []
for y in range(5):
  temp.append(test1(y))
lists.append(test2(temp))

for clstst1 in lists:
  for test1lst in clstst1.lists:
    print str(test1lst.num)

最後の部分のループで、それぞれ10&5個の整数を持つリストが表示されることを期待したのですが
これを実行すると、test2クラスの2つのインスタンスのリストが同じものを参照しているようです
一時的にリストを作っている"temp"を、それぞれの代入ごとに別々の変数で作ると期待する動作となります
ということは変数"temp"の参照先をクラスtest2のコンストラクタ?に渡しているようなのですが
値渡しあるいはひとつの変数を使いまわして同様の動作を得るにはどうするべきでしょうか
それともコードを見直すべきでしょうか?

894 :デフォルトの名無しさん:2011/03/16(水) 16:51:26.60
>>893
test2の__init__()の中身を
self.lists = lst[:]
とでも書き換えればいいよ

895 :デフォルトの名無しさん:2011/03/16(水) 16:54:02.82
>>> temp = range(10)
>>> a = temp
>>> temp[:] = []
>>> a
[]

>>> temp = range(10)
>>> a = temp
>>> temp = []
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

896 :デフォルトの名無しさん:2011/03/16(水) 16:57:20.66
>>893
894だけじゃ意味が分からんだろうから……。

変数に入れたリストについて、変数はリストの値じゃなくて参照を保持してる。
だからリストが入った変数(この場合lst)を別の変数に代入しても、
リストは全体で1つしかない。
894はセレクタという文法で、この場合はリストのコピーが作られる。

897 :デフォルトの名無しさん:2011/03/16(水) 17:01:16.56
>>884
RDBを知ってるんなら、RDBの表を考えると分かりやすい
表の行は、相異なる属性/型の組になってる
ID、姓、名、性別、...
みたいな
いっぱんにこういう有限の「組」を表現する概念がタプルで
関係データベースや関数型言語で使われる

逆に、ある表の列は、同じ型のシークエンスになってる
そういうものを表すのに一般に使われるのがリスト

静的型の世界ではその区別ははっきりと明確だけど
Pythonの場合は動的型言語だから、この種の区別はないね
単にミュータビリティの差でしかない
でも、リストである必要がない場所では常にタプルを使ったほうがいいよ
そのほうが効率がいいし
変更可能なインスタンスを共有することによるトラブルに悩まされずに済む

898 :デフォルトの名無しさん:2011/03/16(水) 17:02:57.28
namedtupleは曲がりなりにも標準ライブラリの一員で
色々なところで多用されてるけど
その実装は文字列によるクラスの実行時生成+exec()という
真っ黒でド汚い手段による「メタプログラミング」

899 :デフォルトの名無しさん:2011/03/16(水) 18:04:19.45
>>> ['abc', 123, '456']
['abc', 123, '456']


型が違っててもリストにすることは可能だから
>>897 の説明は不適切

900 :デフォルトの名無しさん:2011/03/16(水) 18:05:10.37
>>899
よく読もうよ

901 :デフォルトの名無しさん:2011/03/16(水) 18:10:14.39
理解力ないやつには何言っても無駄

902 :デフォルトの名無しさん:2011/03/16(水) 19:01:45.93
namedtupleの実装はないと思うわ
標準ライブラリって中身見ると吹くこと多すぎ

903 :デフォルトの名無しさん:2011/03/16(水) 20:11:18.25
>>902
fnmatch.fnmatch()なんかも「正規表現へ変換してre.match()を呼ぶ」という
やっつけ仕事で、しかも「メタキャラクタをエスケープすることはできません」とか
コメントにしれっと書いてあったわ……。

904 :デフォルトの名無しさん:2011/03/16(水) 21:02:29.48
>>894,896
動作を確認しました、セレクタについて調べてみます。ありがとうございました。
>>895
動作しました、ありがとうございます。
これは"temp"という同名の変数を再定義?したという理解でよいのでしょうか?

905 :デフォルトの名無しさん:2011/03/16(水) 21:06:50.82
>>904
セレクタじゃなくてスライスだよ。
b がリストで、 a = b[:] とすると、 a は b と同一じゃなくて、
(浅い) コピーになる。

>>895 は変数を再定義したというよりは、新しい空のリストオブジェクトを
temp に代入した、と考えたほうがいい。
Python の変数は、値(オブジェクト)を格納するのではなく、値への参照を
格納していると考えたほうがいい。

906 :デフォルトの名無しさん:2011/03/16(水) 21:09:02.03
>>904
http://www.python.jp/doc/nightly/tutorial/introduction.html#tut-lists

http://www.python.jp/doc/nightly/tutorial/datastructures.html#tut-morelists
を読んだらいいと思う。
Python のチュートリアルは、少なくとも2章から5章まではよく出来てる。

907 :893,904:2011/03/16(水) 21:27:13.27
>>905
丁寧に解答いただきありがとうございます。
>>906
チュートリアルはわからないときにつまむ程度でした…ご指摘の章を通読してみます。ありがとうございます。

908 :デフォルトの名無しさん:2011/03/16(水) 23:09:54.43
>>907
それ学習の仕方が間違ってるよ。

チュートリアルってのは頭から尻尾まで一通り通読して、
できれば手を動かして実際にコードを動かしてみるものだ。

わからないときに見るのは「リファレンスマニュアル」。

909 :デフォルトの名無しさん:2011/03/16(水) 23:24:40.46
>>908
ただ、Pythonのチュートリアルは詳しすぎる部分もあるからな。
特にクラス周り、これ本当にチュートリアルに書く内容か?って感じ

910 :デフォルトの名無しさん:2011/03/17(木) 21:55:07.22
文字列がどのような文字コードであるか確認する方法ってありますか?

911 :デフォルトの名無しさん:2011/03/17(木) 22:27:15.00
そりゃあるよw

912 :デフォルトの名無しさん:2011/03/17(木) 22:54:49.50
>>910
「推測」はできるけど、プログラム的に「確認」するのは無理じゃないかな
エンコーディングが不明なバイト列の文字エンコーディングを推測するのに
よく使われるのは、Pythonだとたぶんこれ
http://chardet.feedparser.org/docs/

でもこれは、すごく遅いので、日本語だけでいいならgaucheのコードあたりを
Cythonでも使って移植したほうがいいんじゃないかという気がする



913 :デフォルトの名無しさん:2011/03/17(木) 22:56:27.75
chardetはちなみにこんな風に使います
うちの環境では、この例でdetectに優に数秒はかかる

from contextlib import closing
import urllib2
from cStringIO import StringIO
from zipfile import ZipFile
import chardet

url = 'http://www.aozora.gr.jp/cards/000148/files/794_ruby_4237.zip'
with closing(ZipFile(StringIO(urllib2.urlopen(url).read()), 'r')) as zf:
    data = zf.read(zf.namelist()[0])
    print 'detecting char encoding...'
    print chardet.detect(data)


914 :デフォルトの名無しさん:2011/03/17(木) 23:09:53.61
>>910
いや、いい質問だ。
未知のバイト列(文字列)が何の文字コードか判定するのは非常に難しい。
ウェブブラウザやテキストエディタでは
それぞれ専用のプログラムが書かれている。

Unixではnkfで自動判定したりできるけど、結構ミスが多いようだ。
Pythonでなら何のライブラリでできるだろうね。

915 :デフォルトの名無しさん:2011/03/17(木) 23:13:42.60
PyPIのchardetは古いので公式ページから取ってきてね

916 :デフォルトの名無しさん:2011/03/18(金) 00:09:07.71
ローカルに落とせるなら、あらかじめ iconv で変換
utf-8で読めばええんとちゃうの?

クロールする対象を、無差別にピックするケースに持ち込むより
ある程度絞ったほうが精度・効率は良くなるような気が…

917 :デフォルトの名無しさん:2011/03/18(金) 06:53:29.14
for co in ['utf-8', 'cp932', 'euc', 'ascii']:
 try:
  encode=str.decode(co)
 except:
  continue
else:
 encode=u'不明'

918 :デフォルトの名無しさん:2011/03/18(金) 10:38:15.34
文字コード判別は誤爆前提で考えた方がいいよ

919 :デフォルトの名無しさん:2011/03/20(日) 11:48:02.21
組み込み関数dir()のdirって何の略ですか
DIYやDRYならわかるのですが

920 :デフォルトの名無しさん:2011/03/20(日) 13:11:11.63
directory

921 :デフォルトの名無しさん:2011/03/20(日) 13:37:10.68
>>920
dirって言ってもdirectoryじゃないしなーとか思ってたけど
辞書で引いたら納得しました
どうもありがとう

922 :デフォルトの名無しさん:2011/03/20(日) 18:47:37.13
パスワード生成プログラムを書いてみたのですがもっと良い書き方ありませんか?

import random
import string

print('パスワードの長さ:', end = "")
width = input()
for i in range(int(width)):
print(random.choice([
random.randint(0, 9),
random.choice(string.ascii_lowercase),
random.choice(string.ascii_uppercase)]),
end = '')

923 :デフォルトの名無しさん:2011/03/20(日) 19:44:10.93
>>922
string.digits を使って一貫性を持たせるぐらいかな
偏りを持たせているのは狙いでしょ?

924 :デフォルトの名無しさん:2011/03/20(日) 19:49:56.64
random.choise(random.choice(string.digits), random.choice(string.ascii_letters))
でいいんじゃないのかな
random.choice(string.digits + string.ascii_letters)
と書くともっと短いけど、重みが変わってしまう

全体としては
def genpass(width): return ''.join(random.choice(〜) for _ in range(width))
とかそんな感じ

でも、厳しいとこだと数字、アルファべット大文字、小文字どれも入ってないと
いけなかったりすると思うんで、もっと作り方工夫したほうがいいような気がする


925 :924:2011/03/20(日) 19:50:44.26
ごめん一行目random.choice()の中の[]がぬけてた

926 :デフォルトの名無しさん:2011/03/20(日) 20:14:05.69
>>932
string.digitsのほうが綺麗ですね
ありがとうございます

>>924
確かに大文字小文字一緒にして数字と文字の確率を1/2にした方がいいですね
ありがとうございます
厳しいとこは・・・最初に数字、小文字、大文字を1つずつ出した後このプログラムでどうでしょうか?
だめですかね?w

927 :924:2011/03/20(日) 20:14:14.35
ああ、1行目でも重みは変わるんだな
馬鹿だ……

928 :デフォルトの名無しさん:2011/03/20(日) 20:28:40.90
def genpass(size=8):
    nnum = random.randint(1,size - 2)
    nlow = random.randint(1,size - nnum - 1)
    nupp = size - nnum - nlow
    placement = list('n' * nnum + 'l' * nlow + 'u' * nupp)
    random.shuffle(placement)
    gen = dict(n=lambda: random.choice(string.digits),
               l=lambda: random.choice(string.ascii_lowercase),
               u=lambda: random.choice(string.ascii_uppercase))
    return ''.join(gen[x]() for x in placement)

どれも1文字は使うようにしてみたら、なんかすごい汚くなった

929 :デフォルトの名無しさん:2011/03/20(日) 20:30:25.35
あれ・・lettersを使うと結構偏りが・・・


930 :デフォルトの名無しさん:2011/03/20(日) 20:32:47.52
choice()の対象の要素数によってある程度乱数に寄りが出るとか?

931 :デフォルトの名無しさん:2011/03/20(日) 22:37:45.62
(datetime型 , int型, str型) のようなタプルをリストに入れています。
これをdatetime型の降順で並べ替えにはどんな書き方になりますか?

932 :デフォルトの名無しさん:2011/03/21(月) 00:17:20.25
>>931
ネストされたオブジェクトは、それぞれが比較されます。
例えば、
L1 = [1, ('a', 3)]
L2 = [1, ('a', 2)]
L1 < L2, L1 == L2, L1 > L2
=>(False, False, True)
この場合は先頭のオブジェクトから順に、
1と1を比較=>同じ=>'a'と'a'を比較=>同じ=>3と2を比較=>3の方が大きい
のような流れになります。
(datetime型, int型, str型)のようなシーケンスの場合、比較の順番は
datetime型=>int型=>str型となるので、
単純にlis.sort() あるいは sorted(lis)で大丈夫です。
更に言えば、datetimeの中では、
year=>month=>day=>hour=>minute=>second=>microsecondの順で比較されます。
同じ理屈でdatetimeもどきも簡単に作れます。

933 :デフォルトの名無しさん:2011/03/21(月) 00:19:03.88
すまん、矢印が半角だった..orz

934 :821:2011/03/21(月) 16:42:59.62
>>776
ツール>オプション>IDEオプション>Special packagesに追加したらいけた

935 :デフォルトの名無しさん:2011/03/24(木) 21:34:09.52
python2.xでUTF8にエンコードした文字を出力する方法は
text = u"あいう"
print text.decode("utf_8")

ってやると思うんですが、これをpython3.xで書くとどうなりますか?

936 :デフォルトの名無しさん:2011/03/24(木) 22:06:44.49
>>935
sys.stdoutにテキストを出力する際のエンコーディングをUTF-8に設定して
テキストを出力する場合は、
どこかで
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
のようにしておいて、あとは
print('あいう')
のようにするだけ

その例なら↑で十分だけど
本当にバイト列を出力したい場合には、sys.stdoutのかわりにsys.stdout.bufferを使う
ただしprint()関数はいずれにせよstrにフォーマットしてTextIOWrapperに
出力する関数なので、バイトI/Oの目的には使えないので
sys.stdout.buffer.write()を使うとよいです
この例だと、
sys.stdout.buffer.write('あいう'.encode('utf-8') + '\n' and None
でおおむね同じ結果になるでしょう

937 :デフォルトの名無しさん:2011/03/24(木) 22:07:54.99
ごめん最後の行、色々ぬけてた
sys.stdout.buffer.write('あいう'.encode('utf-8') + b'\n') and None


938 :デフォルトの名無しさん:2011/03/24(木) 22:24:15.88
>>932
いい事言うなあお前。
みんなが頭じゃわかっててもなかなか実践できない事を口に出して言えるなんざ大変な自信だよ。
それで出来てなかったらあのインチキ占いのバアさんと一緒だぞお前。
そんなに当たり前の事を言いたかったら尼さんにでもなってから説教したらどうだ。

939 :デフォルトの名無しさん:2011/03/24(木) 23:12:29.08
>>936
まさかここまでの詳細な解説付きのレスを頂けるとは、ありがとうございます。

940 :デフォルトの名無しさん:2011/03/25(金) 15:06:51.81
>>931
datetimeオブジェクト同士は大小比較が可能なので、他の要素まで比較する必要があるならともかく
そうでなければdatetimeだけ比較すればいいんじゃないか?

lis.sort(key = lambda x: x[0], reversed = True)

941 :デフォルトの名無しさん:2011/03/25(金) 15:15:27.88
日本の危機的状況に、よくpythonなんかやってられるな
ニュースが気になってプログラミングできねえ

942 :デフォルトの名無しさん:2011/03/25(金) 15:24:35.73
pythonやりたくても出来ない人のぶんまでやれ!

943 :デフォルトの名無しさん:2011/03/25(金) 17:27:26.86
楽天のHPから一部分だけを抽出するプログラムを作ろうとしてるんだけど
エンコードの関係がよく分からなくて出力出来ない

ソース
# coding: utf-8

import urllib2
import lxml.html

url = "http://ranking.rakuten.co.jp/"

user_agent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"

req = urllib2.Request(url, None, {'User-Agent':user_agent})
res = urllib2.urlopen(req)

html = lxml.html.fromstring(res.read())
for elm in html.cssselect("#rnk_update"):
print elm.text_content()

エラーはこれ。

c:\Python27>python test.py
Traceback (most recent call last):
File "test.py", line 15, in <module>
print elm.text_content()
UnicodeEncodeError: 'cp932' codec can't encode character u'\xb7' in position 1:
illegal multibyte sequence

要はUnicodeな\xb7がcp932じゃ書き出せないよ。って言ってるんだろうけど、elm.text_content().encode('utf-8')でもダメだし分からない。
因みに同じプログラムでYahoo Japanなら行ける。Yahooはutf-8で楽天がeuc-jpだからだと思うんだけど、教えてください。


944 :デフォルトの名無しさん:2011/03/25(金) 17:44:00.43
>>941
禿げしく同意
http://www.youtube.com/watch?v=o-dBOgxzNG8


945 :デフォルトの名無しさん:2011/03/25(金) 18:00:53.17
>>943
回避法だけ先に言うと、
print elm.text_content().encode(sys.stdout.encoding, 'xmlcharrefreplace')
とするといい

それはパースまではちゃんとできていて、単にコンソールへの印字に失敗してるだけ
lxmlは内部的にデータをunicodeの形で持っているので
elm.text_content()が返すのはunicodeの文字列

printはsys.stdout.encoding(その環境ではcp932)を使ってバイト列にエンコードして
出力しようとしているが、cp932に変換できない文字が含まれているので
エラーになっている

要注意なのは、仮にcharsetがShift_JISなソースであってもそれは起こりえるってこと
lxmlはたとえば&nbsp;のようなエンティティ参照をパース後にUnicode文字に
変換するので、そういうものがソースに含まれていれば、cp932には
変換できないことになる

946 :デフォルトの名無しさん:2011/03/25(金) 19:21:08.56
>>945
>lxmlは内部的にデータをunicodeの形で持っているので

エラーは回避できました。stdoutのencodingに合わせるんですね。
でも数値文字参照にしかならないんでしょうか?

例えばさっきのソースで

out_f = open('test.dat', 'w')

html = lxml.html.fromstring(res.read())
for elm in html.cssselect("#rnk_update"):
out_f.write(elm.text_content().encode(sys.stdout.encoding, 'xmlcharrefreplace'))

out_f.close()

と変更しても当然数値文字参照になるだけで普通の文字として表われませんが、この辺りはどう考えればいいんでしょうか。


947 :デフォルトの名無しさん:2011/03/25(金) 19:27:36.49
>>945
いろいろおかしい
>>> sys.stdout.encoding
'cp932'
>>> u'\xb7\xf6'.encode(sys.stdout.encoding, 'xmlcharrefreplace')
'·ö'
>>> print '\xb7\xf6'.decode('euc-jp')


>>943
lxml.htmlが文字コードを認識していないみたいなのであらかじめdecodeして
Unicodeで渡すとうまくいくと思う

948 :デフォルトの名無しさん:2011/03/25(金) 19:38:15.29
マグニチュードを計算するにはどうすれば良いですか?

949 :デフォルトの名無しさん:2011/03/25(金) 19:43:45.89
>>947 encodeの出力はこれ
'&#183;&#246;'

950 :デフォルトの名無しさん:2011/03/25(金) 23:11:33.99
今日からpython始めましたが文字コード複雑ですね 既に心が折れそうです

array = ["文字"]
print array #=> ['\xe6\x96\x87\xe5\xad\x97']
こうなってしまうのですが、配列内に格納されたstr型の日本語をそのまま日本語で表示できないのでしょうか?

print array[0] #=> ["文字]
こちらは普通に表示されるので不思議に感じています

951 :デフォルトの名無しさん:2011/03/25(金) 23:17:53.55
リストを表示させて文字がコードになるのは当たり前
どうしてもってなら
"['%s']" % "', '".join(L)

952 :デフォルトの名無しさん:2011/03/25(金) 23:54:16.20
cgiだけどここでいいのかな?

python -m CGIHTTPServer
でサーバを立てて
import cgi
cgi.test()
でhtmlフォーム(method=text)の内容を確認したいんだけど
フォームに日本語を入れると応答が無いのはなぜ?
ちなみに半角だけなら動くんだ

953 :デフォルトの名無しさん:2011/03/26(土) 02:23:47.30
>>952
サーバー側がエラー吐いてるんじゃないの。
コンソールかエラーログかを見ればわかるでしょ。

954 :デフォルトの名無しさん:2011/03/26(土) 06:49:07.53
http://www.python.org/ にアクセスできません

955 :デフォルトの名無しさん:2011/03/26(土) 11:45:56.65
指定したディレクトリ直下のサブディレクトリだけを取得する
for root, dirs, files in os.walk(foo_path):
  for _dir in dirs:
    print os.path.join(root, _dir)
  break
こんな方法しか思いつかない俺に正しいやり方おしえてください

956 :デフォルトの名無しさん:2011/03/26(土) 11:54:50.35
直下だけ?なら
filter(os.path.isdir, os.listdir(foo_path))
でいいんじゃないか

957 :デフォルトの名無しさん:2011/03/26(土) 12:59:51.80
>>956
filter(lambda e: os.path.isdir(os.path.join(foo_path, e)), os.listdir(foo_path))
こう書き直すと一応でるのですがこの理解でよろしいでしょうか?

958 :デフォルトの名無しさん:2011/03/26(土) 13:26:36.20
>>957
ああごめん、カレントで試してた
それでいいんじゃないのかな

959 :575:2011/03/26(土) 23:49:05.95
pythonでGUIやるなら、おすすめはなに?
Tkinter以外で

960 :デフォルトの名無しさん:2011/03/27(日) 01:49:27.71
任意の文字コードの文字列をつくりたいときは
u'文字列'.encode('任意の文字コード名')
ってすればいいですか?

961 :デフォルトの名無しさん:2011/03/27(日) 08:03:42.45
いちばん手っ取り早いのは
wxPython


962 :デフォルトの名無しさん:2011/03/27(日) 18:45:13.02
Pythonカプセル化しょぼすぎだろ

963 :デフォルトの名無しさん:2011/03/27(日) 19:06:14.50
そう思ったらJavaでもC#でもつかっとき

964 :デフォルトの名無しさん:2011/03/27(日) 19:23:47.12
どうせ手を入れたくなるし
キモイ方法で無理矢理アクセスするよりマシだわ

965 :デフォルトの名無しさん:2011/03/27(日) 20:09:48.24
余震怖い

966 :デフォルトの名無しさん:2011/03/27(日) 23:43:27.43
init内で宣言した(protectedな感じの用途の)インスタンス変数にドキュメントを残したい
そしてpydocで拾いたいんだけどどうやればいいの?ドキュメント読んでもわからない

propertyがデフォでpubicであるとは、つまりオブジェクトのメンバが外部インターフェイス
として公開されることを当然視した結果であり、したがってドキュメント可能かと思ったんだけど、
それは間違い?むしろメソッドだけが外部インターフェイスであって、メンバ変数などは
現実的にはアクセスし放題だけど、思想的には設計上外部から見えなくても問題ないように
して絶対的に隠蔽しつくせってことなのかな?あるいは両者以外の考え方?

967 :デフォルトの名無しさん:2011/03/28(月) 00:52:35.48
処理の途中に
it = generator()
for x in it:
____yield x
があるんだけど、効率的に処理する方法ってない?
(ジェネレータの内容をそのままyieldするみたいな)
↑だとyieldされたものがxに入ってさらにyieldするって感じで
冗長な感じがするんだ

968 :デフォルトの名無しさん:2011/03/28(月) 00:56:07.35
>>966
属性には docstring が無い。普通は class の docstring に書く。
epydoc とか pydoc 意外のドキュメントツールを使う場合は、 #: とか
特殊なコメントを書ける。

>>967
今はそうするしかない。
Python 3.3 で実装されるかもしれない機能の筆頭になってる。
yield from x って書くようになる予定。

969 :967:2011/03/28(月) 01:24:38.53
>>968
そうなのか
是非実装してほしいものだ

970 :デフォルトの名無しさん:2011/03/28(月) 12:21:40.78
リスト内に日本語が入ってるとprintした時にエンコードされて表示されちゃう件ですが、python3ではエンコードせずにそのまま表示してくれるそうです
このprintの挙動だけpython2系で使えませんか?

971 :デフォルトの名無しさん:2011/03/28(月) 15:46:36.86
>>970
文字列の概念自体が違ってるから、そのままでは無理なんじゃね?

972 :デフォルトの名無しさん:2011/03/28(月) 17:13:30.83
1
2
3


を   [1,2,3]   という形にするにはどうしたらいいですか?

973 :デフォルトの名無しさん:2011/03/28(月) 17:26:12.09
1
2
3
の意味をkwsk

974 :デフォルトの名無しさん:2011/03/28(月) 17:26:34.82
縦に並んだ 1 2 3 が文字列に '1\n2\n3\n' という形で入ってるとしたら

s = '1\n\2\n3\n'
map(int, s.rstrip().split('\n'))

975 :デフォルトの名無しさん:2011/03/28(月) 17:30:37.48
s.rstrip().split('\n') の部分は s.splitlines() でいけるよ。

976 :デフォルトの名無しさん:2011/03/28(月) 17:41:30.83
Rubyではファイルの拡張子が簡単に取り出せるけど
Python3.2で同じ事できないんですね
やっぱりPythonは敷地が高い

977 :デフォルトの名無しさん:2011/03/28(月) 17:43:41.73
1
2
3

のテレパシーを分かってくれてありがとうございます

978 :デフォルトの名無しさん:2011/03/28(月) 17:49:52.61
>>975
ああそうだった。どうもです

>>976
>>> os.path.splitext('a/b/c/d.e.f')
('a/b/c/d.e', '.f')

979 :デフォルトの名無しさん:2011/03/28(月) 18:47:18.81
Ruby の EOS みたいな機能はpython ではどうやって呼び出せますか?

980 :デフォルトの名無しさん:2011/03/28(月) 18:58:16.67
EOSっていうかヒアドキュメントのことだったら
ちょっと違うけどこれで

>>> print '''1
... 2
... 3'''.splitlines()
['1', '2', '3']

981 :デフォルトの名無しさん:2011/03/28(月) 19:07:42.43
これで解決しそうです
ありがとうございます

982 :デフォルトの名無しさん:2011/03/28(月) 19:09:59.18
C言語の「Hello, world.」で躓いてしまったのですが、
Python から勉強をはじめるのは厳しいでしょうか?

983 :デフォルトの名無しさん:2011/03/28(月) 19:15:19.62
/* C言語 */
#include <stdio.h>
int main(void) { printf("hello, world!\n"); return 0; }

# Python2
print "hello, world!"

私があなたに勧める言語はPython
なぜなら私もあなたもCで挫折した人生の敗北者だからです

984 :デフォルトの名無しさん:2011/03/28(月) 19:21:57.44
HQ9+

H

985 :966:2011/03/28(月) 20:46:06.12
>>968
やっぱないのか、ありがとう
コメントもりもり書くわ

986 :デフォルトの名無しさん:2011/03/28(月) 21:13:16.95
(format t "hello,world!~%")

987 :デフォルトの名無しさん:2011/03/28(月) 21:25:23.91
class HQ9pParser(object):
  def __init__(self): self.accum = 0
  def _H(self): print 'Hello, World!'
  def _Q(self): print self.src
  def _9(self): print '<dummy: 99 bottles of beer lyrics goes here>'
  def _plus(self): self.accum += 1
  def parse(self, src):
    self.src = src
    for ch in self.src:
      if ch == '+': self._plus()
      else: exec('self._%s()' % ch)

parser = HQ9pParser()
parser.parse('HHQ+HQ++9')
print parser.accum

よし、これで漏れも言語実装者だ
ちょっとコンパイラスレでぶいぶい言わせてくる

988 :デフォルトの名無しさん:2011/03/28(月) 23:23:44.88
>>982
 . .... ..: : :: :: ::: :::::: ::::::::::: * 。+ ゚ + ・
        ∧ ∧.  _::::。・._、_ ゚ ・    
       /:彡ミ゛ヽ;)(m,_)‐-(<_,` )-、 *   ←Pythonを勉強している人
      / :::/:: ヽ、ヽ、 ::iー-、     .i ゚ +
      / :::/;;:   ヽ ヽ ::l  ゝ ,n _i  l
 ̄ ̄ ̄(_,ノ  ̄ ̄ ̄ヽ、_ノ ̄ ̄E_ )__ノ ̄
        ↑Cで挫折した人

989 : 忍法帖【Lv=3,xxxP】 :2011/03/28(月) 23:56:46.38
次スレそろそろおながいします
LLスレもレベル不足のせいか立てられず…

990 :天ぷらのみ:2011/03/29(火) 14:02:46.21
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

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

前スレ
くだすれPython(超初心者用) その10
http://hibari.2ch.net/test/read.cgi/tech/1294836668/
関連スレ
Pythonのお勉強 Part42
http://hibari.2ch.net/test/read.cgi/tech/1297602466/
◆関連リンク
Python の Home Page
ttp://www.python.org/
Python 日本語ドキュメント
ttp://www.python.jp/doc/
ttp://www.python.jp/doc/release/
最新版直リン - 2.Xが推奨。3.Xはライブラリやドキュメントが使えないことも
ttp://www.python.org/download/
Python のコーディングガイド PEP8
ttp://www.python.org/dev/peps/pep-0008/
Python のコーディングガイド PEP8 - 日本語訳
ttp://www.oldriver.org/python/pep-0008j.html
日本語文字列コード問題まとめ
ttp://python.matrix.jp/tips/string/encoding.html
インタラクティブモードのエンコード
ttp://python.matrix.jp/tips/compatibility/interact_encoding.html
SJISから卒業出来ないひとのための禁じ手
reload(sys); sys.setdefaultencoding('cp932')

991 :天ぷらのみ:2011/03/29(火) 14:04:54.18
Pythonの文字化け対策:sys.setdefaultencodingの謎
ttp://hain.jp/index.php/tech-j/2008/01/07/Python%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91
実行時にdefaultencodingを変更する
ttp://d.hatena.ne.jp/perezvon/20070715/1184469534
PEP-8とか
ttp://www.python.org/dev/peps/pep-0008/
ttp://oldriver.org/python/pep-0008j.html
Google Python Style Guideとか
ttp://google-styleguide.googlecode.com/svn/trunk/pyguide.html
ttp://works.surgo.jp/translation/pyguide.html

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


※よろしコ

992 :天ぷらのみ:2011/03/29(火) 14:07:05.02
次すれタイ「くだすれPython(超初心者用) その11」

993 :デフォルトの名無しさん:2011/03/29(火) 16:21:51.99
次スレ

くだすれPython(超初心者用) その11
http://hibari.2ch.net/test/read.cgi/tech/1301383226/

994 :デフォルトの名無しさん:2011/03/29(火) 16:22:35.09
うめ

995 :デフォルトの名無しさん:2011/03/29(火) 16:23:25.44
うめ

996 :デフォルトの名無しさん:2011/03/29(火) 16:24:07.67
うめ

997 :デフォルトの名無しさん:2011/03/29(火) 16:27:37.10
>>993
GJ

998 :デフォルトの名無しさん:2011/03/29(火) 16:27:43.19
うめ

999 :デフォルトの名無しさん:2011/03/29(火) 16:28:50.18
Pythonおもろいなー

1000 :デフォルトの名無しさん:2011/03/29(火) 16:29:58.37
>>1000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

262 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.01.03 2014/02/20 Code Monkey ★
FOX ★ DSO(Dynamic Shared Object)