[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 06/01 12:01 / Filesize : 217 KB / Number-of Response : 883
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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

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

前スレ
くだすれPython(超初心者用) その6
pc12.2ch.net/test/read.cgi/tech/1264686181/

関連スレ
Pythonのお勉強 Part37
pc12.2ch.net/test/read.cgi/tech/1268467168/

654 名前:デフォルトの名無しさん mailto:sage [2010/07/11(日) 23:50:12 ]
ウィンドウズのコマンドプロンプトだと↑キーを押すと以前入力した文字が入力されますが
Python Shellで、同じような事は出来ないでしょうか?

655 名前:デフォルトの名無しさん mailto:sage [2010/07/11(日) 23:56:47 ]
漏れも知りたい鯛

656 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 00:06:25 ]
IDLE だったら Options -> Keys の history-next, history-previous で Alt+n, Alt+p じゃない

657 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 00:07:19 ]
つrlwrap

658 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 00:13:30 ]
>>656,657
ありがとうございます!

659 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 00:57:43 ]
>>654
ipython便利だよ。windowsだとpyreadlineといっしょにいれるとよろし。

660 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 01:05:00 ]
>>657
横からですが
ttp://stat001.ameba.jp/user_images/ba/be/10124970142_s.jpg

661 名前:デフォルトの名無しさん [2010/07/12(月) 01:18:27 ]
ズバリtwitterクライアント作ろうと思ったら、何が必要ですか?

右も左も分からない初心者です

662 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 01:29:26 ]
189 デフォルトの名無しさん [] 2010/07/12(月) 00:13:57 ID: Be:
    Twitterクライアント
    クリップボード監視に向いてる言語は何ですか?



663 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 01:57:28 ]
お前の頭骨に入ってる塊より百段上等な脳みそ

664 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 02:14:34 ]
つ ttp://usy.jp/twitter/index.php?Twitter%20API

665 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 03:22:15 ]
Python3.12 の Windows 版で日本語を含むフォルダ内のC拡張モジュールを
インポートするスクリプトを実行するとUnicodeDecodeErrorが発生するみたい。
おそらく Python3 のバグ。
(importdl.c の _PyImport_LoadDynamicModule => _PyImport_FindExtension => PyDict_GetItemString等
=> ... => PyUnicode_DecodeUTF8 の流れで cp932 のバイト列が utf8 で変換されてエラーになる)

再現例:
D:/ほげほげ/winsound.pyd, D:/ほげほげ/a.py の状態で a.py を実行する。
winsound.pyd は Python31/DLLs のをコピー a.py の中身は import winsound のみ

666 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 03:25:36 ]
>>625 のエラーはこのせいだと思う

667 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 05:40:41 ]
>>653
混じってます
Vista HomeBasicSP1とwindows7の2台で利用していますが
VistaはCygwinの中にPython2.4と2.5が入っています。
cygwinは普段利用していなく、コマンドプロンプトを利用しています。
windows7では、最近2.7と2.6を入れました。
このエラーが起きてから入れたような気もします。定かではないですが・・・

Vista
C:\Python31 , C:\cygwin\lib\Python2.4 , C:\cygwin\lib\Python2.5
windows7
C:\Python31 , C:\Python27 , C:\Python26
こんな感じの場所にいます

668 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 06:08:14 ]
>>665
ありがとうございます
直りました

>>653
色々教えていただきありがとうございます
時間を取らせてしまって、ごめんなさい。
ここにレスするときに、ディレクトリ名が乗せられなくて、勝手に手で消してからレスしていました。
そのディレクトリ名の中に日本語が含まれていました。
申し訳ありません
一言、消していることを明記すべきでした。
b'C:\\Uers\\test\\******\\\x8d(ry
ごめんなさいごめんなさい....orz

669 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 06:50:27 ]
センスないな

670 名前:デフォルトの名無しさん [2010/07/14(水) 17:34:50 ]
クラスにメソッドを後付けすることはできますか?
継承せずに、メソッドを定義したいのですが

671 名前:デフォルトの名無しさん mailto:sage [2010/07/14(水) 20:06:45 ]
>>670
できます。
class Foo(object):
    pass
def _bar(self):
    pass
Foo.bar = _bar

672 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 01:05:22 ]
>>671
そんな簡単にできるのですね
ありがとうございました



673 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 02:18:16 ]
けどbuiltinなクラスには後付けできないという...
これって、できないようにする積極的な理由あるの?

674 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 02:21:16 ]
継承すれば済む話だろ

675 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 02:29:31 ]
builtin typeに追加できてもカオスになるだけだと思うわ

676 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 02:33:04 ]
それどこの Ruby on Rails www

677 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 02:52:55 ]
>>673
変更不可能にすることで、メモリ消費量を削減したり、呼び出しを高速化したりできる。
基本的に変更可能な属性は dict 型のオブジェクトを使って管理されているので、
その呼び出しはハッシュテーブルからの検索とかオーバーヘッドが少し大きい。

あと、基本型を弄るとどこに副作用が起こるかわからないという理由もあるな。
基本的に直接弄るんじゃなくて継承しろという方針。

678 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 03:29:16 ]
>>677
なんだ、実装上の都合なのか。

Pythonは理想追い求めるより現実的な落としどころ見つける言語だってのは知ってるけど、
それでも一貫性のなさを感じる。

679 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 03:35:59 ]
読解力のなさに絶望した

680 名前:デフォルトの名無しさん [2010/07/16(金) 05:00:38 ]
builtinクラスに後付けしたいケースってありますか?
ちょっと思いつかないな

681 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 07:36:12 ]
list.joinしたいんだろ

682 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 23:26:13 ]
file.foo = 1 はできないのに、
StringIO.StringIO.foo = 1 ができる合理的理由が見当たらない。



683 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 23:44:22 ]
>>682
ttp://mail.python.org/pipermail/python-dev/2008-February/077167.html

684 名前:デフォルトの名無しさん mailto:sage [2010/07/17(土) 00:14:02 ]
>>682
お前には cStringIO をやる

685 名前:デフォルトの名無しさん mailto:sage [2010/07/17(土) 14:34:23 ]
__slot__

686 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 03:35:53 ]
aiueo = input()
import aiueo

みたいに読み込むモジュールを入力して与えることって出来るの?

687 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 04:01:21 ]
Yes, we can.

688 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 05:05:59 ]
>>686
__import__()

689 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 11:49:25 ]
imp モジュールもあるよ

690 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 04:15:36 ]
質問です
dictが入れ子になってるdictの構造だけをコピーしたいのですが
copyで浅いコピーをしているつもりが、入れ子の中までは担保されません

In [2]: a = {"a":{"b":"con_b","c":"con_c"}}
In [3]: b = a.copy()
In [4]: a
Out[4]: {'a': {'b': 'con_b', 'c': 'con_c'}}
In [5]: b["a"].update({"b":"hoge"})
In [6]: b
Out[6]: {'a': {'b': 'hoge', 'c': 'con_c'}}
In [7]: a
Out[7]: {'a': {'b': 'hoge', 'c': 'con_c'}}

これを a["a"]["b"] == "con_b" としたいのですが
updateというアプローチは間違っているのでしょうか

691 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 04:37:26 ]
>>> a = {"a":{"b":"con_b","c":"con_c"}}
>>> b = a.copy()
>>> b["a"].update({"b":"hoge"})
>>> a
{'a': {'c': 'con_c', 'b': 'hoge'}}
>>>

692 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 04:40:31 ]
>>> import copy
>>> a = {"a":{"b":"con_b","c":"con_c"}}
>>> b = copy.deepcopy(a)
>>> b
{'a': {'c': 'con_c', 'b': 'con_b'}}
>>> b["a"].update({"b":"hoge"})
>>> b
{'a': {'c': 'con_c', 'b': 'hoge'}}
>>> a
{'a': {'c': 'con_c', 'b': 'con_b'}}



693 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 05:07:31 ]
>>692
おー、ありがとうございます
こういうケースはcopy.deepcopy()しないといけないんですね

694 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 05:12:43 ]
>dictが入れ子になってるdictの構造だけをコピーしたいのですが
>copyで浅いコピーをしているつもりが、入れ子の中までは担保されません

質問の仕方が変だ

695 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 10:08:58 ]
>>693
浅いコピーってのは、
b = {}
for key in a:
  b[key] = a[key]
と同じだから、この場合
b["a"] = a["a"]
ってしたことになる。ここで、 a["a"]は辞書型なのでmutable。

浅いコピーでも完全にコピーされるのは、
・要素が全部immutable(int, float, str, tupleなど)
・要素の要素、要素の要素の要素、...が全部immutable
のときのみ。
もちろん、完全にコピーされないことを知った上で大丈夫だと分かっててコピーするのはOK

要素の要素がmutableで浅いコピーがうまくいかない例:
a=(1,(2,[3,4]))
b=a
b[1][1][1]=0
print b
# ==> (1, (2, [3, 0]))
print a
# ==> (1, (2, [3, 0]))

696 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 12:32:02 ]
pythonの初心者参考本を見て、elseを使おうとしたのですが
SyntaxError: invalid syntax
というエラーが出てしまいます。何か間違ってるところがあったら教えてください。コードはこんな感じです。

color = '緑'
score = 20
if color == '赤':
bonus = 0
  
ここでelseを入れるとエラーが出ます。あとインデント幅も妙です。
参考本ので説明に使われているpythonのバージョンと今使ってるバージョンが違うので
書き方に違いがあるのかと思ってぐぐってみたんですが分かりませんでしたorz

697 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 14:26:45 ]
>>696
こんな感じで普通に動くと思うけど。
インデントは全角スペースにしてるから気をつけてね

color = '緑'
score = 20
if color == '赤':
 bonus = 0
else:
 bonus = 20
print bonus


elseの後に:を入れ忘れているんじゃないかと予想。


698 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 16:56:13 ]
>>697
if color == '赤'
bonus = 0
この後改行するとbonusの"b"と同じ列から入力するようになっていてelseを入れてみると
   bonus = 0
    else:

SyntaxError: invalid syntax
というエラーが出てしまいます。丸々コピーしてみても駄目でしたすみません。
何かすごい根本的な問題のような気がするのでこのままスルーして頂いても結構です。ありがとうございました。

699 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 17:10:01 ]
>>698
elseを打つときはデデント(インデントの反対)して
ifと同じ桁から始めなきゃだめだよ

あともし統合環境使ってるのであればPythonに慣れるまでは凍結して
シンプルなテキストエディタとコンソール(コマンドプロンプト)を使ったほうがいい

700 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 17:53:47 ]
>>699
デデントしたらできました!ありがとうございます。

701 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 20:31:18 ]
なんだ自演か

702 名前:デフォルトの名無しさん mailto:sage [2010/07/20(火) 03:25:51 ]
なんだかうまい方法を思いつかない

before =[
{"id":"0","aaa":"fdafdsadafdas"},
{"id":"0","bbb":"dafdgdfagdfsg"},
{"id":"0","ccc":"dafdgdfagdfsg"},
{"id":"1","aaa":"gdfagdfsgdsaf"},
{"id":"1","bbb":"dgfagdsdaffsg"},
{"id":"1","ccc":"dadfgdfddfasg"},
{"id":"1","ddd":"dadfgdfddfasg"}
]

という要素として辞書を持ったリストを

after =[ {"id","0","aaa":"fdafdsadafdas","bbb":"dafdgdfagdfsg","ccc":"dafdgdfagdfsg"}, {"id":"1","aaa":"gdfagdfsgdsaf","bbb":"dgfagdsdaffsg","ccc":"dadfgdfddfasg","ddd":"dadfgdfddfasg"}
]

のように"id"を共通のキーにしてまとめたい
どのようにすればいいだろうか



703 名前:デフォルトの名無しさん mailto:sage [2010/07/20(火) 03:50:43 ]
[dict(reduce(operator.add, map(dict.items, b))) for a, b in itertools.groupby(before, operator.itemgetter("id"))]

704 名前:デフォルトの名無しさん mailto:sage [2010/07/20(火) 05:44:08 ]
>>703
動きました。いいワンライナーですね!
itertools と reduce、 まだ怖くて使ったことがないです…
自分も使いこなせるようになろう

705 名前:デフォルトの名無しさん mailto:sage [2010/07/20(火) 07:22:19 ]
ワンライナーにおしこめないで判りやすくするにはこんな感じかな。
t = defaultdict(dict)
for item in before:
    t[item['id']].update(item)
after = t.values()

706 名前:デフォルトの名無しさん mailto:sage [2010/07/21(水) 05:11:58 ]
>>704
>怖くて

どういう意味?

707 名前:デフォルトの名無しさん mailto:sage [2010/07/21(水) 10:29:25 ]
でもそういう便利機能を使いこなしちゃうとあとで読みにくかったりするわな

708 名前:デフォルトの名無しさん mailto:sage [2010/07/21(水) 23:16:18 ]
>>688
出来ましたありがとうございます。

709 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 02:24:28 ]
コンパイル済ヘルプ chm (win) 形式の日本語言語リファレンスの
新しいのはないでしょうか。
2.5 まではあったんですが。
www.python.jp/pub/doc_jp/

710 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 16:55:06 ]
tkinterの良い勉強サイトや本ってない?
可能ならば3に対応してる奴で、英語か日本語のもの

711 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 17:01:14 ]
あるよどっかに

712 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 17:29:23 ]
pythonを勉強してたんだが全く意味がわからんのでまずはプログラムのイロハを学びたいと思います

LINUXでC言語でも勉強したいと思います



713 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 17:32:24 ]
こう言っては何ですがプログラミング自体を諦めたほうがいいのではないでしょうか

714 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 17:38:39 ]
pythonで学ぶプログラム作法おすすめ

715 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 17:51:31 ]
どうでもいいけど、このスレに居る奴って英語読めなさそうだな

716 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 17:53:37 ]
英語読めれば>>714もただで読めるのにね

717 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 17:16:57 ]
#!/usr/bin/python
# -*- coding:utf-8 -*-

if __name__ == '__main__':
 print 'java-ja great!!!'

718 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 17:48:11 ]
>>717
特定されました

719 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 19:00:33 ]
classを作って、アトリビュートaを設定してるつもりなのですが
インポートしてaを開こうとするとそんなアトリビュート無いと言われます
何が間違っているのでしょうか
www.dotup.org/uploda/www.dotup.org1051891.jpg.html


720 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 19:14:35 ]
>>719
1. class は import しない。 import test としたら、 class test と全く別の test モジュールが import され、 test クラスは消え去る。
2. self.a = 0 では、クラスではなく、クラスのインスタンスに属性を追加しているので、インスタンスを作らないと a は見えない。

class test:
    def __init__(self):
        self.a = 0

t = test()
t.a


721 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 19:15:24 ]
>>719
importはモジュールを読み込み、初期化する文。
classとは関係ない。

その例だと、testという名前でクラスを定義した後に、
testというモジュールをimportしている。

722 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 19:20:46 ]
>>720,721
なるほど!ありがとうございます。





723 名前:デフォルトの名無しさん mailto:sage [2010/07/26(月) 16:36:07 ]
askopenfilenameって3.0以降でどう書けばいいの?
tkFileDialogのimportの変更点も分かってないから誰か解説してくれ

724 名前:デフォルトの名無しさん mailto:sage [2010/07/26(月) 17:09:13 ]
2to3.py

725 名前:デフォルトの名無しさん mailto:sage [2010/07/26(月) 17:11:10 ]
neetossan.py

726 名前:デフォルトの名無しさん mailto:sage [2010/07/26(月) 18:17:58 ]
助かった、tkinterも変えてくれるのね
アスキーコード云々もsitecustomize.pyに2行足しただけですんなり行った

727 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 00:34:17 ]
__init__
とか__がやたら目につくのはなぜ?
気持ち悪いんだけど

728 名前:デフォルトの名無しさん [2010/07/27(火) 01:51:47 ]
誰かいる??

729 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 02:00:45 ]
(゚Д゚≡゚д゚) 今ぱいスレには俺様しかいない!

730 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 02:00:51 ]
居ないけど何よ?

731 名前:デフォルトの名無しさん [2010/07/27(火) 02:03:38 ]
pythonでmsecまでを表示したいんですが、
何か良い方法は無いでしょうか??

例えば

2:00:44.009727 の時だと

7244.010 みたいなかんじです。

マイクロsecをとって//1000すると、9 とかになるので、
マイクロsecから丸める方法でも3桁にしたいです・・

お知恵をお貸し下さい。

732 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 02:07:07 ]
俺じゃ答えはわからないけど一緒に考えることなら出来るよたぶん



733 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 02:07:22 ]
>>731
>>> sec = 12345.12345
>>> print "%.3f" % (sec,)
12345.123


734 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 02:09:02 ]
python] ミリ秒まで表示させる
■[python] ミリ秒まで表示させる 00:35 ミリ秒まで表示させる -
With skill and creativeness を含むブックマーク はてなブックマーク - ミリ秒まで表示させる - With skill and creativeness ミリ秒まで表示させる - With skill and creativeness のブックマークコメントCommentsAdd Star

参考URL

import datetime
now = datetime.datetime.now()
print now.strftime("%Y%m%d%H%M%S.") + "%04d" % (now.microsecond // 1000)
→ '20081118003037.0479'

これは?
ttp://d.hatena.ne.jp/shohu33/20081117/1226936130

735 名前:デフォルトの名無しさん [2010/07/27(火) 02:11:21 ]
ありがとうございます。

datetime.datetime.now()とかで、
秒換算して取得することって出来ますか?

それと、>>733を組み合わせると、完璧の予感!

736 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 02:15:28 ]
>>> datetime.datetime.now()
datetime.datetime(2010, 7, 27, 2, 14, 21, 705000)

日本語が理解できない
これで秒取って、足したり引いたりじゃだめなの?

737 名前:デフォルトの名無しさん [2010/07/27(火) 02:27:16 ]

d = datetime.datetime.now()

sec = ((d.hour*60 + d.minute)*60 + d.second)

print sec
print "%.3d" % (d.microsecond // 1000)

数値型で sec.msec にするには、あと、どうしたらいいですか・・・
行き詰まってしまいました

738 名前:デフォルトの名無しさん [2010/07/27(火) 02:39:45 ]
d = datetime.datetime.now()
sec = ((d.hour*60 + d.minute)*60 + d.second)
msec ="%.3d" % (d.microsecond // 1000)
print sec + float(msec)/1000
これでいいか。

739 名前:デフォルトの名無しさん mailto:sage [2010/08/01(日) 23:52:56 ]
readで引数を細かくとったり、urllib.urlretrieveを使うことで
ダウンロードの進捗状況を知ることができるのは分かったのですが

アップロードの進行状況(POST)を知る方法は標準ライブラリでありませんか?
urllib2とかurllibを使って

740 名前:デフォルトの名無しさん [2010/08/02(月) 00:12:41 ]
windowsでeasy installを使いたいのですが、
c:\Python25\Scriptディレクトリ自体がありません
どうしたらいいでしょうか

741 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 00:19:55 ]
>>740
なくてもインストールできるからさっさと入れればいいだろ

742 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 00:26:52 ]
は?



743 名前:デフォルトの名無しさん [2010/08/02(月) 00:29:38 ]
>>739
その方法で本当にDL進捗状況がわかるのか気になる
socket使えばアップ・ダウン両方できる

744 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 00:30:31 ]
easy install自体が見あたらないのです
www.python.jp/Zope/download/pythoncore
ここのpython-2.5.2.msiを使用しました。

745 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 00:42:46 ]
>>744
そうじゃない
まずeazy_installをいれろよアホがっつってんだよカス

746 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 00:45:18 ]
えっ、easy installは最初から入ってるものではなかったのですか?
その方向で調べてみます
ありがとうございます。

747 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 00:57:01 ]
>>743
すいません後出となって申し訳ないのですが、ソケットを直接つかうの以外で
無いだろうかと探していました



748 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 01:12:31 ]
eazy_installをeazy_installでインストール出来ないのは大問題だな

749 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 01:59:53 ]
今はsetuptoolsじゃなくてdistributeだから気をつけなよ>easy_installの入手

750 名前:デフォルトの名無しさん [2010/08/02(月) 03:17:27 ]
一度タイムゾーンを設定したら
以後、時刻関係の関数は一律そのタイムゾーンで値を返してくるようにしたいのですが
そういうことできますか?

751 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 03:32:50 ]
環境変数で TZ=hoge する

752 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 20:46:35 ]
'''
プログラム超初心者です
↓のようなことをするときにbreakは書いたほうがいいのでしょうか、、、
あともっとスマートに書ける方法があったら教えてください。

ユーザーから続けて数字の入力を受け付け
合計が100に近づくまでその数値を足し続けるプログラムを書きなさい
'''
hundred = 100
value = 0
def numint(x):
  while True:
    try:
     y = raw_input(x)
     z = int(y)
    return z
    #break ←ブレイクは書いたほうがいいのでしょうか?
    except ValueError:
      print u'Error : 文字ではなく数値を入力してください'

value += numint('数値を入力してください>> ')

while value < hundred:
  print value, u'まだ足りないみたいです'
  value += numint('もっと大きな数字を入力しましょう>> ')
print value, u'合計が100以上になりました'





753 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 20:49:01 ]
また突っ込み所満載のネタを・・・

754 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 22:06:48 ]
>> 752 です
www.python.jp/Zope/intro/instant_hacking_jp
プログラムの練習に↑のInstant hacking をしていたのですが
例外処理を加えようとして pylint が到達不能code を警告していたので
どうしたもんかなぁと思って書き込みしてみたところです

ぐぐったところ while True はあまり書かない方がいいみたいなので
他の手を使ってみます、、、

while True したら break を書くものとばかり思っていたので
頭が混乱してしまいました…

755 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 00:26:47 ]
昔PHPにループからreturnするとメモリリークするというバグがあった

756 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 03:24:01 ]
>>752
質問に答えるなら、returnの後の行はどうせ実行されないのだから、breakは不要。
けれどこれ、except節はtry節が終わった直後に置かないといけないからSyntaxError出ると思うよ。

そしてお説教。
> hundred = 100
こういう名前の付け方は意味が無い。
変数は、
・いちいち書くと長ったらしい/処理を分けたいから名前をつけたい
・今後変更される可能性に備えて、名前をつけておきたい
ときに使うものだから。仮に200に変更したとき、
hundred = 200
にするわけにはいかないでしょう。
これもあんまりいい名前じゃないけど、俺ならNにしちゃうかな。

numintの引数xも、一目でxが何か分からないから問題あり。

例外が出なかったときに処理したいのなら、Pythonでは例外の後のelse節でそれができる。

N = 100
value = 0
def numint(msg):
  while True:
    y = raw_input(msg)
    try:
     z = int(y)
    except ValueError:
      print u'Error : 文字ではなく数値を入力してください'
    else:
      return z

757 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 07:03:55 ]
>>756
ありがとうございます!!! めちゃくちゃスッキリしました!!
なぜかerrorを出さずに実行できてしまっていたのでどうしよう…ってなっていたところでした

みんなのPythonを1/3ほど読み終えたところですが、変数の名前は適当でいいのかなぁとか思っていました、、、

もっと基礎を勉強したほうがいいですねorz
多謝です!!


758 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 10:08:33 ]
>>757
>みんなのPythonを1/3ほど読み終えたところですが、変数の名前は適当でいいのかなぁとか思っていました、、、

そんなことが書いてあるの!?
酷い本だ。

759 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 10:13:52 ]
今までプログラムを触ったことがないならまずはC言語からの方がいいと思う、教材の良とか質とかもあるし。
オライリーのヘッドファーストシリーズお勧め

760 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 10:15:59 ]
handred = 100は教材以前の問題じゃないだろうか。
自分の子供に「息子」という名前を付けるのと同じだ。

761 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 11:27:02 ]
なんとかjr

762 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 11:30:31 ]
handredってなに、手が赤いの?



763 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 12:40:08 ]
>>762
半分ドレッドな臭い頭のひとのことです

764 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 12:41:39 ]
>>758
いえ、変数の名前のつけ方とかはみんなのPythonには書いてなかったので、、、
読んでみた感想は、なんとなくプログラムを大雑把に理解できる感じでした
ビット演算の項でつまずいてますけどorz

変数の名前にhundredを使ったのは私ですのでみんパイは悪くないです
図書館で借りたので文句のつけようがないです、、、

>> 759
「みるみるプログラミングがわかる本」掌田津耶乃
「 C言語プログラミング入門―C99対応―」田中敏幸
[改訂新版] これからはじめるプログラミング基礎の基礎]谷尻 かおり
あたりを図書館で借りて勉強しようと思います

「エキスパートPythonプログラミング 」Tarek Ziade
「Head First JavaScript」Michael Morrison
は買ってみます





765 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 21:40:06 ]
確かに
みんパイ読んだけどちんぷんかんぷんだった
で、Cの本を適当に読んだら非常に解りやすい
やっぱプログラム初心者にパイソンはむついのかなーと何気に感じた今日この頃

766 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 21:43:43 ]
みんなのPythonは前半は実践編が無いからな〜

767 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 23:36:04 ]
Webにあるチュートリアルじゃむずいの?

768 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 00:24:30 ]
数千円でプログラミングのエッセンスが身につくと思っているとかおめでたいな。

769 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 00:28:01 ]
6千ちょいだせばなんとか
www.amazon.co.jp/dp/0262062798/

770 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 00:39:28 ]
ビッド演算で躓く子が、ポインタを理解できるのかい?

771 名前:デフォルトの名無しさん [2010/08/04(水) 00:42:50 ]
>>770
整数はbit幅が固定じゃないからcよりも理解しにくいんじゃない?

772 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 00:58:45 ]
>>770
ビッド演算とか言ってないからたぶん大丈夫だろう



773 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 01:22:47 ]
>>764
命名規約だけで大議論が起こるくらいにはネーミングは重要だよ。
Pythonの命名規約は「PEP8」でググれば出てくるから調べてみな。


774 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 09:24:20 ]
>>773
bitbucket.org/tavisrudd/pylint_etc_wrapper.py/src/tip/pylint_etc_wrapper.py
上のエラーチェックを使っているのですが、defaultにpep8を追加して使えるようにしました

「l」「0」「I」は使わない、関数名は小文字、classは先頭大文字などとても参考になります

ビット演算は否定のところでつまづいてます。
26(10) 11010(2) の否定は 100101(2) のはず?なのに
26 11010 -27 -11011
と出るので…考えれば考えるほどわからないorz
自分の書いたスクリプトが悪いのでしょうか…
スレ違いすいません、、、

775 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 09:45:37 ]
「2の補数」でぐぐれ

>>> ~26
-27

26(10) = 11010(2)
-27 = ~26(10) = 1111...(ここの1が論理的に無限に続く)...111100101(2)
これで 26 + (-27) = -1 になることを考えてみるとわかりやすい
111111 = -1
111110 = -2
111101 = -3
111100 = -4
...
100111 = -25
100110 = -26
100101 = -27

776 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 15:58:27 ]
>>775
ありがとうございます!! めちゃくちゃ助かりました!!
なんとなくですけど、理解できたような気がします!

~(not)はビットを反転させて、1の補数をとっているんですよね。
>>format(26, 'b')
11010
>> ~ 26
-27
>>format(-27, 'b')
-11011

単行演算子 - は2の補数をとるので、表示は1111..(32列)..1100101ではなく
-11011となっていたのですね!

この理解であっているでしょうか、、、


777 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 16:46:19 ]
血が牛

778 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 18:41:38 ]
>>776
format(n, 'b')はnを2進表記にした文字列を返すってだけだよ
整数の内部表現を返すわけではない

779 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 19:00:07 ]
一応補足しておくと b って意味は、
2進数表記の際に、頭につける 0b からきてる。
これは16進数の0xと一緒の意味。
format(num, 'b')は単純に
数字を変換、どんな物かというとb、bの意味は2進数。

780 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 19:04:39 ]
それは補足じゃなくて蛇足

781 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 19:06:23 ]
なんでbなんだ

782 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 19:10:20 ]
binary



783 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 19:14:02 ]
なんでxなんだ

784 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 19:25:38 ]
hexともしました

785 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 23:23:55 ]
つまり6進数か。

786 名前:デフォルトの名無しさん [2010/08/05(木) 01:01:11 ]
2進数16進数はわかるけど8進数の存在意義がよくわからん.
言語によっては数値リテラルを0から始めると8進数として扱ったり
16進数で十分じゃん

787 名前:デフォルトの名無しさん [2010/08/05(木) 01:18:52 ]
chmod 755

788 名前:786 [2010/08/05(木) 03:25:08 ]
そういえばそれは8進数だな

けどソースコードを書く上での存在意義がよくわからんのだよ>8進数
わざわざ8進数を記述する文法があるわけだから何かしら意義はあるのだろうけど

789 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 03:31:47 ]
分かった。16進だと記号が入ってウザいから

790 名前:デフォルトの名無しさん [2010/08/05(木) 03:46:54 ]
10進数のつもりが8進数でした・・・になるより記号付きの方がいいと思うんだけど

791 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 06:11:08 ]
8進数は64bitと相性が良い

792 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 06:14:00 ]
>>790
2進数 0B01234567
8進数 0O01234567
16進数 0X01234567



793 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 06:20:07 ]
>>792
このおねぼけさん

794 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 07:59:55 ]
>>793
2進数 0b01111111
8進数 0o01234567
16進数 0x01234567

795 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 08:03:08 ]
ぶっちゃけ Python から Ruby の ActiveRecord に相当するものを使いたいときって
どんな ORM があるの?
takaki-web.media-as.org/blog/archive/2007/02/19/pythonactiverecord
とか
SQLAlchemy とか
Elixir とか



796 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 14:24:33 ]
すみませんGAEでpythonいじってます。
サンプルコードにconfig.pyってのがあって、グローバル変数の初期化をしています。
そこにBASE_URL =とあってURLを設定します。

で、これだとローカルテストとデプロイでいちいちURLを変えないといけないので改造したいわけです。

しかし、grepしてみてもどこからもconfig.pyを明示的に呼び出したりしてません。
pythonはアプリケーション起動時にアプリケーションディレクトリ以下のすべてのpyファイルを読み込むのでしょうか?
だとするとself.request.urlの戻り値が期待できないタイミングだと予想されます。

requestのタイミングで毎回セットするならグローバル変数にする意味ない気がするし・・・

こんなとき、自分のドメインを調べてグローバル変数にセットする一番標準的な方法を教えていただければ幸いです。

よろしくお願いします。

797 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 17:11:34 ]
BASE_URL = os.path.split(os.path.abspath(__file__))[0]

798 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 18:00:02 ]
>>797
これはローカルのパス・・・・ですよね?

799 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 22:02:49 ]
>サンプルコード

どこの?

800 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 22:56:55 ]
「新規」という名前のフォルダを作りたいのですが以下だとダメでした。
アドバイスいただきたいです。

import os
dir_name = '新規'
os.mkdir(dir_name)


801 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 23:16:26 ]
普通に作れると思うけどソースにencoding指定がないとかだろうか

とりあえずOSとPythonのバージョン
実行形態(スクリプトとして実行、あるいは対話型シェルから等)
あとエラーメッセージとどう「ダメ」だったのかをどうぞ

802 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 23:17:17 ]
import os
dir_name = u'新規'
os.mkdir(dir_name)



803 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 23:24:16 ]
作れなかったから例外が発生すると思うのだが

804 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 23:29:18 ]
コンソールからでなくアイコンをダブルクリックで起動してるとかかも

>>801にソースコードの文字コードも追加で

805 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 23:35:08 ]
作成権限ある?

806 名前:デフォルトの名無しさん [2010/08/06(金) 04:18:42 ]
組み込み関数のソースコードを見ることはできないのでしょうか?

807 名前:デフォルトの名無しさん [2010/08/06(金) 04:56:46 ]
>>806
www.python.org/dev/

808 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 07:47:33 ]
エロリおかず用HDDが逝ってからどうでもよくなった
エロサイトのブクマ外したり内臓HDDのエロ全消去して
エロ禁&オナ禁初めて現在14日目
最近ではIVやティッシュはもちろん、テレビでもエロイ事してる人がいるから
テレビも部屋から出した。
徹底してるぜ俺

809 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 08:06:02 ]
実況乙

810 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 09:59:17 ]
>>799
すみません個人ブログなので貼れません

811 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 10:09:57 ]
なんで?

812 名前:デフォルトの名無しさん [2010/08/06(金) 10:36:01 ]
Windows XP SP3
Python 2.6.4
です。

ファイルのフルパスを受け取った文字列があります。
これを
ディレクトリパスとファイル名(拡張子なし)と拡張子名に分割し、再び結合する
というPythonプログラムはどうかけるでしょうか?

例えば
full_p_str = "D:\Dir1\Dir2\Dir3\filename.html"
のようにファイルのフルパスを受け取ってfull_p_strに格納し、
full_p_str_result = os.path.join(ディレクトリパス, 拡張子のないファイル名 + "." + 拡張子名)
のようにしたいのです。

よろしくお願いいたします。



813 名前:812 [2010/08/06(金) 10:40:33 ]
os.path.split
でフルパスをフルパス名を分割できるようですが、
ファイル名を拡張子とそうでない部分に分割するにはどうしたらよいでしょうか?

814 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 10:43:55 ]
それ専用なものは無いので正規表現をつかえばいいんじゃないですか?

815 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 10:51:56 ]
>>814
正規表現ですか。
ありがとうございます。

816 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 11:08:02 ]
>>> import os
>>> fullpath = r'D:\Dir1\Dir2\Dir3\filename.html'
>>> dirname, filename = os.path.split(fullpath)
>>> filename_wo_extension, extension = os.path.splitext(filename)
>>> os.path.join(dirname, filename_wo_extension + extension)
'D:\\Dir1\\Dir2\\Dir3\\filename.html'

>>> 'hoge.piyo.fuga.html'.rsplit('.', 1)
['hoge.piyo.fuga', 'html']

817 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 11:09:09 ]
os.path.basepath
os.path.filepath

818 名前:デフォルトの名無しさん [2010/08/06(金) 12:13:47 ]
みなさんありがとうございます。
それで解決できました!!

819 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 12:16:49 ]
ttp://imagepot.net/image/128106448608.jpg
このようなコードを書くと、
インデントがおかしいと言われてしまいます。

このコードでコメントを全部消して一行につなげれば
通りますが、そうなると可読性が下がってしまいます。

どうすればこのような一見して分かる可読性を維持しながら
インデントで怒られないでしょうか?

よろしくお願いいたします。

820 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 12:27:40 ]
#bbb から#eeeの話だよな?
+ で繋ぐ部分はインデントどうやっても構わなくなるはずなんだけど

怒られてるの違う部分じゃないの?

821 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 12:28:24 ]
TypeError: bad operand type for unary +

って言われます・・・。


822 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 12:31:44 ]
s = 'aaa' + \
 ', ' + foo + \
 ', ' + bar + \ ...

文字列リテラルだけなら

s = ('aaa'
 'bbb'
 'ccc')



823 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 12:32:25 ]
+ \
ですか。
ありがとうございます。

それで解決します!

824 名前:819 mailto:sage [2010/08/06(金) 12:34:57 ]
+ \
で解決するかと思ったのですが、

SyntaxError: unexpected character after line continuation character

と言われてしまいました。
各行にコメントを後ろに付けたいので、そういう場合はどうすればよいでしょうか?


825 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 12:46:12 ]
a = (1 +  # one
     2 +  # two
     3)  # three

826 名前:819 mailto:sage [2010/08/06(金) 12:56:08 ]
>>825
ありがとうございます。
それで完全解決いたしました。

感謝申し上げます。

827 名前:812 [2010/08/06(金) 13:05:43 ]
>>812です。

環境は
Windows XP SP3 Python 2.6.4です。

Shift-JISのファイルを読み込んでUTF-8に変換し、
そのファイルを加工した後
再びShift-JISに戻したいのですが、どのようにすればよいでしょうか?

import codecs
f = codecs.open(ファイルのフルパス,"r", "utf_8", "ignore")
とすると元のファイルがUTF-8でないと開けず、
かといって
f = codecs.open(ファイルのフルパス,"r", "shift-jis", "ignore")
とすると開いたファイルがShift-JISのままです。

どなたか解決策を教えていただけますでしょうか?


828 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 13:23:07 ]
codecsの挙動わかってる?
f = codecs.open(ファイルのフルパス,"r", "shift-jis", "ignore")
この状態でreadすればUnicode文字列として読み込まれるから普通に加工できる。書き出すときも
w = codecs.open(ファイルのフルパス,"w", "shift-jis")
とやってwriteにUnicode文字列を渡せば、shift_jisに変換して書き込んでくれる
UTF-8相当のstrにして何かやりたいならencodeメソッドなりご自由に

829 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 13:27:17 ]
似たような質問をどこかで見たぞ??

830 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 13:32:36 ]
>>828
ありがとうございます。
codecsってそういう動作なのですね。
助かりました。


831 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 17:50:32 ]
s = 'aaa' + \ # hoge
 ', ' + foo + \ # fuga
 ', ' + bar + \ # hage ...

s = 'aaa' + # hoge \
 ', ' + foo + # fuga \
 ', ' + bar + # hage \ ...

どっちもだめなのか

832 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 17:53:35 ]
>>828

f = codecs.open(ファイルのフルパス,"r", "cp932", "replace")
w = codecs.open(ファイルのフルパス,"w", "utf-8", "replace")

が良くね?




833 名前:デフォルトの名無しさん [2010/08/06(金) 19:22:15 ]
>>831
何スレか前に似たような内容を書き込んだ覚えがある
前者のような書き方は許して欲しいんだけどねぇ

834 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 23:28:38 ]
Python 2.6.4です。
<tab>単語1<tab>単語2
という形式の文字列が延々と羅列されてるtxtファイルで、
単語1の部分が以前の行で既出で重複している場合に、その行を消すにはどうしたらいいでしょう?

835 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 23:56:52 ]
>>834
もう少し具体的に

836 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 00:00:18 ]
tsvファイルからデータを読み込んで重複除去したいんでしょ
順序は維持しないとだめ?

837 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 00:08:45 ]
>その行を消す

この場合消すのは今見ている行なのか
既出で重複していた方の行なのか
あと2行じゃなくて3行以上の複数行が既出だったらどうするのかとか

838 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 00:10:08 ]
既出の単語1が単語2の位置にあっても既出とみなすのか
同じカラムのときだけ既出扱いするのか

839 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 03:51:47 ]
単語1同士の重複を処理するだけでいいなら、単純に:

fr = open("sample.txt", "r")
fw = open("output.txt","w")
catch = []

for line in fr:
 if line[1] not in catch:
  catch.append(line[1])
  fw.write(line)

840 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 08:23:23 ]
レスありがとうございます。
>>839さんの試してみます。

<tab>*STD_PAUSED<tab><tab><tab>"一時停止"
<tab>*STD_GAME<tab><tab><tab>"ゲーム"
<tab>*SYS_SHADERMODE0<tab><tab>"Auto"
<tab>*SYS_SHADERMODE1<tab><tab>"0.5"
<tab>*SYS_SHADERMODE2<tab><tab>"1.1"
<tab>*SYS_SHADERMODE3<tab><tab>"1.1"
<tab>*STD_PAUSED<tab><tab><tab>"Paused"
<tab>*STD_GAME<tab><tab><tab>"Game"

こういう感じの形式で、タブ、*から始まるタグ、不定数のタブ、"文字列"という行が延々と続いています。
上記の例だと*STD_PAUSED、*STD_GAMEのタグが重複しているので、
<tab>*STD_PAUSED<tab><tab><tab>"Paused"
<tab>*STD_GAME<tab><tab><tab>"Game"
の2行を削除したいのです。
行にあるタグが既出の場合その行を消すと言ったらいいのでしょうか。

841 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 08:52:06 ]
>>839さんのうまくいきませんでした・・・

842 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 09:25:26 ]
import sys

tags = []
for line in sys.stdin:
  tag = line.split('\t')[1]
  if not (tag in tags):
    tags.append(tag)
    print line,

C:\tmp> type src.txt | python hoge.py > dest.txt



843 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 10:00:28 ]
>>842
ありがとうございます。
ですがエラーが出てしまいます。

C:\Users\HOGE>type src.txt | python hoge.py > dest.txt
Traceback (most recent call last):
File "hoge.py", line 5, in <module>
tag = line.split('\t')[1]
IndexError: list index out of range
プロセスが、存在しないパイプに書き込もうとしました。

となります。
ここまで来たら自分でやれよ!ってレベルなんでしょうがほんとすいません・・・

844 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 10:21:48 ]
\tがない行がある
最後の行とか大丈夫か?
何行もあるなら例外処理だな

845 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 10:38:00 ]
なるほど\t(タブ)でsplitしようにもTabがねーよってエラーメッセージですか。
改行しか無い行が割とあってその最初でエラーが出てます。
他にもコメントだけの行などあるので、
行頭のタブと*付きのタグから始まらない行は例外処理したほうがよさそうですが
その処理も書けませんのでお願いします・・・

情報を後出しにしちゃってすいません。
txtファイルは5000行くらいで*付きのタグは3000種類くらいあると思います。
行によっては
<tab>*tag<tab><tab><tab>"str"
のstrが長く200文字くらいの場合もあります。

846 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 10:44:32 ]
あらほんとだ。ごめん

for line in sys.stdin:
  if not line.startswith('\t*'): continue
  tag = line.split('\t')[1]
  ...

こんな感じでひとつ

847 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 11:03:09 ]
tags = []
じゃなくて
tags = set()
とでもしたほうがいいと思うよ
ほかは同じでいいけど

毎回わざわざリニアサーチする必要は無い

848 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 11:15:28 ]
ごもっともです
痛いところをつかれたので書き直しますね

import sys

tags = set()
for line in sys.stdin:
  if not line.startswith('\t*'):
    continue
  tag = line.split('\t')[1]
  if not (tag in tags):
    tags.add(tag)
    print line,

849 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 11:30:41 ]
できました!!長々とありがとうございました!
例外の行はそのまま残したかったので以下のようにしました。

import sys

tags = set()
for line in sys.stdin:
 if not line.startswith('\t*'):
  print line,
  continue
 tag = line.split('\t')[1]
 if not (tag in tags):
  tags.add(tag)
  print line,

850 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 11:51:40 ]
The winner takes it all.

851 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 12:28:02 ]
すいませんまた質問させてください。

>>840のようなタブ、*から始まるタグ、不定数のタブ、"文字列"の形式で書かれている(例外もある)ファイルが2つあって、
例えばfile_en.txtには

<tab>*STD_PAUSED<tab><tab><tab>"pause"
<tab>*STD_GAME<tab><tab><tab>"game"

のように、file_jp.txtには

<tab>*STD_PAUSED<tab><tab><tab>"一時停止"
<tab>*STD_GAME<tab><tab><tab>"ゲーム"

となっている場合に、タグが同じところから文字列を引っ張ってくるといった処理は
どうやったらできるでしょうか。

852 名前:デフォルトの名無しさん [2010/08/07(土) 12:36:40 ]
ちったぁ自分で考えろやボケ



853 名前:デフォルトの名無しさん [2010/08/07(土) 12:48:40 ]
>>851 まず二つのファイルを1つに合わせて、ライン別に処理。
重複を見つけたらその行を " で割って文字列の部分だけ取り出す
やりたい事がわからんので違ってたらスマソ

854 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 13:14:13 ]
>>851
records_en = dict()
fields = '<tab>*STD_PAUSED<tab><tab><tab>"pause"'.split('\t')
tag, text = fields[1], fields[-1]
records_en[tag] = text

あとはがんがれ
いちいち質問してたら時間もったいないよ

855 名前:851 mailto:sage [2010/08/07(土) 14:00:09 ]
その通りです、楽しようとしすぎだ俺。
Pythonの初歩としてちょうどよさそうだから勉強がてらやってみます

856 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 14:28:31 ]
>>827
2.6以降でファイルを加工するなら、codecs.openより、ioモジュールの
io.openを使ってみるのはどうかな。
文字列とバイト列の扱いがPython3と同じでわかりやすくなっているし、
ファイルオブジェクトと同じように扱えて全改行文字サポートもある。
こっちの方が便利なんじゃないかな。

857 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 15:03:29 ]
質問する側がちゃんと質問できてればそうはならんと思う
ちょっと煽るくらいで情報引き出さないと想定できる問題点が多すぎて回答できないとかどうなのよ?

質問者は
素人判断で問題点を想像してそれを根拠に質問するな
大本の判断材料からすでに間違ってることが多すぎる
素直に最終的にやりたい事と現状どうなってるかを明確書け

858 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 15:17:36 ]
それが書ける奴なら質問しねーよバーカ

859 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 15:18:38 ]
質問者は回答するのに必要な情報を小出しながらも的確に提示し
エラーの原因を特定する能力もあったね

問題は単に丸投げしようとしてたこと

860 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 15:27:57 ]
質問者は、とりあえず
挙げた内容でわかる範囲の答えが欲しいだけ。

それで望む答えが得られなけば、掘り下げて
質問を続ける。または打ち切る。

いたって普通の2chの使い方じゃねーの。

861 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 20:12:55 ]
>>845
> \t(タブ)でsplitしようにもTabがねーよってエラーメッセージですか。
それは違う。

tag = line.split('\t')[1]

fields = line.split('\t')
tag = fields[1]
に変更すると、どの行でエラーが出るだろうか。

>>851は、俺ならこんな感じで実装するけど、こういうのって正直どうよ?
def add_dict(dic, item, value, overwrite=False):
  if overwrite or item not in dic:
    dic[item] = value

tags = dict()
for line in sys.stdin:
 if not line.startswith('\t*'):
  print line,
  continue
 line_sp = line.split('\t')
 if not (tag in tags):
    add_dict(tags, fields[1], fields[-1])

862 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 21:26:16 ]
>>834,840,851とかです。
今やってることをはっきり言うとThe Chronicles of Riddick Escape from Butcher Bayという
PCゲームの日本語化ファイルが公開されているのですが、
私が買ったThe Chronicles of Riddick Assault on Dark Athenaでそれを流用したいのです。
AoDAにはEfBBの内容も含まれているのでそのままでも一応日本語化は出来ますが完全ではありません。
なのでAoDAの字幕ファイルにうまいことEfBB日本語化の成果をマージ出来ないかとやっていたんです。

しかしいろいろいじっているとそういう作業をしなくても割と綺麗に表示されるようになってしまいました。
Pythonの勉強はまた今度だな・・・!

ちなみのこのゲーム
store.steampowered.com/app/9860/



863 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 21:49:08 ]
リディックって映画で見たような。なつかしす
つかほかのゲームでもPythonはよく使うから勉強続けなさいYO

864 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 23:39:10 ]
Pythonの悩みはjava-jaがなんとかしてくれるよ。

865 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 01:13:46 ]
以下のアドレス、

yasu1987.blogspot.com/2010/06/simple-twitter-bot-on-google-app-engine.html

から落としてきたソースをパスとユーザー名だけ書き換えてGAEにupすると以下のようなエラーが出ます。
<type 'exceptions.UnboundLocalError'>: local variable 'recent_tweet' referenced before assignment
Traceback (most recent call last):

python2.5、App Engine SDK 1.3.5です。ちなみに他の、あらかじめ指定した
言葉をポストするだけのプログラムはちゃんと動きました。どこをチェックするべきでしょうか。

866 名前:デフォルトの名無しさん [2010/08/09(月) 01:51:26 ]
>local variable 'recent_tweet' referenced before assignment
ローカル変数「recent_tweet」に値が代入されるまえに参照されています.

recent_tweetまわりを確認

867 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 02:03:49 ]
板違い
hibari.2ch.net/test/read.cgi/php/1267057923/

868 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 03:13:22 ]
>>866
ありがとうございます。ほぼいじり始めたばかりなので理解があやふやなのですが、
「recent_tweet」は def run(name, pswd, search_term): の中で初めて出現し、
36行目で出現と同時にs.textが代入されています。値が代入される前に参照されていると
言うことはないように思うのですが…

>>867
最初、webプログラミングのあるスレで聞いてたんですが
いくらなんでもレベルが低いかな、と思ったのでこちらで…
エラーメッセージもpythonに一般的なことかと思ったので。
GAEに本質的に関わることは向こうで聞くつもりですがダメでしょうか?

869 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 03:20:38 ]
半年ROMってろ

870 名前:デフォルトの名無しさん [2010/08/09(月) 03:25:48 ]
くだらない質問スレなんだからpython関係ならとりあえずいいっしょ
だから>>868ぐらいでいいんでねーの?

871 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 03:52:24 ]
>>865
そのコードだと、statusが空もしくはRTから始まるデータが1つもないときに
recent_tweetが初期化されない。

872 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 03:53:38 ]
# for s in status:
# if s.text.startswith("RT"):
# recent_tweet = s.text
# break
# else:
# print "The following tweet would be posted by hand, so skipped it."
# print "Tweet: " + s.text.encode('utf8')
# print
#
# print "Recent Tweet: "+recent_tweet.encode('utf8')

status の中で s.text.startswith("RT") が 真 のものがひとつもなければ
referenced before assignment になるだろう



873 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 03:55:08 ]
かぶった(笑
しかもこんな時間に orz

874 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 04:50:49 ]
>>871
>>872
あ、そうか…なるほど。ありがとうございます。
つまりfor文の前にrecent_tweetに適当なダミーの値でも入れておけばいいですか?
作法としてはどうすべきなんでしょうか。

875 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 06:06:48 ]
python 的にはこんなんでどうか

for s in status:
   if s.text.startswith("RT"):
      recent_tweet = s.text
      break
   else:
      print "The following tweet would be posted by hand, so skipped it."
      print "Tweet: " + s.text.encode('utf8')
      print
else:
  recent_tweet = 'None'
     
print "Recent Tweet: "+recent_tweet.encode('utf8')


876 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 23:47:14 ]
ちょっと力を貸して欲しいんですけど
linuxでbash scriptからpython scriptを起動しようとしてます。

すると、print()行でIOErrorが出てpython scriptは終了しちゃうんです。
IOError: [Errno 5] Input/output error

terminalで実行すると問題ないので、出力先が無いためのエラーだと
思うんですが、print()行を消さなくちゃ解決できない問題でしょうか?

877 名前:デフォルトの名無しさん mailto:sage [2010/08/10(火) 02:27:23 ]
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘

878 名前:デフォルトの名無しさん [2010/08/10(火) 02:53:46 ]
print関数だよな?

def print(*args, **keys): pass
で関数を上書き

879 名前:デフォルトの名無しさん mailto:sage [2010/08/10(火) 07:11:15 ]
printは関数じゃなくね?3系列ならできるんだろうか
import sys
sys.stdout = open('bbbb, 'a')
print "aaa bbbb ccccc"
的なものではどうだろうか



880 名前:デフォルトの名無しさん mailto:sage [2010/08/10(火) 11:29:32 ]
もしくは起動するときに >/dev/null しておけ。

881 名前:876 mailto:sage [2010/08/10(火) 12:32:24 ]
>>878, 879
確かに上書きできませんでした。
879はログを作るってことですよね。

IOError現象は初めて気づいたのですが、
結局アウトプット先を明示する処理を挟まないと
エラーになるってことなんですかね。

そこらへん自動でやってくれる方法があるものだと
思い込んでました。

なぜかバックグラウンドでプログラムが落ちまくるので
変だなーと思ってました。

>>880
自分も/dev/nullでイケるかと思ってたんですが
なぜか、同じ結果になりました。

882 名前:デフォルトの名無しさん mailto:sage [2010/08/11(水) 02:30:44 ]
>>875
ありがとうございます!ダミーでもよさそうでしたけど
そっちの方が綺麗なのでそうします。








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<217KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef