1 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 15:22:07.02 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。 エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。 騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。 次スレは >>985 辺りで 前スレ くだすれPython(超初心者用) その11 hibari.2ch.net/test/read.cgi/tech/1301383226/ 関連スレ Pythonのお勉強 Part45 hibari.2ch.net/test/read.cgi/tech/1321189773/ ◆関連リンク Python の Home Page ttp://www.python.org/ ┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘
511 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 16:43:37.54 ] 普通にunicodeでやったらうまくいったが
512 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 16:50:51.46 ] >>509 encodeじゃなくてdecodeだろ >>510 存在しないとIOErrorになる
513 名前:502 mailto:sage [2012/02/17(金) 16:57:45.39 ] >>509 駄目でしたOTL Message File Name Line Position Traceback <module> C:\Users\***\desktop\1.py 27 exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128) >>510 確認しましたがありました >>511 テキストファイルがおかしいのでしょうか? Upします。 パスはpです 出力画像 www.dotup.org/uploda/www.dotup.org2650080.png.html www.dotup.org/uploda/www.dotup.org2650085.txt.html
514 名前:502 mailto:sage [2012/02/17(金) 17:01:03.50 ] >>512 decodeにしてみたけど駄目でした Message File Name Line Position Traceback <module> C:\Users\***\desktop\1.py 27 decode C:\Python26\Lib\encodings\utf_8.py 16 exceptions.UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte
515 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:02:15.39 ] 'utf-16'
516 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:05:48.23 ] f.read().decode('utf-16')
517 名前:502 mailto:sage [2012/02/17(金) 17:06:27.46 ] >>515 うおおおおお できましたあああ!!! 有難うございます!!!
518 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:14:31.91 ] ユニコード色々有り過ぎでヤだお
519 名前:504 [2012/02/17(金) 17:26:40.15 ] >>506 素早い回答ありがとうございました。 ですが求めている物とは少し違いました。 fileが以下のように各行に1つずつのときに "名前 打率: .nnn 本塁打: aa"と表示されるようにしたいのです。 tech504.txt 長野 578 164 17 マートン 579 180 13 宮本 474 143 2 説明が悪く大変申し訳ありません。
520 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:38:24.07 ] '\n'.join(out)
521 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:10:46.33 ] この本読んだひといますか? 感想聞かせてください WSGIウェブプログラミング ttp://www.amazon.co.jp/dp/4877832882/ 書評悪すぎてわろす
522 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:15:51.52 ] じょ、情報を小出しにするなとあれほど。。。 単に興味で聞くだけなんだけど、これなんのために必要だったの? n = 4 with open('tech504.txt.1') as f: out = [] for i, line in enumerate(f): line = line.rstrip() if i % n == 2: continue out.append(line) if i % n == n - 1: print("名前: {}, 打率: .{} 本塁打: {}". format(out[0], out[1], out[2])) out = []
523 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:22:06.70 ] せめて回答する側はインデントしようよ
524 名前:デフォルトの名無しさん [2012/02/17(金) 18:39:44.52 ] datではインデントされてるよ
525 名前:デフォルトの名無しさん [2012/02/17(金) 18:48:18.29 ] >>522 申し訳ありません。 目的は課題です。求める打者数も項目もずっと多いですが。
526 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:23:38.99 ] for 名前, 打数, 安打数, 本塁打数 in zip(*[iter(open('tech504.txt'))]*4): print(名前, 打数/安打数, 本塁打数)
527 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:39:02.38 ] どっちもひどい
528 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 05:52:36.14 ] 酔った勢いでかいてみた # -*- coding: utf-8 -*- file = "tech504.txt" person = [] pgroup = [] cnt = 0 # こんなくそデータを処理する仕様はks # 出題者よデータの変更を求む! with open(file) as f: for line in f: line = line.rstrip() if cnt <= 3: person.append(line) cnt +=1 else: pgroup.append(person[:]) del person[:] person.append(line) cnt = 1 pgroup.append(person[:]) for line in pgroup: print line[0], " 打率:", float(int(line[1]) / int(line[2])), "本塁打:", line[3]
529 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 06:09:44.37 ] # coding: utf-8 rec = [] # 名前、打数、安打数、本塁打数 f = open('2ch.txt') while 1: line = f.readline().rstrip() if not line: break rec.append(line) if len(rec) == 4: name = rec[0].decode('utf-8') ba = round(float(rec[2]) / float(rec[1]), 3) ba = str(ba)[2:5] hr = int(rec[3]) print u"名前: %s 打率: .%s 本塁打数: %s" % (name, ba, hr) rec = [] f.close()
530 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 19:03:46.86 ] 文字列の2次元リストを、x[1]を昇順に、x[2]も昇順なら以下のソースでうまくいくのですが、 x[2]のみ降順ソートする方法がわかりません。 x:(x[1],-x[2])のように-をつけるエラーが出ます。 どうすれば良いでしょうか。 #!/usr/bin/python # coding: UTF-8 l = [['D', '100', '3000'], ['B', '100', '2000'], ['A', '500', '4000'], ['C', '200', '5000'], ['C', '200', '3000'], ['C', '200', '2000'], ['E', '400', '1000']] for e in sorted(l, key=lambda x:(x[1],x[2])): print e[0], e[1], e[2]
531 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 19:19:56.27 ] -int(x[2])
532 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 19:20:59.63 ] むやみやたらにキャストすると遅くなるけどね
533 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 20:03:07.97 ] >>531 ありがとうございました。うまくいきまいした。 もうひとつだけ質問させてほしいのですが、 以下のようなリストがあって、1番目の要素を固定して、2番目の要素だけでソートする ことは出来るでしょうか。 (元のとおりにきりん、ぞう、ぱんだの順番で並べたい) ソート前 ['きりん', '300', '3000'], ['きりん', '100', '2000'], ['きりん', '500', '4000'], ['ぞう', '400', '5000'], ['ぞう', '200', '3000'], ['ぱんだ', '400', '1000'] ['ぱんだ', '200', '2000'], ソート後 ['きりん', '100', '2000'], ['きりん', '300', '3000'], ['きりん', '500', '4000'], ['ぞう', '200', '3000'], ['ぞう', '400', '5000'], ['ぱんだ', '200', '2000'], ['ぱんだ', '400', '1000']
534 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:03:04.52 ] なんか松本引越センターを思い出したw
535 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:24:54.63 ] a0 = [x[0] for x in a] a.sort(key=lambda x: x[1]) for x0, x in zip(a0, a): x[0] = x0 自分の頭をひねらない人はプログラムやめたほうがいいよ。
536 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:27:56.12 ] 安定ソートの出番ですな
537 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:29:24.87 ] >>535 これは無知からくる悪い見本
538 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:33:06.05 ] >>533 というか、なんでそんなデータ構造にした?
539 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:57:46.97 ] 以下の2次元リストで都道府県に対してindexメソッドを使うことはできますか? その場合どうすればよいでしょうか。 [1,'東京',0] [2,大阪,0] [3,神奈川,0]
540 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:03:20.24 ] >>539 たまには自分の頭で考えてみればいいんじゃないかな?
541 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:06:11.72 ] 賛成の反対の反対
542 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:19:22.88 ] >>535 すいません、マジでこれ俺には理解不能です。 もうちょっとやさしく教えてもらえると助かります。 まず1行目からつまずきました。
543 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:27:09.27 ] numpyのarray型で特定の要素だけ加算したりすることは出来ますか? a = array([[1,2],[3,4]]) a = a[1,1] + 3 で [[1,2],[3,7] みたいにしたいのですが,これを行うには行列の大きさを同じにしないと無理でしょうか?
544 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:30:19.97 ] 最低でも一冊は、Pythonの入門書読め。 金無いなら、 diveintopython3-ja.rdy.jp/index.html これ一通り読め。 次からは diveintopythonも>>1 に入れてよ。 >>950 お願い。
545 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:31:20.79 ] >>544 は>>542 宛て
546 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:32:45.85 ] a[1][1] += 3
547 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:40:45.58 ] >>544 入門書はどれがいいの?
548 名前:950 mailto:sage [2012/02/19(日) 00:57:01.58 ] >>544 了解
549 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 02:49:46.64 ] マトリックスみたいなコンソールにバババっとコードみたいなのが流れる奴って何分で作れますか?
550 名前:Python不慣れだが30分くらいで書いてみた mailto:sage [2012/02/19(日) 03:44:16.69 ] from sys import stdout from random import shuffle chrs = 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 @ . < > $ # % _ , ' for i in range(1000): ls = [c for c in chrs] shuffle(ls) for c in ls: stdout.write(c)
551 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 06:02:48.43 ] >>550 を盛大にパクってrandomやstringのヘルプ見つつ10分ほど Windowsではこれしないと動かないかも support.microsoft.com/kb/101875/ja import sys from random import randint from string import ascii_letters, digits, punctuation chars = ascii_letters + digits + punctuation chars = chars + ' ' * len(chars) size = len(chars) try: sys.stdout.write('\033[1;32m') # green while 1: sys.stdout.write(chars[randint(0, size - 1)]) finally: print '\033[0m' # reset
552 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 06:16:53.64 ] >>534 ぱんだは同業他社だなw
553 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 06:19:40.32 ] きりんにも同業他社があるしww
554 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 07:13:28.42 ] >>551 を盛大にパクってWin32APIのヘルプ見つつ10分ほど cmd.exeで動くバージョン import sys from random import randint from string import ascii_letters, digits, punctuation from ctypes import * class CONSOLE_SCREEN_BUFFER_INFO(Structure): _fields_ = [('w', c_short), ('h', c_short), ('x', c_short), ('y', c_short), ('a', c_int), ('l', c_short), ('t', c_short), ('r', c_short), ('b', c_short), ('maxw', c_short), ('maxh', c_short)] b = CONSOLE_SCREEN_BUFFER_INFO() h = windll.kernel32.GetStdHandle(-11) c = windll.kernel32.GetConsoleScreenBufferInfo(h, byref(b)) windll.kernel32.SetConsoleTextAttribute(h, 10) # green chars = ascii_letters + digits + punctuation chars += ' ' * len(chars) size = len(chars) while True: sys.stdout.write(chars[randint(0, size - 1)]) windll.kernel32.SetConsoleTextAttribute(h, b.a) # reset
555 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 07:20:01.76 ] ああ最後の二行こっちで try: while True: sys.stdout.write(chrs[random.randint(0, sz - 1)]) finally: windll.kernel32.SetConsoleTextAttribute(h, b.a)
556 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 09:26:10.77 ] できました 回答して頂いた方ありがとうございました
557 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 10:13:36.10 ] 死ね,俺死ね 下らないことで詰まってた 俺死ね
558 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 11:24:27.01 ] では私は生きよう
559 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 11:50:29.86 ] ではプロセスは子を含めて殺しておこう
560 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:43:41.44 ] 浮動小数の比較で a=1.0 b=1.0 if a <= b : みたいにするのは、やめたほうがいいですか? a=1.0 とすると実際は a=1.00000000001 みたいになってて <= の評価が うまくいかない可能性を危惧しています。とりあえず今のところ問題なさそうなんですが。 Fortranやってたときは、よくこんなふうにやってました。 eps=1e-30 a=1.0-eps b=1.0 if( a <= b) then
561 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:19:40.00 ] >>> 1/10. 0.10000000000000001 >>> 1/10. == 0.1 True >>> 1/10. > 0.1 False
562 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:36:56.87 ] >>> 0.1 0.10000000000000001 >>> 0.2 0.20000000000000001 >>> 0.3 0.29999999999999999
563 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:40:51.45 ] >>560 Pythonでも後者のようにしたほうがいいと思う 比較する値の差をとって、それが十分小さいか調べる decimalモジュールやNumPyが使えるのかもしれないけどよく知らない
564 名前:560 mailto:sage [2012/02/21(火) 00:46:19.34 ] >>561 確かにそうなりますね。 結局、気にしないでOKということでいいですか?
565 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:51:11.32 ] 気にしないのはダメ
566 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 01:18:42.28 ] 比較対象を有効桁で丸めて比較すれば?
567 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 01:25:35.45 ] >>560 Python3.2では、i, jはdouble型として扱われていて、 以下のような比較をしていたので、 比較に関する問題で、Cで起き得る問題はPythonでも起き得ると考えていいと思う。 float_richcompare() { Compare: PyFPE_START_PROTECT("richcompare", return NULL) switch (op) { case Py_EQ: r = i == j; break; case Py_NE: r = i != j; break; case Py_LE: r = i <= j; break; case Py_GE: r = i >= j; break; case Py_LT: r = i < j; break; case Py_GT: r = i > j; break; } PyFPE_END_PROTECT(r) return PyBool_FromLong(r); }
568 名前:560 mailto:sage [2012/02/21(火) 01:36:48.21 ] ありがとうございます。 やっぱり気にすることにします。
569 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 02:01:12.54 ] 実行速度より、誤差が怖いのならdecimal使った方がいいとおも。 とりあえず、1万桁ぐらいの値でも正確に判別できているみたいだから、 decimal使えば? d1 = Decimal('0.111') >>> d1._int, d1._exp ('111', -3) >>> d00 = decimal.Decimal('0.' + '0' * 10000) >>> d01 = decimal.Decimal('0.' + '0' * 9999 + '1') >>> d00 < d01 True >>> d00 > d01 False >>> d00 == d01 False >>> d88 = decimal.Decimal('0.' + '8' * 10000) >>> d89 = decimal.Decimal('0.' + '8' * 9999 + '9') >>> d89 - d88 Decimal('1E-10000') >>> d89 > d88 True >>> d89 == d88 False >>> d89 < d88 False
570 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 02:20:23.44 ] なんか、引き算すると28桁までしか精度保証してくれないみたい >>> d1 = decimal.Decimal('1') >>> d9 = decimal.Decimal('9') >>> d1.as_tuple() DecimalTuple(sign=0, digits=(1,), exponent=0) >>> d19 = d1 / d9 >>> d19 Decimal('0.1111111111111111111111111111') >>> d19.as_tuple() DecimalTuple(sign=0, digits=(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), exponent=-28) なので、こんな風にしてprecを設定しましょうって書いてあったよ。 >>> from decimal import * >>> getcontext().prec = 6 >>> Decimal(1) / Decimal(7) Decimal('0.142857') >>> getcontext().prec = 28 >>> Decimal(1) / Decimal(7) Decimal('0.1428571428571428571428571429')
571 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 02:56:45.20 ] >>566 正解
572 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 03:40:43.66 ] a=1.0 b=1.0 if round(a,1) <= round(b,1) :
573 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 04:16:43.30 ] >>> f = 0.0 >>> for i in xrange(100): ... f += 0.001 ... >>> f 0.10000000000000007 >>> f = 0.0 >>> for i in xrange(10): ... f += 0.01 ... >>> f 0.099999999999999992 if a <= b : これじゃだめだな
574 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 04:20:39.34 ] >>560 Fortranならうまくいくのか?バグ増産してたんじゃね? >>> f = 0.0 >>> for i in xrange(10): ... f += 0.01 ... >>> f 0.099999999999999992 >>> f - (1e-30) 0.099999999999999992 >>> f = 0.0 >>> for i in xrange(100): ... f += 0.001 ... >>> f 0.10000000000000007 >>> f - (1e-30) 0.10000000000000007
575 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 07:44:05.77 ] eps=1e-30 とかじゃなく、その言語が提供している定数使おうぜ Fortranはしらんけど、Pythonはこう、 >>> sys.float_info sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1) >>> sys.float_info.epsilon 2.220446049250313e-16 >>> a = 1.0 - sys.float_info.epsilon >>> b = 1.0 >>> a <= b True >>> a == b False
576 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 11:39:34.94 ] 比較の不等号を反転させて、その結果のnotをとればいいじゃない
577 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 14:00:29.66 ] はあ? ,,,..-‐‐‐-..,,, /::::::::::::::::::::::::ヽ _,..-‐‐-..,,, l::;;-‐‐-:;;::::::::::::ヽ//-‐,,__ /:::::::::::::::::::::ヽ l:l ヽ:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ ヽ / :::::::::::::::::::::::::::::::::::::;-'^~~^'‐;;:l ~ヽ/ ::::::::::::::::::::::::::U::ヽミ .ll / / ̄^ヽ ::::::::::::::::::::::U:::ヽ ,.ノ ∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧ / | ・ .| :/ ̄^ヽ:::::::l'^~ .< ‐/-,, ヽ,_,,ノ | ・ |:::::::l < l ~^'' `‐' ヽ.,_,,ノ :l < | ヽ / ̄ ̄\ '''l^^~~~ / ̄ ̄ヽ -‐‐‐--l- < | ヽ __ | ヽ、 ,,,, | |||!|||i||!| | ~^'‐..,,_/ < / \ |ノ ―――― / / (:::::} | | |ll ll !!.| | ,,,, イ~''' < / \ 丿 アアァァ | l: ~~ | |!! ||ll| || | {:::::) ::l .< ● l: | | ! | l ~~ l < l、 ヽ`ニニ'ノ ,l> V V V V V V V V V V V V V V V V VV V V V V /^‐-,,____,,,,,,,,..................,,,,,,,__,,,.--ヽ ~‐‐'~ ^'‐‐~
578 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 15:19:08.35 ] >>> float(numpy.finfo(numpy.float32).tiny) 1.1754943508222875e-038 >>> float(numpy.finfo(numpy.float64).tiny) 2.2250738585072014e-308 >>> float(numpy.finfo(numpy.double).tiny) 2.2250738585072014e-308
579 名前:デフォルトの名無しさん [2012/02/22(水) 01:27:16.78 ] これで machine epsilon は求まりますか? f = 1.0 while f != f / 2.0: f /= 2.0 print f
580 名前:デフォルトの名無しさん [2012/02/22(水) 01:28:35.01 ] 訂正 f = 1.0 while f != f / 2.0: f /= 2.0 print f
581 名前:デフォルトの名無しさん [2012/02/22(水) 05:13:48.78 ] 正規表現である文字を大文字にするとき、どう書けばいいんでしょうか 文字列'foobar'の'o'を'O'に変換 ※perl my $s = 'foobar'; $s =~ s/(o)/\u$1/g; print $s; #=>'fOObar' ※python s = 'foobar' × s = re.sub(r'(o)', r'\u\1', s) × s = re.sub(r'(o)', '\\1'.upper(), s)
582 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 05:30:31.59 ] re.sub('o', lambda m: m.group().upper(), s)
583 名前:581 [2012/02/22(水) 05:58:51.72 ] >>582 マッチオブジェクトを受け取る関数をsubの第2引数にできるんですね。 マニュアルを見るとsubの第2引数は文字列または関数となっていますが、実感してませんでした。 メタシンボルの\uは無理としても、式の戻り値が入らないのが不思議でならず、そこで止まってしまってたんですが やっとクリアになりました。ありがとうございます!
584 名前:デフォルトの名無しさん [2012/02/22(水) 08:59:17.97 ] BeautifulSoup 4.0Betaを、Python3.1にインストールしようとして、tar.gzを展開した後 $sudo python3.1 setup.py install を実行すると次のエラーで失敗します ------------- (略) running install_lib byte-compiling /usr/local/lib/python3.1/dist-packages/bs4/doc/source/conf.py to conf.pyc File "/usr/local/lib/python3.1/dist-packages/bs4/doc/source/conf.py", line 43 project = u'Beautiful Soup' ^ SyntaxError: invalid syntax ------------- なにか対策はあるでしょうか? pythonはDebian Squeeze標準のpython3.1です
585 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 09:13:54.32 ] 2to3
586 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 09:38:35.52 ] >>585 tar.gzを展開した場所で $ find ./ -name *.py -exec 2to3 -w {} \; のあと $ sudo python3.1 setup.py install を実行したら問題なくインストールできました! このツールをすぐ使おうとしてpythonを始めたもので…… ありがとうございました
587 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 09:56:49.02 ] 2.7も入れて使い分けたらいいんじゃねーの
588 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 06:50:22.36 ] Udacityに参加してる人いる? 俺はプログラミング自体初心者に近いからCS101に挑戦中でふ。
589 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 11:40:58.23 ] コマンド呼び出しと関数呼び出しの両方ができるスクリプトはできないのでしょうか? test_disp.pyは引数を表示する機能があります。 import sys def main(argv='default'): import sys if len(sys.argv) == 2: argv = sys.argv[1] print 'called by command ', argv else: print 'called by module ', argv if __name__ == '__main__': main() これを下記のtest_caller.pyから呼び出して、 import test_disp test_disp.main('./test_disp.py') called by module test_disp.py と表示させたいのですが、'argv' is not definedとなります。 どうすればいいのでしょうか?
590 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:03:25.37 ] 馬鹿には無理
591 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:31:22.87 ] 普通にデバッグしてね
592 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:06:23.08 ] import sys def main(argv='default'): if __name__ == '__main__': # ''' # if len(sys.argv) == 2: # ''' argv = sys.argv print('called by command', argv) else: print('called by module', argv) # if __name__ == '__main__': # print('__main__') main()
593 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:38:05.56 ] >>589 インデントがおかしい def main(): if len(sys.argv) > 1: print ... else: print ... if __name__ == '__main__': main() とかしなきゃだめ
594 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:47:05.07 ] >>593 ,592 ありがとうございました。うまくいきました。 インデントエラーが出てないので、てっきり意図通りになっていると 勘違いしてました。 それにしてもここは、本当にまともな掲示板ですね。 私がよく訪れる仕事関係の板は、ソマリアみたいなところなんで、 びっくりしました。 この板とpythonと回答者に幸あれ。
595 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:54:11.13 ] >>594 うっさい市ね!
596 名前:デフォルトの名無しさん [2012/02/23(木) 16:52:12.56 ] ここまで全部自演
597 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 16:57:16.12 ] むかしはアンチスレが一番まともだったんだが いまはここなのか
598 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 17:26:49.11 ] なんか殺伐として来たな。
599 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 20:27:11.59 ] 対象をよく知ってるアンチほど怖いものはない
600 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 21:27:42.66 ] ソマリアの比喩がなんなのか分からん 悪い意味で言ってるんだろうなーくらいは検討つくけど
601 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:06:39.95 ] >>600 ソマリアつったら海賊問題だろ 海賊仕事関係の板 つまり594は海賊
602 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:47:59.69 ] 糞詰まらんし
603 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:52:14.18 ] ストッパおすすめ
604 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 16:14:26.19 ] 糞が詰まった
605 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 10:31:02.95 ] すみません。 質問させてください。 あるメソッドのテストを行っています。 そのメソッドは引数として整数を一個取り、その整数の範囲は1~100とします。 そのため、テストとして0や101を入れると例外が返ってくることを期待するテストを作ることを考えています。 しかし、そのときふと思ったのですが、引数の型が整数に限定されている場合、引数の型チェックも行うべきなのでしょうか? 今までJava、C#しか経験していないため、変数に型が無い言語でどのようにすべきなのか良くわかりません。 初心者丸出しの質問かもしれませんが、よろしくお願いいたします。
606 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 10:36:27.55 ] >>605 isinstanceを使うんだが、テストについてはこのリンクが極めておすすめ Python3だけど 第9章. ユニットテスト diveintopython3-ja.rdy.jp/unit-testing.html
607 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:08:47.13 ] その程度だったら、 assert isinstance(a, int) and 1 <= a <= 100 って一番最初に書いといて、以降はその仕様は忘失の彼方だな・・・
608 名前:デフォルトの名無しさん [2012/02/25(土) 13:17:07.38 ] >>606 情報ありがとうございます。 リンク先を読ませていただきましたが、一般的なTDDの説明かと思いました。 いまいち、変数に型がないことによるメリットがわかりませんでした。 その辺をわかりやすく解説してあるサイトなどありましたら、教えていただけると助かります。 よろしくお願いいたします。
609 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:27:16.06 ] 30 30 28カ所 約28カ所 約28箇所 不明 のような文字が1行づつに入力されたテキストファイルがあるのですが、 これから数字のみを抜き出したいと考えているのですが、どのようにすればよいでしょうか? 数字だけであれば全角文字をifで半角数値に置換すればいいかと思うのですが、 それ以外の文字を削除する方法が思いつきません。
610 名前:609 mailto:sage [2012/02/25(土) 13:28:55.66 ] すみません 書き漏れがありました 40箇所か39カ所 のような2つ数字が現れる文字もあるかもしれません。 その場合は最初に出てきた数次だけ抜き出したいです
611 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 14:04:53.49 ] 正規表現を使って最初に出てきた数字だけをリストに放り込んでいくのはダメなん?
612 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:05:45.24 ] import re with open('tech509.txt') as f: for l in f: l = l.rstrip() print('l =', l) # num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)+', l) # or num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)', l) if num_str: print('num_str =', num_str.group()) print() tech509.txt aaaaa30お前のカーチャンでーべそw あいうえお30お前のカーチャンでーべそw かきくけこ28カ所お前のカーチャンでーべそw mmmmmm約28カ所お前のカーチャンでーべそw fed@@@@約28箇所お前のカーチャンでーべそw mふぃfじゃいえいえいふぉえ不明お前のカーチャンでーべそw ffieie40箇所か39カ所お前のカーチャンでーべそw
613 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:06:37.24 ] 609でしたーざんねーん 無念、無念の誤読〜
614 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:14:07.22 ] ちゃんと仕様を確認していませんでした。 はいはい、どうもすいませんっした。 import re with open('tech609.txt') as f: for l in f: l = l.rstrip() print('l =', l) # num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)+', l) # or num_str = re.findall(r'((約|か)?([0-90-9]+)(箇所|カ所)?|不明)', l) if num_str: print('num_str[2] =', num_str[0][2]) # print('num_str =', num_str) print()
615 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:20:54.26 ] はいはい、これで完璧っすかね 何回もやり直してすいませんっした import re with open('tech609.txt') as f: for l in f: l = l.rstrip() print('l =', l) # num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?|不明)+', l) # or num_str = re.search(r'(約|か)?([0-90-9]+)(箇所|カ所)?|不明', l) if num_str.groups()[1]: print('num_str.groups()[1] =', num_str.groups()[1]) # print('num_str =', num_str) print()
616 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:31:23.89 ] なんで最初の一個だけでいいの? 別に言わなくてもいいんだけどさ。 私の感覚的にはnumsが正解なんだけど。 import re with open('tech609.txt') as f: for l in f: l = l.rstrip() print('l =', l) num_str = re.search(r'((約|か)?[0-90-9]+(箇所|カ所)?)|不明', l) # or if num_str.groups()[1] or 1: print('num_str.groups()[1] =', num_str.groups()) # print('num_str =', num_str) num_str = re.findall(r'(約|か)?([0-90-9]+)(箇所|カ所)?|不明', l) if num_str: print('num_str =', num_str) nums = [tup[1] for tup in num_str] print('nums =', nums) print()
617 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 18:38:10.70 ] ここだけ nums = [tup[1] for tup in num_str if tup[1]] ↑に修正だわ
618 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 19:36:47.47 ] 「数字だけを抜き出す」のが要望としか読めないんだけど、他の文字をマッチングさせてるのはなぜだろう
619 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 19:41:57.51 ] 〜カ所という形式でなく、 一、関係ない場所で20日、98度などといった形式での数値があると予想できる 二、仕様変更に対する耐性をつけておくため 三、自分でも必要とする時があるかもしれないので自分の感覚通りのものを拵えておいた
620 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 20:07:07.43 ] #Python 2.7 import re, codecs r = re.compile(u'[01234567890123456789]+') f = codecs.open('test.txt', 'r', 'utf-8') l = f.readlines() f.close() n = [re.search(r, s).group(0) if re.search(r, s) else '' for s in l] for s in n: print s
621 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 20:22:35.78 ] そういえば、スタックとヒープを可視化しながらPythonコードを1行ずつ実行してくれる、初心者向け素敵Web実行環境は既出ですか? ttp://people.csail.mit.edu/pgbovine/python/tutor.html#mode=edit
622 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 20:42:50.00 ] pdb使ったらいいんちゃうん? あと、>>621 のいうスタックは、localsのことだろうと思う。
623 名前:デフォルトの名無しさん [2012/02/25(土) 21:36:24.88 ] pythonでクラス作っていますが、インスタンス変数、クラス変数へのアクセス制御(private,publicなど)はどうすればいいのですか?
624 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 22:16:26.99 ] property _underscore_name
625 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 23:02:08.02 ] >>624 ありがとうございます。 命名規則で対処できたんですね
626 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 01:12:10.81 ] そういうお約束にしましょうよって話。 まあ、これくらいは読んでおいてね。 Python のコーディングガイド PEP8 - 日本語訳 www.oldriver.org/python/pep-0008j.html メソッド名とインスタンス変数 関数の場合と同じルールを使う。lowercase 方式で命名し、可読性を上げ るためにアンダースコアで単語を区切る。 非公開なメソッドとインスタンス変数にのみ、先頭にアンダースコアを1 つ使って命名する。 ....省略されました。続きを読むにはワッフルワッフルと入力して下さい。 継承のための設計 クラスのメソッドやインスタンス変数(つまり「属性」)を公開すること の是非を、常に考慮する。どちらがいいか分からないときには、非公開に する。公開属性を非公開にするよりも、非公開属性を公開にするほうが容 易である。 公開属性にするということは、あなたのクラスを他人が使うことを想定し、 将来の非互換性を避けることを約束したということだ。非公開属性にする ということは、他人が使うことを想定しておらず、変更したり削除したり するかも知れないということだ。 ....省略されました。続きを読むにはワッフルワッフルと入力して下さい。 あと、最低でもこれ一通り読め。 diveintopython3-ja.rdy.jp/index.html
627 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 01:57:11.94 ] >>622 グローバルなのも表示されとるよ。 デバッガ使えば似たようなことできるのは知ってるが、 初心者でも手軽に使えそうだし、特にmutable, immutable関連での頻出の質問に対する かなり明確な答えになると思われるし、初心者向きスレには需要あるかと思って貼ってみた。
628 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 03:21:30.42 ] >>623 アクセス制御なんてない
629 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 09:58:23.94 ] >>626 了解。 まずは、勉強させてもらいます。 >>628 pythonにカプセル化とかの概念はないのですか?
630 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 10:02:01.50 ] 概念はあるでしょ。 言語仕様で縛るか、お約束でやるかの違い。
631 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 13:10:45.72 ] 透明どころか手を中に突っ込めるカプセル
632 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 13:55:27.36 ] こういうシンプルな書き方ってできないのですか? for x in a_list if a_condition(x): do_something(x) こう書けるのはわかりますが、filter とか lambda とか面倒で気に入らない for x in filter(lambda x: a_condition(x), a_list): do_something(x) こう書けるのもわかりますが、無駄に冗長でウンコ臭い for x in [x for x in a_list if a_condition(x)]: do_something(x)
633 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:03:43.20 ] for x in a_list: if a_condition(x): do_something(x)
634 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:06:25.76 ] def is_odd(n): return n % 2 a_list = [i for i in range(10)] for x in filter(is_odd, a_list): print(x, 'is odd.')
635 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:14:31.83 ] >>633-634 やっぱりそういう書き方しかないですか? >>633 それ do_something(x) が複数の文になるとインデント2段になりますよね >>634 a_condition(x) をいちいち関数定義するのは面倒ですね
636 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:30:07.95 ] >>632 の一番上は分かりにくくないかい? continue使えば?ってなりそうな気がした。 def is_odd(n): return n % 2 a_list = [i for i in range(10)] for x in a_list: if not is_odd(x): continue print(x, 'is odd.')
637 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:35:54.48 ] >>636 うーん。もし書けるなら、これの方が for x in a_list if is_odd(x): print(x, 'is odd.') これより簡潔で分かりやすいと思うんだけど for x in a_list: if not is_odd(x): continue print(x, 'is odd.')
638 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 15:12:04.71 ] そうかもなあって思っちゃってる。 continueがない分いいってか。 うーん、、、 for x in a_list if is_odd(x): for x in filter(is_odd, a_list): 上2つは等価なfor文だけど、 修正が大変とかで上の文法は採用されなかったんだろか。 上の方を満たすためにfilter()用意したんじゃないかな? って思ってる。 ここは我慢してPythonに合わせるしかないんじゃないの? 話を元に戻して、 > こういうシンプルな書き方ってできないのですか? > for x in a_list if a_condition(x): > do_something(x) ↓って言われちゃう。できないっぽいねぇ for x in a_list if is_odd(x): ^ SyntaxError: invalid syntax
639 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 15:21:18.40 ] >>638 >修正が大変とかで上の文法は採用されなかったんだろか。 SyntaxError: invalid syntax ってなることからわかるように、 文法を変えないといけないからでしょ。 特定の場合に便利だからといって、どんどん文法を増やすと それ以外の場合に却って使いにくくなったりするからねぇ。
640 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 15:51:17.81 ] 書ける for x in a_list: if is_odd(x): print x 書ける for x in a_list: if is_odd(x): print x 書けない for x in a_list: if is_odd(x): print x
641 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 17:15:20.82 ] もうpythonじゃなくていいんじゃないの? 自分の好きな書き方が出来る言語を探せばいい 無ければ作ろう
642 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 17:55:55.38 ] お断りします お断りします お断りします ハ,,ハ ハ,,ハ ハ,,ハ ハ,,ハ ( ゚ω゚ )゚ω゚ )゚ω゚ )゚ω゚ ) お断りします / \ \ \ \ お断りします ((⊂ ) ノ\つノ\つノ\つノ\つ)) お断りします (_⌒ヽ ⌒ヽ ⌒ヽ ⌒ヽ お断りします ヽ ヘ } ヘ } ヘ } ヘ } ε≡Ξ ノノ `Jノ `J ノ `J ノ `J
643 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 18:46:27.49 ] なくなるなら宝石が先
644 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 19:03:06.98 ] >>643 いや 641は632に対してね
645 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 22:15:44.71 ] いろいろ考えたけど 内包表記やラムダなどを駆使して関数的に美しく書くなんてのは Python では目指さない方が良さそうだというところに落ち着いた やって出来ない事はないけど、やっぱり関数型言語ではないので 関数的なスタイルで読みやすいコードを書くのは難しい。 凝ったことはせずに 素直に手続き的に書いて関数も一つ一つ def する というのが Python のコツっぽいかな?
646 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 22:39:15.16 ] >>626 リンクのdive into python3はまとまっていてわかりやすそうかと思いました python3を対象としていますが、今からpython勉強する場合は3がいいでしょうか? なんか、ネット徘徊していると、2を勉強すべしとの意見も多いので困っています よろしくお願いいたします
647 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 22:57:21.03 ] どっちかで迷うくらいなら、3系がいいと思うよ。 私は3系のみ勉強している。 2系を折角勉強したのに、3系では邪魔知識になるとか嫌でしょ。 既存のPythonの資産を使いたいとかなら、 2系の勉強も考えた方がいいかも知れないけど、 そうじゃないなら3系からの勉強でいいと思う。 >>646 が、Pythonをなぜ使いたいのかが一番大きい。
648 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 06:28:08.91 ] Python3の現時点のデメリットは対応ライブラリが少ないくらいで至急何か作る必要がなければ困らないと思うよ Python2は文字コードべったりなんでunicodeの暗黙の変換とかかなり分かりにくい
649 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 08:06:32.98 ] 勉強するだけなら Python 3 でも構わないかもね。 現実に使うのは厳しいが。
650 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 08:12:40.46 ] どうしても、本人がどうしたいかになるんだよね。
651 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 11:53:03.88 ] u"3だと日本語書くためにいちいちuつけなくていいから楽"
652 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 12:08:34.16 ] 全角だし
653 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 19:57:44.25 ] つ[from __future__ import unicode_literals]
654 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 22:12:03.40 ] >>649 目的が勉強だけって… それはプログラミングやる意味ないんじゃ…
655 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:00:49.73 ] 勉強の意味が 数学や英語の学業としての勉強じゃなくて、 学んでいるという意味の勉強じゃないのかな?
656 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:04:47.16 ] プログラム言語なんてその言語特有のお約束を覚えればいいだけじゃん 制御構文や変数はどの言語だって共通してるし つまり
657 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:06:42.91 ] >>647 単純に、Linuxのソフトウェア調べる仕事していて、pythonのコードに出くわすことが多かったからです 今現在のLinuxで動いているpythonとすると2系が多いですかね 個人的には3が勉強したいですけど
658 名前:デフォルトの名無しさん [2012/02/27(月) 23:24:21.45 ] Python製のフレームワークって今何がHOTなの?
659 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:28:07.90 ] >>657 両方勉強するのはだめなの?
660 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:41:16.90 ] ライブラリの多さがpythonの利点なんだし Python3なんて選択肢に入らない
661 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:47:18.01 ] 最初はどっちかに絞った方がいいと思ます。 二兎追うものは一兎も得ず っていうじゃないですか。 どちらも理解できれば一番いいけど、そう上手くいくかな? > Linuxのソフトウェア調べる仕事していて、pythonのコードに出くわすことが多かったからです 今度は、どんな目的で調べているかによる。なんつって。 範囲が広いんだよねー。 中身を読んでるってことですよね。 ふむ。 改良や開発目的で調べてるの? そのソフトウェアの開発者達が、 後継の開発を2で行うって言ってるんなら、2の勉強だろうし、 3で行うってのが多勢なら3だろうし。
662 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:07:28.87 ] smtplibについて質問させてください。 会社のメールサーバーに対して > telnet XXX.XXX.XXX.XXX 25 を実行するとうまくつながるのですが、 以下のように実行するとエラーが発生します。 原因が何かヒントをいただけないでしょうか。 import smtplib s = smtplib.SMTP('XXX.XXX.XXX.XXX', 25) c:\test\python Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win 32 Type "help", "copyright", "credits" or "license" for more information. >>> import smtplib >>> s = smtplib.SMTP('XXX.XXX.XXX.XXX', 25) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "c:\python27\lib\smtplib.py", line 242, in __init__ (code, msg) = self.connect(host, port) File "c:\python27\lib\smtplib.py", line 302, in connect self.sock = self._get_socket(host, port, self.timeout) File "c:\python27\lib\smtplib.py", line 277, in _get_socket return socket.create_connection((port, host), timeout) File "c:\python27\lib\socket.py", line 571, in create_connection raise err socket.error: [Errno 10061] 対象のコンピュータによって拒否されたため、接続できま せんでした。 >>>
663 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:09:29.04 ] >>661 中身は読んでいますけど、ほとんど趣味ですね 会社から要求されているのは単純な使い方と性能のみ でも、個人的に興味持って色々と調べています ま、趣味なんで、3勉強してみます
664 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 00:28:07.37 ] こちらからもちょっと質問させて下さい。 > telnet >>> import smtplib って同一PCかつ同一OSでの実行結果? それぞれの環境でpingがとおることは確認済? まあ、これが答えのような気もするけど。 socket.error: [Errno 10061] 対象のコンピュータによって拒 否されたため、接続できませんでした。
665 名前:デフォルトの名無しさん [2012/02/28(火) 01:20:53.58 ] scipyとmatplotlibが移植されたんで、自分的には3でも結構逝ける。
666 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 01:46:09.75 ] 俺はいつも逝ってる むしろ吊ってるし詰んでる
667 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 05:58:14.65 ] >605 >今までJava、C#しか経験していないため、変数に型が無い言語でどのようにすべきなのか良くわかりません。 >608 >いまいち、変数に型がないことによるメリットがわかりませんでした。 型はある 型宣言が無いだけ
668 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 06:05:53.88 ] >632 for x in filter(a_condition, a_list): do_something(x)
669 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 06:14:14.91 ] ワッフル ワッフル
670 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 06:31:08.22 ] >>662 telnetでサーバからのリプライは確認した? 220 <ホスト名> ESMTP Sendmail ... とか返ってくるはずだけど
671 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 06:43:35.75 ] >>670 はい、返ってきました。 これがうまくいっているので、どうしてエラーが起こるのかわからないんです…
672 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 07:13:17.56 ] >>671 となるとちょっとわからない。ごめん wiresharkでも使ってtelnetとsmtplibの通信内容を比べてみては
673 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 07:17:43.69 ] wiresharkじゃなくてdebug設定では
674 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 07:30:31.34 ] -v -vvv
675 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 07:37:01.98 ] >>667 メリット教えてやれよ
676 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 09:38:41.68 ] >>675 ダックタイピングができる
677 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 16:14:31.80 ] >>667 値に型があるんであって、変数に型はないでしょ
678 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 16:31:13.65 ] 変数はオブジェクト型またはプリミティブ型もしくはNoneです
679 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 17:53:02.28 ] Pythonにはプリミティブ型なんて無い。 Noneもただのオブジェクト。
680 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 18:15:00.11 ] pythonにはオブジェクトしかない お前もオブジェクトにしてやろうか
681 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 21:05:46.33 ] ひぃいぃ
682 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 21:27:45.80 ] ジェクジェクにしてやろう
683 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 21:29:29.76 ] 壊れてすっかり職場のオブジェ
684 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 23:04:10.42 ] >>671 [Errno 10061] は、WSAECONNREFUSED のことだろうから、 接続先のサーバーで smtp サーバーが動作していない (正確には、 該当のポートをリッスンしている奴がいない) ことを示している。 本当に、telnet と同じサーバーに繋ぎにいこうとしてる? もしくは、s = smtplib.SMTP('XXX.XXX.XXX.XXX', 025) なんてしてないよね?
685 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 23:16:28.49 ] >>684 > もしくは、s = smtplib.SMTP('XXX.XXX.XXX.XXX', 025) なんてしてないよね? これはどうしてダメなんですか? 025のゼロがダメなんでしょうか。すいません。
686 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 23:57:53.76 ] >>685 8進数だから
687 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 00:25:20.84 ] >>> s = smtplib.SMTP('XXX.XXX.XXX.XXX', 25) Traceback (most recent call last): ... から見るにそんなことはしていなそうでしたが。 同一PCかつ同一OSでの実行結果? それぞれの環境でpingがとおることは確認済? とりあえず、pingは通りましたが送信できずに困ってますとかって言って欲しい。
688 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 03:55:30.51 ] 良心的に見て >>> s = smtplib.SMTP('192.168.080.025', 25) とかがアウトっていう意味か ping が通ったからと言って telnet (IP) 25 が通る保障はどこにもない
689 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 03:58:36.06 ] そしてpingが通らなくてもSMTP接続出来ることなんていくらでもある
690 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 05:48:42.36 ] そして>662を読めといいたい
691 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 07:00:15.35 ] こういう話だったらいいなあ ja.wikipedia.org/wiki/Outbound_Port_25_Blocking 以下smtplib.SMTPでもdebuglevelが使えるようなので 今回の件には役に立ちそうにないけど一応 import smtplib smtplib.SMTP.debuglevel = 1 con = smtplib.SMTP(hostname, 25) ... debug情報がずらずら ...
692 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 14:21:38.30 ] クライアントの PC は同じ環境からアクセスしてんのかな あと telnet するときの IP と smtplib.SMTP するときの IP ( XXX.XXX.XXX.XXX の部分 ) は本当に同じなのかな
693 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 22:21:00.17 ] pythonでインスタンスのアドレスを知る方法ってないんでしょうか? ずっと勘違いしてて id でアドレス表示してるのかと思ったら 全然そんなことないですよね id の仕様を見ても「識別子」としか明言してなくてアドレスだとは一言も言ってないし
694 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 22:38:44.02 ] help(id)
695 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 23:35:05.47 ] あってるよ Python/bltinmodule.c [926/2392行][38%] static PyObject * builtin_id(PyObject *self, PyObject *v) { return PyLong_FromVoidPtr(v); } PyDoc_STRVAR(id_doc, "id(object) -> integer\n\ \n\ Return the identity of an object. This is guaranteed to be unique among\n\ simultaneously existing objects. (Hint: it's the object's memory address.)");
696 名前:デフォルトの名無しさん [2012/03/01(木) 15:22:17.92 ] あってるね
697 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:48:39.27 ] (1) (2) (3) を同じPC(Windows XP)で実行しました。 スクリプトからの接続を拒否する仕組みってあるのでしょうか? ----------------------------------------------- (1) pingを実行した場合、以下のように成功します。 c:\test>ping 100.100.100.100 Pinging 100.100.100.100 with 32 bytes of data: Reply from 100.100.100.100: bytes=32 time<1ms TTL=63 Reply from 100.100.100.100: bytes=32 time<1ms TTL=63 Reply from 100.100.100.100: bytes=32 time<1ms TTL=63 Reply from 100.100.100.100: bytes=32 time<1ms TTL=63 Ping statistics for 100.100.100.100: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms
698 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:49:08.93 ] ----------------------------------------------- (2) telnet を実行した場合、以下のように成功します。 c:\test>telnet 100.100.100.100 25 220 xxx.xxx.co.jp ESMTP Postfix
699 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:50:13.53 ] ----------------------------------------------- (3) pythonを以下のように実行するとエラーが出ます。 c:\test>python Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win 32 Type "help", "copyright", "credits" or "license" for more information. >>> import smtplib >>> smtplib.SMTP.debuglevel=1 >>> con = smtplib.SMTP('100.100.100.100', 25) connect: ('100.100.100.100', 25) connect: (25, '100.100.100.100') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "c:\python27\lib\smtplib.py", line 242, in __init__ (code, msg) = self.connect(host, port) File "c:\python27\lib\smtplib.py", line 302, in connect self.sock = self._get_socket(host, port, self.timeout) File "c:\python27\lib\smtplib.py", line 277, in _get_socket return socket.create_connection((port, host), timeout) File "c:\python27\lib\socket.py", line 571, in create_connection raise err socket.error: [Errno 10061] 対象のコンピュータによって拒否されたため、接続できま せんでした。 >>>
700 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:52:26.58 ] 単にファイアウォールにひっかかってるだけじゃないの?
701 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:54:28.83 ] >>698 この先に進もうとしようとすると同じように失敗しない? telnetでどうやってメール送れたの? 受信確認はどうやったの?
702 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:42:02.63 ] >>700 例えばノートンなんかに (telnet.exeの通信は止められていないけど) python.exeの通信が止められてる可能性があるってことか
703 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 02:22:05.12 ] ファイアウォールというかセキュリティソフトのチェックかもな telnet.exe は既に許可ソフトに登録済みなのを自分で忘れてるだけだろ
704 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 19:39:38.90 ] かもとだろって、両立するの?
705 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 19:54:24.88 ] 自然言語では両立するでしょ。
706 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:24:24.48 ] 嘉本さんのこと言うなー
707 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:31:16.20 ] (馬)鹿本だろう
708 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:36:14.76 ] ぶるるるぁ
709 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:51:13.63 ] webページをダウンロードして内容をファイルに書くところで詰まってるんだけど、 Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> open('D:\P/output.txt', 'w').write(mainline) TypeError: expected a character buffer object と出るんだけどどうしたらいいの書き込もうとする文字列が一定以上の量だとエラー出る感じだけど
710 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 21:21:04.13 ] type(mainline) 確認してみたら? 文字数が変わると内部でmainlineのtype変えてるんじゃないの?
711 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 21:40:50.14 ] import StringIO open('D:\P/output.txt', 'w').write(StringIO.StringIO(mainline).getvalue())
712 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 23:37:00.57 ] >>699 >connect: ('100.100.100.100', 25) >connect: (25, '100.100.100.100') なんで二行でるんだ? とりあえず、con = smtplib.SMTP('100.100.100.100') で試してみて。 >>700 多分、それはない。 もし、そうなら、10060 (WSAETIMEOUT) になるはず。
713 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:34:59.65 ] >>701 今日試しました。 telnetでメールが送信できました。 以下のサイトを参考にました。 www.nurs.or.jp/~telnet/smtp.html 受信はメールソフトを使いました。 なんでだめなのか、さっぱりわかりません。
714 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:38:30.40 ] >>712 何度かためしましたが、確かに二行が表示されます。 > とりあえず、con = smtplib.SMTP('100.100.100.100') で試してみて。 やりましたが、結果は全く同じです。 ひとつわかったことがあります。 IPアドレスを100.100.100.100じゃなくて、でたらめな値に変えても全く同じエラーが発生します。 telnetを使って100.100.100.100 でメール送信できたので、ipアドレスが間違っていることはありません。 smtplib のソースにデバッグコードを埋め込んでどこまでうまく動いているか、切り分けするしかないんでしょうか。
715 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:44:54.17 ] ファイアウォールというかセキュリティソフトのチェック telnet.exe は既に許可ソフトに登録済みなのを自分で忘れてるだけ
716 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:54:29.66 ] 多分PCから出れてないわ みんながいうようにファイア・ウォールが原因だと思うぞなもし 一度ファイア・ウォール、セキュリティ関係諸々を停止させてから試してみなよ そしたら上手くいくと思う
717 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:57:53.99 ] localhost, 127.0.0.1だったらうまくいくんだっけか?
718 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:58:29.82 ] 職業別の人気順位 (an・an調べ) xbrand.yahoo.co.jp/category/lifestyle/7380/1.html 1位 システムエンジニア 2位 公務員 3位 銀行&商社マン 4位 警察・消防・自衛官 5位 マスコミ・営業マン・広告マン 6位 企業経営者 7位 医師 8位 弁護士、公認会計士
719 名前:デフォルトの名無しさん [2012/03/03(土) 00:59:02.50 ] 馬鹿には無理