Pythonについて(アンチ専用)
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/02/21(木) 10:24:06■関連スレ
Rubyについて(アンチ専用) Part002
http://pc11.2ch.net/test/read.cgi/tech/1200210768/
0153デフォルトの名無しさん
2008/03/07(金) 21:11:56{'hige': 'hage', 'hoge': 'fuga'}
0154デフォルトの名無しさん
2008/03/07(金) 21:17:50>>152
pickle も調べてみる価値がある、かもしれない
オブジェクトをファイルに保存/復元できるライブラリだよ
0155デフォルトの名無しさん
2008/03/07(金) 21:40:03>>> 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'}
0156デフォルトの名無しさん
2008/03/08(土) 02:39:38(dp0
S'hige'
p1
S'hage'
p2
sS'hoge'
p3
S'fuga'
p4
s.
読みやすいといえば読みやすいし
JSONやYAMLに比べると微妙なんだけど
このフォーマットって何か由来あるんですか
0157デフォルトの名無しさん
2008/03/08(土) 02:57:25フォーマットは pickle.py, pickletools.py あたり?
0158デフォルトの名無しさん
2008/03/08(土) 03:47:040159デフォルトの名無しさん
2008/03/08(土) 04:31:54python はこれができるからいいんだよね、
昔 perl でこれと同じ関数を2週間ぐらいかけて作ろうとしてた時に、(リファレンスやら再帰やら使って・・・)
python は両方builtin でできると知って、一気にperl 捨てたw
0160デフォルトの名無しさん
2008/03/08(土) 14:50:49>>> '%(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へのアクセスは出来ないんでしょうか?
0161デフォルトの名無しさん
2008/03/08(土) 15:42:010162デフォルトの名無しさん
2008/03/08(土) 15:44:51代わりにこの辺のTemplate使ってる
ttp://pythonpaste.org/tempita/
0163デフォルトの名無しさん
2008/03/08(土) 16:19:36ありがとうございました
おかげでなんとかなりそうです
0164デフォルトの名無しさん
2008/03/15(土) 00:48:440165デフォルトの名無しさん
2008/03/15(土) 00:53:230166デフォルトの名無しさん
2008/03/15(土) 13:39:380167デフォルトの名無しさん
2008/03/15(土) 13:56:080168デフォルトの名無しさん
2008/03/15(土) 14:53:55組み込みクラスはオーバーライドできない実装を受け入れて
サブクラス化するなりして問題解決した方が精神衛生上よい。
0169デフォルトの名無しさん
2008/03/15(土) 23:10:49引数でラムダ式渡すのでは困る理由は何?
0170デフォルトの名無しさん
2008/03/26(水) 02:08:27統計とか数式処理とか
今のままでも便利なんだけど歴史が浅いからね
0171デフォルトの名無しさん
2008/03/26(水) 06:59:06scipyとか
0172デフォルトの名無しさん
2008/03/26(水) 19:44:010173デフォルトの名無しさん
2008/03/26(水) 20:40:07N88Basicのことかな
0174デフォルトの名無しさん
2008/03/27(木) 04:21:42スクリプト言語では Perl が一番揃ってそうだな
次が Python かな
0175デフォルトの名無しさん
2008/03/27(木) 08:03:46>スクリプト言語では Perl が一番揃ってそうだな
数はあるが、玉石混淆で使えるモジュールを選ぶのが大変なのがPerl。
0176デフォルトの名無しさん
2008/03/29(土) 15:27:000177デフォルトの名無しさん
2008/03/30(日) 12:24:180178デフォルトの名無しさん
2008/04/01(火) 07:40:47俺はclassic style classが使えない時点で見放したが。
0179デフォルトの名無しさん
2008/04/01(火) 08:36:310180デフォルトの名無しさん
2008/04/01(火) 11:43:450181デフォルトの名無しさん
2008/04/01(火) 11:47:31不要なものはどんどん廃してもらわんと逆に困る。
0182デフォルトの名無しさん
2008/04/01(火) 12:11:520183デフォルトの名無しさん
2008/04/02(水) 00:15:200184デフォルトの名無しさん
2008/04/02(水) 00:35:130185デフォルトの名無しさん
2008/04/02(水) 00:43:170186デフォルトの名無しさん
2008/04/02(水) 01:02:260187デフォルトの名無しさん
2008/04/02(水) 02:48:030188デフォルトの名無しさん
2008/04/02(水) 07:17:14new style classと違って、こちらは突然のdeprecateになる。
0189デフォルトの名無しさん
2008/04/02(水) 11:29:030190デフォルトの名無しさん
2008/04/02(水) 11:48:490191デフォルトの名無しさん
2008/04/02(水) 23:43:050192デフォルトの名無しさん
2008/04/29(火) 22:22:540193デフォルトの名無しさん
2008/04/30(水) 02:18:08なんかのらくらと、まったり批判及びフレンドリーな雑談で収まってます
0194デフォルトの名無しさん
2008/04/30(水) 20:11:00批判する点も、「ああ、そこ欠点ってわかってますから」というところ
ばかりだし。
Guidoのやり方が上手なんだろうね。
0195デフォルトの名無しさん
2008/05/25(日) 03:44:530196デフォルトの名無しさん
2008/06/07(土) 03:08:10# -*- 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 で終わる
ディレクトリが含まれていると中断されてしまいます。
たぶん日本語の問題だろうと思って
0197デフォルトの名無しさん
2008/06/07(土) 03:10:24# -*- 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 嫌いになりそうです。><
0198デフォルトの名無しさん
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])
0199デフォルトの名無しさん
2008/06/07(土) 03:22:05× rootroot.decode('cp932')
○ root.decode('cp932')
0200デフォルトの名無しさん
2008/06/07(土) 03:24:12エラーにならん。
traceback張れ。
0201デフォルトの名無しさん
2008/06/07(土) 03:50:59hoge.py c:/ > fuga.csv
で保存しようとするとエラーになります。
0202デフォルトの名無しさん
2008/06/07(土) 03:53:38http://python.rdy.jp/wiki.cgi?page=%C6%FC%CB%DC%B8%EC
site-packageディレクトリにsitecustomize.pyを設置して、文字コードを指定する。
sys.setdefaultencoding('cp932')
0203デフォルトの名無しさん
2008/06/07(土) 05:34:50KeyErrorで止まるのならこれで動くんじゃないかと
decode()の呼び出しで無駄が多いから調整してね
print '"total","%s",%d' % (root.decode('cp932'), dirsize[root.decode('cp932')])
ていうかここアンチスレか
0204デフォルトの名無しさん
2008/06/07(土) 05:54:35だからエラーの内容貼れって
0205デフォルトの名無しさん
2008/06/07(土) 07:54:490206デフォルトの名無しさん
2008/06/07(土) 12:21:50なにこの大富豪的プログラミングw
メモリ喰いまくってるだけで全然終わらないしw
0207デフォルトの名無しさん
2008/06/07(土) 13:07:50http://docs.python.org/lib/os-file-dir.html
0208デフォルトの名無しさん
2008/06/07(土) 13:23:12> 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 文字列をファイルなり標準出力なりに書き出すときは
明示的にエンコードするように心がけるべきだと考えている。暗黙の自動エンコードに
頼るとロクなことがない。
0209208の続き
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さん)が決めるしかない。
0210デフォルトの名無しさん
2008/06/07(土) 14:04:17u'"total","%s",%d'じゃない?
0211210
2008/06/07(土) 14:14:49str % unicode はunicodeになるからいいのか
0212デフォルトの名無しさん
2008/06/07(土) 14:16:34その辺がマンドクセなんでp3kではbyteとunicodeのみになるんだろうな。
0213デフォルトの名無しさん
2008/06/07(土) 14:44:12確かに 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])
0214デフォルトの名無しさん
2008/06/07(土) 15:55:330215デフォルトの名無しさん
2008/06/07(土) 16:03:110216デフォルトの名無しさん
2008/06/07(土) 16:07:230217デフォルトの名無しさん
2008/06/08(日) 00:00:44とすると
64
と表示される。
8進数なんて誰も使わんわ。
危ないからやめてくれよう
0218デフォルトの名無しさん
2008/06/08(日) 00:03:060219デフォルトの名無しさん
2008/06/08(日) 00:06:59Python3.0から8進表記は0o777のようになるとか
>218
同じく0b1101とかでできるようになる
0221デフォルトの名無しさん
2008/06/08(日) 06:47:57ありがとう
0222デフォルトの名無しさん
2008/06/08(日) 14:16:16いわく、二進表記は「馬鹿がする馬鹿な要望」と。
0223デフォルトの名無しさん
2008/06/08(日) 19:12:050x0D にすべきか 0xFD にすべきか
0224デフォルトの名無しさん
2008/06/08(日) 19:19:350xffは256なのか、それとも-1なのか。
それと同じでいいんじゃね?
0225デフォルトの名無しさん
2008/06/08(日) 19:19:57256じゃなくて255だった。orz
0226デフォルトの名無しさん
2008/06/09(月) 04:50:570227デフォルトの名無しさん
2008/06/09(月) 07:18:580xdは13なのか、それとも253なのか。
それがわかれば、そんな愚問に悩む意味はないだろ。
0228デフォルトの名無しさん
2008/06/09(月) 10:24:40Python の変数には型はない。
0229デフォルトの名無しさん
2008/06/09(月) 11:07:15わざわざ持ち出す理由はないような
0230デフォルトの名無しさん
2008/06/09(月) 11:21:320231デフォルトの名無しさん
2008/06/09(月) 16:43:15というか、その言語の持ってる特徴がよくわかる所だよな… >リテラル周り
0232デフォルトの名無しさん
2008/06/09(月) 18:38:37必要なときだけ確定するのと同じようになればいいよ
0233デフォルトの名無しさん
2008/06/10(火) 06:34:260234デフォルトの名無しさん
2008/06/10(火) 06:51:02MSDNを漁る苦労は真似したくないけど
0235デフォルトの名無しさん
2008/06/14(土) 08:57:590236デフォルトの名無しさん
2008/07/16(水) 23:46:44メガバイト単位のながーいビット列を
自在にあやつるモジュールが欲しいざんす。
0237デフォルトの名無しさん
2008/07/17(木) 05:20:030238デフォルトの名無しさん
2008/07/27(日) 02:27:230239デフォルトの名無しさん
2008/07/27(日) 02:32:470240デフォルトの名無しさん
2008/07/27(日) 02:40:38でも、喫茶とかで読みたいので、
本でよろしくです。
0241デフォルトの名無しさん
2008/07/27(日) 03:07:56マジお勧め
0242デフォルトの名無しさん
2008/07/27(日) 14:20:02こっちだろう
0243デフォルトの名無しさん
2008/07/27(日) 14:26:25もったいぶって済まなかった。これがファイナルアンサー。
0244デフォルトの名無しさん
2008/07/27(日) 18:15:57出版社潰れてるよ。
この本の著者はきっと呪われているね。
0245デフォルトの名無しさん
2008/07/27(日) 19:01:54それ以前からやばかったんじゃないの?
0246デフォルトの名無しさん
2008/07/27(日) 20:07:06出版社も著者も五流だったんだな。
0247デフォルトの名無しさん
2008/07/28(月) 22:00:550248デフォルトの名無しさん
2008/07/29(火) 15:34:24のろわられてるとしか思えないね。
0249デフォルトの名無しさん
2008/07/29(火) 15:37:44クックブックの訳注いわく、Pythonは
入門書がいらないくらい言語が簡単なんで
リファレンスを少しみてから俺の本を買えとの事です。
どうりで、(個人的に合わず)おかしな入門書が多いわけです。
>>239のリファレンス、>>242とすすみます。
皆様どもでした。
※言語が簡単ということは、守備範囲が狭いとも
とれるが、価値がある言語か不安であるw。
0250デフォルトの名無しさん
2008/07/29(火) 15:39:54Webアプリもmod_pythonのチュートリアルで足りるし。
0251デフォルトの名無しさん
2008/07/29(火) 16:00:33>>とれるが、価値がある言語か不安であるw。
おまえそれlisperに言ってみろ
0252デフォルトの名無しさん
2008/07/29(火) 16:32:28何でそんなに偉そうなんですか
■ このスレッドは過去ログ倉庫に格納されています