1 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 10:24:06 ] Pythonが嫌いな人のためのスレッドです。 ■関連スレ Rubyについて(アンチ専用) Part002 pc11.2ch.net/test/read.cgi/tech/1200210768/
113 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:49:27 ] >>112 import turtle
114 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 20:12:10 ] coreblog.org/ats/turtle-python-standard-module
115 名前:99 mailto:sage [2008/02/27(水) 20:46:24 ] Pythonにgotoがない時点で終わってると思います。 また安易にErrorキャッチに頼りやすい。 何が try except だ。楽すぎて死ねるわ。 しかも最初からpdbなんていうデバッガもどきがついてるし
116 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:33:19 ] goto for Python ttp://entrian.com/goto/
117 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:23:25 ] PLAY文が無い限りBASICには勝てない
118 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:26:54 ] PyAudio The following only summarizes information from the PyAudio Web page. PyAudio provides Python bindings for the PortAudio audio I/O library. The current version of PyAudio is V0.1.0, which is alpha quality. Multi-platform Package is compilable for MS-Windows, Apple Mac OS X, Linux and cygwin. Real-time sound acquisition Unknown Support for 16KHz sampling rate and >8-bit sound Unknown. Sound file processing Unknown. Efficiency Unknown. Pitch existence and frequency Unknown. Formants and their bandwidths Unknown. FFT with pre-emphasis and Hamming window Unknown. Power Unknown.
119 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:27:49 ] PyMedia.py The documentation is very sketchy. Multi-platform Package is compilable for MS-Windows, Linux and cygwin. Real-time sound acquisition Unknown Support for 16KHz sampling rate and >8-bit sound Probably depends upon sound card. Sound file processing Yes. Efficiency Unknown. Pitch existence and frequency Use another package for this. Formants and their bandwidths Use another package for this. FFT with pre-emphasis and Hamming window Use another package for this. Power Use another package for this.
120 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:28:12 ] MCI.py (from Arik Baratz) together with ctypes.py Multi-platform ctypes.py is supported by all 32-bit MS Windows (95/98/NT/2000/XP), All BSD Platforms (FreeBSD/NetBSD/OpenBSD/Apple Mac OS X), All POSIX (Linux/BSD/UNIX-like OSes), WinCE. MCI.py was designed to communicate with MS-Windows winmm.dll. Real-time sound acquisition Unknown. Support for 16KHz sampling rate and >8-bit sound Unknown. Sound file processing Seems to be able to record to a file. Efficiency Commands are sent as strings. Pitch existence and frequency Use another package for this. Formants and their bandwidths Use another package for this. FFT with pre-emphasis and Hamming window Use another package for this. Power Use another package for this.
121 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:28:45 ] ossaudiodev Multi-platform Not enough. Implemented in Linux and FreeBSD. Available for a wide range of open-source and commercial Unices. But apparently not for MS-Windows. Real-time sound acquisition Blocking reads, by default. Probably can set to non-blocking. Support for 16KHz sampling rate and >8-bit sound Seems to depend upon the sound card. Sound file processing Use another package for this. Efficiency Direct I/O access. Pitch existence and frequency Use another package for this. Formants and their bandwidths Use another package for this. FFT with pre-emphasis and Hamming window Use another package for this. Power Use another package for this.
122 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:29:15 ] Snack Multi-platform The same scripts are usable on Windows 95/98/NT/2K/XP, Linux, Macintosh, Sun Solaris, HP-UX, FreeBSD, NetBSD, and SGI IRIX. Real-time sound acquisition Yes. Support for 16KHz sampling rate and >8-bit sound Yes. Sound file processing Yes. Efficiency Inefficient - data is converted into string by the Tcl part of the package and then converted back into data by the Python part. Pitch existence and frequency Yes. Each 10mSec, using the ESPS method (the ADMF method is available, too). Formants and their bandwidths www.speech.kth.se/snack/man/snack2.2/tcl-man.html#sound - see the formant subcommand. FFT with pre-emphasis and Hamming window See above link - the powerSpectrum subcommand. Power See above link - the power subcommand.
123 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:31:57 ] wiki.python.org/moin/PythonInMusic
124 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:50:00 ] は?
125 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:53:29 ] PUT文がないとゲーム作れないじゃん。 馬鹿言語かよ>PYTHON
126 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:37:52 ] Pythonにはブレースが採用されないから いつまでたっても糞言語。
127 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 09:51:38 ] ブレースなんてえーだらー
128 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 09:54:41 ] 我ながら全くどうでもいい書き込みだ
129 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:33:58 ] 乳thon
130 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 07:01:07 ] news24.2ch.net/test/read.cgi/news5plus/1204187397/
131 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 04:40:26 ] UTF-8で保存されているファイルをEUCに変換したくて次のような症状が出ています 元ファイルに含まれている「」という文字のところで止まってしまうようです (この文字がなければ正常に変換出来ました) 最初はこちらを試しました ifp = open(src, 'rb') ofp = codecs.getwriter('euc-jp')(open(dst, 'wb+')) ofp.write(ifp.read().decode('utf-8')) UnicodeEncodeError: 'euc_jp' codec can't encode character u'\u9ad9' in position 163: illegal multibyte sequence その後こちらも試しましたが却って訳が分からなくなりました ifp = codecs.getreader('utf-8')(open(src, 'rb')) ofp = codecs.getwriter('euc-jp')(open(dst, 'wb+')) ofp.write(ifp.read().decode('utf-8')) UnicodeEncodeError: 'ascii' codec can't encode character u'\u9ad9' in position 1 63: ordinal not in range(128) どう書けば正しく変換出来るのでしょうか?
132 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 04:44:51 ] ifp = codecs.getreader('utf-8')(open(src, 'rb')) ofp = codecs.getwriter('euc-jp')(open(dst, 'wb+')) ofp.write(ifp.read().encode('euc-jp')) これもだめでした
133 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 05:02:42 ] >>131 あきらめろ hoge = u'' print hoge.encode('euc-jp') UnicodeEncodeError: 'euc_jp' codec can't encode character u'\u9ad9' in position 0: illegal multibyte sequence
134 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 07:29:25 ] Pythonではしごだかをどう扱うよって話だね どういう対処法があるのかwktk
135 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 07:39:48 ] python固有の問題でもないと思うが、 hoge.encode('euc-jp', 'replace')でもしとけば
136 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 09:54:38 ] >>131 UTF-8では表せるけどEUC-JPでは表せない文字というのが山ほどあって はしごだかはそのひとつ。完全には変換できないです。 読み書きしているファイルが実は HTML や XML だとしたら xmlcharrefreplace エラーハンドラが便利かも。 >>> import codecs >>> ifp = codecs.open("input.txt", "r", encoding="utf-8") >>> ofp = codecs.open("output.txt", "w", encoding="euc-jp", errors="xmlcharrefreplace") >>> ofp.write(ifp.read()) >>> ifp.close() >>> ofp.close()
137 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 16:07:09 ] >>136 ビンゴです ありがとうございました しかし「〜」はEUCにもあるのに「~」になってしまう副作用が出ますね・・・
138 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 16:12:14 ] EUCにコードが無い訳じゃないんだよなぁ fuga = '\xa1\xc1, \xfc\xe2, \xf9\xf5'
139 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 16:15:53 ] >>137 の2つ目の「〜」は「~」でした 読みにくくてすみません
140 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 16:27:28 ] 「〜」は統一されていない ttp://ichi.mo-blog.jp/tedious/2007/05/ ttp://www.mysql.gr.jp/mysqlml/mysql/msg/12432
141 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 16:29:50 ] ttp://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5 ここの「UNICODEに関する問題」を見ると泣けてくる
142 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 16:42:34 ] これみて自分で変換するしかないでしょうね www.ajisai.sakura.ne.jp/~dindi/chrc/ref/wincode2.txt
143 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:21:19 ] >>142 いただいた
144 名前:136 mailto:sage [2008/03/02(日) 03:39:09 ] >>137 「〜」はEUC-JPとUTF-8を相互変換するときのテーブルがOS/言語ごとに違うために 変換できなかったり違うグリフで表示されたりします。 俺はよく使う文字について以下のようなコードでWindows用にそろえてます。 unification = { 0x2014: 0x2015, # HORIZONTAL BAR 0xFF5E: 0x301C, # WAVE DASH 0x2225: 0x2016, # DOUBLE VERTICAL LINE 0x22EF: 0x2026, # HORIZONTAL ELLIPSIS 0xFF0D: 0x2212, # MINUS SIGN 0xFFE0: 0x00A2, # CENT SIGN 0xFFE1: 0x00A3, # POUND SIGN 0xFFE2: 0x00AC} # NOT SIGN text = unicode(...).translate(unification) 136の例では ifp.read().translate(...) とすればよいと思われ。
145 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 04:15:41 ] ごめ、訂正。Windows用にそろえてるんじゃなくて、PythonのEUC-JP/Shift_JIS/ISO-2022-JPコデックが 受け付けるコード値に置換してる、というのが正しいです。 ついでに説明しとくと144のunification(辞書)は、キーはWindowsで日本語入力したときに使われるコード値、 各キーの値はPythonの日本語コデックが受け付けるコード値です。 この8個の文字にOS/言語ごとの変換テーブルの違いが集中しているので、 144の置換をしておくと UTF-8 → EUC-JP/Shift_JIS/ISO-2022-JP 変換時のエラーがだいぶ減るはず。
146 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 06:08:12 ] 蟻が十匹
147 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 09:37:37 ] ありがとうございました ひょっとして梶●さんですか?
148 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 14:14:00 ] hoge = {'a': 4, 'c': 2, 'b': 9} for k,v in hoge.items(): print k,v for k,v in hoge.iteritems(): print k,v なにがちがうんでしょうか?
149 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 14:17:54 ] ここは質問スレではないんだが
150 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 14:29:07 ] >>> hoge = {'a': 4, 'c': 2, 'b': 9} >>> type(hoge) <type 'dict'> >>> type(hoge.items()) <type 'list'> >>> type(hoge.iteritems()) <type 'dictionary-itemiterator'>
151 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 23:21:17 ] (´∀`)ノhoge = dict(enumerate(xrange(1000000)))
152 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:07:32 ] >>> a = {'hoge': 'fuga', 'hige': 'hage'} >>> a {'hige': 'hage', 'hoge': 'fuga'} >>> b = str(a) >>> b "{'hige': 'hage', 'hoge': 'fuga'}" ここで文字列 b から hash を復元して c (= {'hoge': 'fuga', 'hige': 'hage'}) を作りたいのですが どのように書けばよいでしょうか?
153 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:11:56 ] >>> eval(b) {'hige': 'hage', 'hoge': 'fuga'}
154 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:17:50 ] Pythonのアンチスレは質問スレになる不思議 >>152 pickle も調べてみる価値がある、かもしれない オブジェクトをファイルに保存/復元できるライブラリだよ
155 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:40:03 ] >>> a = {'hoge': 'fuga', 'hige': 'hage'} >>> import pickle >>> pickle.dumps(a) "(dp0\nS'hige'\np1\nS'hage'\np2\nsS'hoge'\np3\nS'fuga'\np4\ns." >>> pickle.loads("(dp0\nS'hige'\np1\nS'hage'\np2\nsS'hoge'\np3\nS'fuga'\np4\ns.") {'hige': 'hage', 'hoge': 'fuga'}
156 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 02:39:38 ] そのまま書き出すとこんな感じ? (dp0 S'hige' p1 S'hage' p2 sS'hoge' p3 S'fuga' p4 s. 読みやすいといえば読みやすいし JSONやYAMLに比べると微妙なんだけど このフォーマットって何か由来あるんですか
157 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 02:57:25 ] pickleは人間が編集するようなものではないでしょ フォーマットは pickle.py, pickletools.py あたり?
158 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 03:47:04 ] FORTHっぽいね
159 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 04:31:54 ] >>153 python はこれができるからいいんだよね、 昔 perl でこれと同じ関数を2週間ぐらいかけて作ろうとしてた時に、(リファレンスやら再帰やら使って・・・) python は両方builtin でできると知って、一気にperl 捨てたw
160 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 14:50:49 ] >>> a = {'hoge': 'fuga', 'hige': 'hage'} >>> '%(hoge)s' % a 'fuga' とか、 >>> b = {'moge': a} >>> '%(moge)s' % b "{'hige': 'hage', 'hoge': 'fuga'}" とかは便利なのは分かったんですが、 >>> '%(moge[hoge])s' % b Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'moge[hoge]' >>> "%(moge['hoge'])s" % b Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: "moge['hoge']" ネストされたhashへのアクセスは出来ないんでしょうか?
161 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 15:42:01 ] 出来ない
162 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 15:44:51 ] >>160 代わりにこの辺のTemplate使ってる ttp://pythonpaste.org/tempita/
163 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 16:19:36 ] >>161-162 ありがとうございました おかげでなんとかなりそうです
164 名前:デフォルトの名無しさん [2008/03/15(土) 00:48:44 ] ほのぼのとしたアンチスレだな。
165 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 00:53:23 ] ともすると本スレのほうが殺伐としていて困る
166 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 13:39:38 ] pythonはとっとと、ソート演算子のオーバーライドをサポートしてくれ。
167 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 13:56:08 ] 演算子?
168 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 14:53:55 ] 組み込みクラスの__cmp__()を変更したいとか? 組み込みクラスはオーバーライドできない実装を受け入れて サブクラス化するなりして問題解決した方が精神衛生上よい。
169 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:10:49 ] >>166 引数でラムダ式渡すのでは困る理由は何?
170 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 02:08:27 ] c++ やcommon lispに比べたらモジュールがいろいろ足りない 統計とか数式処理とか 今のままでも便利なんだけど歴史が浅いからね
171 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 06:59:06 ] >>170 scipyとか
172 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 19:44:01 ] C++は老害言語。
173 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 20:40:07 ] 老害か。 N88Basicのことかな
174 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 04:21:42 ] > c++ やcommon lispに比べたらモジュールがいろいろ足りない スクリプト言語では Perl が一番揃ってそうだな 次が Python かな
175 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 08:03:46 ] >>174 >スクリプト言語では Perl が一番揃ってそうだな 数はあるが、玉石混淆で使えるモジュールを選ぶのが大変なのがPerl。
176 名前:デフォルトの名無しさん [2008/03/29(土) 15:27:00 ] ほしゅ
177 名前:デフォルトの名無しさん [2008/03/30(日) 12:24:18 ] age
178 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 07:40:47 ] おまいら、py3kについてはどう思うよ? 俺はclassic style classが使えない時点で見放したが。
179 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 08:36:31 ] どんな書き方ができなくなって嫌だったの?
180 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 11:43:45 ] 単純な書き換えだったら、2to3ツールって言うので自動で変換してもらえるはず
181 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 11:47:31 ] 互換性の無いバージョンだと前からアナウンスしてるんだから、 不要なものはどんどん廃してもらわんと逆に困る。
182 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 12:11:52 ] 後にPerl6と揶揄されるバージョンであった
183 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 00:15:20 ] Perl6と違ってちゃんと予定日が決まってるようだが。
184 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 00:35:13 ] つ4/1
185 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 00:43:17 ] そういやParrotって四月馬鹿が発端なんだよな。
186 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 01:02:26 ] AprilFoolを字面通り四月馬鹿と言うのは誤訳?
187 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 02:48:03 ] 伝統
188 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 07:17:14 ] intとlongの処遇で、現行バージョンと3kの両方で動くようなソースは事実上書けない。 new style classと違って、こちらは突然のdeprecateになる。
189 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 11:29:03 ] たしかu""やexcept文の,とかも3kでは駄目だったよね
190 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 11:48:49 ] Cで書かれたエクステンションはもっとひどい影響を受けるよ。
191 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 23:43:05 ] 互換性切るって言ってるんだから別ソースにしようぜ
192 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 22:22:54 ] Python支持者の隠れ家スレってこちらですか。
193 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 02:18:08 ] そうなんですのよ奥さん なんかのらくらと、まったり批判及びフレンドリーな雑談で収まってます
194 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 20:11:00 ] 表立ってPython批判する奴って少ないんだよなあ。 批判する点も、「ああ、そこ欠点ってわかってますから」というところ ばかりだし。 Guidoのやり方が上手なんだろうね。
195 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 03:44:53 ] 自分の読みたい本を紹介しろということをクエストっていうのか?
196 名前:デフォルトの名無しさん [2008/06/07(土) 03:08:10 ] #!/usr/bin/env python # -*- coding: utf-8 -*- import sys, os, stat import time def main(root): dirsize = {} for dirpath, dirnames, filenames in os.walk(root, topdown=False): dirsize[dirpath] = 0 for file in filenames: tgt = os.path.join(dirpath, file) siz = os.stat(tgt)[stat.ST_SIZE] dirsize[dirpath] += siz for dir in dirnames: tgt = os.path.join(dirpath, dir) siz = dirsize[tgt] dirsize[dirpath] += siz print '"dir","%s",%d' % (tgt, siz) print '"total","%s",%d' % (root, dirsize[root]) if __name__ == '__main__': if len(sys.argv) >= 2: main(sys.argv[1]) これでちゃんと動いていたような気がしたのですが 検索パス中に ▽●▲表 みたいな \5C で終わる ディレクトリが含まれていると中断されてしまいます。 たぶん日本語の問題だろうと思って
197 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 03:10:24 ] #!/usr/bin/env python # -*- coding: utf-8 -*- import sys, os, stat import time def main(root): dirsize = {} for dirpath, dirnames, filenames in os.walk(rootroot.decode('cp932'), topdown=False): dirsize[dirpath] = 0 for file in filenames: tgt = os.path.join(dirpath, file) siz = os.stat(tgt)[stat.ST_SIZE] dirsize[dirpath] += siz for dir in dirnames: tgt = os.path.join(dirpath, dir) siz = dirsize[tgt] dirsize[dirpath] += siz print '"dir","%s",%d' % (tgt, siz) print '"total","%s",%d' % (root, dirsize[root]) if __name__ == '__main__': if len(sys.argv) >= 2: main(sys.argv[1]) のように直したら中断はされなくなったのですが、 hoge.py . > fuga.csv で保存しようとするとエラーになります。 (上のバージョンはリダイレクトは出来ていました。) Python の日本語の扱いが良く分かりません。 Python 嫌いになりそうです。><
198 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 03:16:16 ] 後から貼った方が何か変なので直しておきます。 #!/usr/bin/env python # -*- coding: utf-8 -*- import sys, os, stat import time def main(root): dirsize = {} for dirpath, dirnames, filenames in os.walk(root.decode('cp932'), topdown=False): dirsize[dirpath] = 0 for file in filenames: tgt = os.path.join(dirpath, file) siz = os.stat(tgt)[stat.ST_SIZE] dirsize[dirpath] += siz for dir in dirnames: tgt = os.path.join(dirpath, dir) siz = dirsize[tgt] dirsize[dirpath] += siz print u'"dir","%s",%d' % (tgt, siz) print u'"total","%s",%d' % (root, dirsize[root]) if __name__ == '__main__': if len(sys.argv) >= 2: main(sys.argv[1])
199 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 03:22:05 ] >>197 × rootroot.decode('cp932') ○ root.decode('cp932')
200 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 03:24:12 ] >>198 エラーにならん。 traceback張れ。
201 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 03:50:59 ] 検索パス中に日本語が入っていて hoge.py c:/ > fuga.csv で保存しようとするとエラーになります。
202 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 03:53:38 ] これとか? python.rdy.jp/wiki.cgi?page=%C6%FC%CB%DC%B8%EC site-packageディレクトリにsitecustomize.pyを設置して、文字コードを指定する。 sys.setdefaultencoding('cp932')
203 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 05:34:50 ] >>198 KeyErrorで止まるのならこれで動くんじゃないかと decode()の呼び出しで無駄が多いから調整してね print '"total","%s",%d' % (root.decode('cp932'), dirsize[root.decode('cp932')]) ていうかここアンチスレか
204 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 05:54:35 ] >>201 だからエラーの内容貼れって
205 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:54:49 ] encodeしてないだけだろ
206 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:21:50 ] >>196-201 なにこの大富豪的プログラミングw メモリ喰いまくってるだけで全然終わらないしw
207 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 13:07:50 ] よくわからんが、os.walkをやりたいだけか? docs.python.org/lib/os-file-dir.html
208 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 13:23:12 ] >>197 > Python の日本語の扱いが良く分かりません。 > Python 嫌いになりそうです。>< 標準出力がリダイレクトされていない場合、Python の print 文は 与えられた Unicode 文字列を自動的に cp932 等の実行環境固有のエンコーディングで エンコードして印字するようになっている。これは Python インタプリタを 対話的に利用するときには便利な仕組みだ。「実行環境固有のエンコーディング」が 具体的に何であるかは sys.stdout.encoding を見れば分かる。 一方、標準出力がファイル等にリダイレクトされている場合、 どのエンコーディングで文字列をエンコードすべきかを決めるのは難しい問題だ。 cp932 がいいかもしれないし用途によっては utf-8 や iso-8859-1 の方がいいかも知れない。 つまり、Python の立場からは標準出力をリダイレクトする場合のエンコーディングを これと決めることができない。このことは、標準出力をリダイレクトしているときには sys.stdout.encoding が None になることから分かる。 この場合、print 文は sys.stdout.encoding の代わりに sys.getdefaultencoding() が返す エンコーディングでエンコードして出力する。このエンコーディングは Python の出荷時の 設定では ascii になっているので、日本語等を含む Unicode 文字列を print しようとすると 実行時エラーになる。 結局のところ、標準出力をファイルにリダイレクトできるようにプログラムを書くには sys.stdout.encoding による自動エンコードに頼らないようにしなければいけないということだ。 個人的には、Unicode 文字列をファイルなり標準出力なりに書き出すときは 明示的にエンコードするように心がけるべきだと考えている。暗黙の自動エンコードに 頼るとロクなことがない。
209 名前:208の続き mailto:sage [2008/06/07(土) 13:24:23 ] じゃあ具体的にどうすればいいのかという話だけど、お勧めは次の方法だ。 まず次のように標準出力を適当なエンコーダで包む。 import codecs Writer = codecs.getwriter(sys.getfilesystemencoding()) stdout = Writer(sys.stdout) その上で print 文をすべて次のように書く。 print >>stdout, '"total","%s",%d' % (root, dirsize[root]) この例ではリダイレクトしているか否かに関わらず sys.getfilesystemencoding() の返す エンコーディングでエンコードするようにしている。このエンコーディングは、俺の知る限り 標準出力がリダイレクトされていない場合の sys.stdout.encoding と一致している。 sys.getfilesystemencoding() を使う代わりに、例えば cp932 に決めうちしちゃうとか、 コマンドライン引数で出力エンコーディングを指定するようにするといった方法も考えられる。 標準出力リダイレクト時のエンコーディングをどうするかは用途に強く依存する問題なので こればかりはプログラムを書く人(つまり197さん)が決めるしかない。
210 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:04:17 ] >>209 u'"total","%s",%d'じゃない?
211 名前:210 mailto:sage [2008/06/07(土) 14:14:49 ] ごめん、勘違いしてた str % unicode はunicodeになるからいいのか
212 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:16:34 ] >>211 その辺がマンドクセなんでp3kではbyteとunicodeのみになるんだろうな。
213 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:44:12 ] >>210-211 確かに u"・・・" にすべきだった。指摘ありがとう。 一般論としては u"・・・" にする必要があるかどうかは文字列の中身に依る。 例えば u"・・・" ではなく "・・・" を使って日本語で print >>stdout, '"総計","%s",%d' % (root, dirsize[root]) としたら % 演算子の処理のところで暗黙の string → unicode 変換が起こる。 ソースのエンコーディングと sys.getdefaultencoding() の値によってはエラーになるわけだ。 文字列の中身が ASCII 文字だけなら暗黙の変換が起こってもまず問題ない。 ただ、無駄な変換ではあるし、暗黙の自動変換を避ける方針でやりましょうと言ってる わけだから、やはり u"・・・" にするのが妥当だ。 というわけで>>209 を訂正: 誤: print >>stdout, '"total","%s",%d' % (root, dirsize[root]) 正: print >>stdout, u'"total","%s",%d' % (root, dirsize[root])