■ このスレッドは過去ログ倉庫に格納されています
くだすれPython(超初心者用) その9
- 1 :デフォルトの名無しさん:2010/11/07(日) 13:49:46
- このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、
お礼は Python の布教と初心者の救済をお願いします。
エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>950 辺りで
前スレ
くだすれPython(超初心者用) その8
http://hibari.2ch.net/test/read.cgi/tech/1282537545/
関連スレ
Pythonのお勉強 Part40
http://hibari.2ch.net/test/read.cgi/tech/1288342460/
◆関連リンク
Python の Home Page
ttp://www.python.org/
Python 日本語ドキュメント
http://pythonjp.sourceforge.jp/dev/
最新版直リン - 2.Xが推奨。3.Xはライブラリやドキュメントが使えないことも
ttp://www.python.org/download/
Python のコーディングガイド PEP8
ttp://www.python.org/dev/peps/pep-0008/
Python のコーディングガイド PEP8 - 日本語訳
ttp://www.oldriver.org/python/pep-0008j.html
日本語文字列コード問題まとめ
ttp://python.matrix.jp/tips/string/encoding.html
インタラクティブモードのエンコード
ttp://python.matrix.jp/tips/compatibility/interact_encoding.html
SJISから卒業出来ないひとのための禁じ手
reload(sys); sys.setdefaultencoding('cp932')
- 2 :デフォルトの名無しさん:2010/11/07(日) 13:50:59
- ※ 荒し・キチガイ・自分で努力しない人等は放置で
- 3 :デフォルトの名無しさん:2010/11/07(日) 13:53:30
- Pythonの文字化け対策:sys.setdefaultencodingの謎
ttp://hain.jp/index.php/tech-j/2008/01/07/Python%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91
実行時にdefaultencodingを変更する
ttp://d.hatena.ne.jp/perezvon/20070715/1184469534
PEP-8とか
ttp://www.python.org/dev/peps/pep-0008/
ttp://oldriver.org/python/pep-0008j.html
Google Python Style Guideとか
ttp://google-styleguide.googlecode.com/svn/trunk/pyguide.html
ttp://works.surgo.jp/translation/pyguide.html
┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘
- 4 :デフォルトの名無しさん:2010/11/07(日) 13:55:29
- Rubyリファレンスマニュアル刷新計画
ttp://doc.loveruby.net/
ライブラリ一覧
ttp://doc.loveruby.net/refm/api/
RubyExtensionProgrammingGuide
ttp://i.loveruby.net/w/RubyExtensionProgrammingGuide.html
Ruby Hacking Guide
ttp://i.loveruby.net/ja/rhg/
- 5 :デフォルトの名無しさん:2010/11/07(日) 16:39:44
- 錦蛇は嫌い!
- 6 :デフォルトの名無しさん:2010/11/07(日) 17:53:52
- >>1乙
- 7 :デフォルトの名無しさん:2010/11/08(月) 02:45:59
- ぱーいそーん
むーずかしーいいいいい
>>1
おつ
- 8 :デフォルトの名無しさん:2010/11/08(月) 17:27:40
- クラスのメンバ変数で日本語名使ったらLexical errorってのが出るんですが、命名規則に日本語不可ってありましたか?
1行目にフィールド名のあるCSVを読み込むクラスなのでできれば対象性を維持したいのですが、オプションスイッチかなんかで対処できませんか?
- 9 :デフォルトの名無しさん:2010/11/08(月) 17:31:27
- 文字コードは?
- 10 :デフォルトの名無しさん:2010/11/08(月) 17:32:57
- 良いか悪いかはともかくPython3なら使えたような
- 11 :デフォルトの名無しさん:2010/11/08(月) 17:39:50
- SJISならutf-8に変換汁
- 12 :デフォルトの名無しさん:2010/11/08(月) 17:56:00
- >>9
utf-8です
>>10
バージョンは2.5系です GAE関連なので・・・
utf-8です
2.5系はダメっぽいですね・・・
- 13 :デフォルトの名無しさん:2010/11/08(月) 20:49:53
- Python 2.5.4
http://docs.python.org/release/2.5.4/ref/identifiers.html
Python 3.x
http://docs.python.org/py3k/reference/lexical_analysis.html#identifiers
- 14 :デフォルトの名無しさん:2010/11/09(火) 06:49:44
- >できれば対象性を維持したいのですが
row.名前
row['名前']
の違いしかないんだったら後者で良いと思う
- 15 :デフォルトの名無しさん:2010/11/09(火) 09:17:26
- >>13
2.5はやはり英数字と_だけってことですね
>>14
GAEなのでフィールドはdb.Modelを継承したクラスのメンバ変数として宣言しないといけないんです・・・
最初に書かなくて申し訳ありません
こういうときはカッコ悪くてもフィールド名をローマ字表記にするものですよね?
個人的にとても嫌ですw
ありがとうございました
- 16 :デフォルトの名無しさん:2010/11/09(火) 10:18:57
- どうせ自動化するんだろうから
メンバ変数名自体は人間が読めなくてもいいよね
base64 みたいに
日本語(8bit) <-> 英数字と_だけ
のエンコードしてみるとかはどう?
(base64 だと +/ が引っかかるので)
- 17 :デフォルトの名無しさん:2010/11/09(火) 10:29:25
- >>15
__getitem__を実装して好きなメンバにマッピングすればいいじゃん
- 18 :デフォルトの名無しさん:2010/11/09(火) 13:35:19
- >>16
なるほど!参考になりました
>>17
調べてみます
この場合のキーは日本語でOKってことですね
なるほど
- 19 :デフォルトの名無しさん:2010/11/10(水) 20:25:17
- 変数の入れ物としてクラスを
class Foo: pass
Foo.foo = 1
Foo.bar = 2
のように使うという方法があるけど、
関数の入れ物を作りたいときってどうすればいい?
class Foo: pass
Foo.foo = staticmethod(f)
Foo.bar = staticmethod(g)
っていちいちするのも面倒だし。
- 20 :デフォルトの名無しさん:2010/11/10(水) 21:11:47
- >>19
自前のFoo.__setattr__()を定義してはいけないのか?
- 21 :デフォルトの名無しさん:2010/11/11(木) 00:37:45
- >>19
その例だけだとクラスにする意味がない。
class Foo: pass
foo = Foo()
foo.foo = 1
foo.bar = f
- 22 :デフォルトの名無しさん:2010/11/11(木) 07:50:00
- def foo(): pass
foo.foo = 1
とかでもできるんだな。
けど使い方としてとてもまともとは思えない…
>>20
いけなくはないけど面倒
>>21
複数作りたいならそうだけど、1個でいい場合もそうするメリットってある?
- 23 :デフォルトの名無しさん:2010/11/11(木) 09:12:41
- 条件後出しすんなボケ
- 24 :デフォルトの名無しさん:2010/11/11(木) 09:52:59
- >>22
こういうのはどうだろうか
http://code.activestate.com/recipes/52308/
- 25 :デフォルトの名無しさん:2010/11/11(木) 13:53:13
- __setattr__ すら書くの面倒なんだろう?
- 26 :デフォルトの名無しさん:2010/11/11(木) 14:43:07
- >>22
>複数作りたいならそうだけど、1個でいい場合もそうするメリットってある?
クラスならFoo.bar = staticmethod(f) としなければいけないけど
オブジェクトなら foo.bar = f で済む。
もとの>>19がそういう質問だったから。
- 27 :デフォルトの名無しさん:2010/11/11(木) 17:20:21
- http://stackoverflow.com/questions/1264833/python-class-factory-to-produce-simple-struct-like-classes
- 28 :デフォルトの名無しさん:2010/11/12(金) 00:50:19
- >>26
ほんとだ!ありがとうございます。
- 29 :デフォルトの名無しさん:2010/11/12(金) 12:24:47
- 【質問】
Beautiful Soupを使ってhtmlコンテンツのスクレイピングをしようと思っています。contents[n]に<div class=”info01”>製作年月日</div>のようなタグがあった時、そのnを求める方法はありますか?
- 30 :デフォルトの名無しさん:2010/11/12(金) 13:00:40
- あります
- 31 :29:2010/11/12(金) 13:04:38
- >30
ぜひ方法を教えて下さい。
- 32 :デフォルトの名無しさん:2010/11/12(金) 13:41:21
- >>29
http://dpaste.com/274274/
- 33 :デフォルトの名無しさん:2010/11/13(土) 02:36:31
- つかれた時の気分転換はなんですか。
- 34 :デフォルトの名無しさん:2010/11/13(土) 13:55:45
- みんなのPythonを今日一日で読破するぜ!
- 35 :デフォルトの名無しさん:2010/11/13(土) 13:59:31
- python2.6です
lxmlでxmlを読み込めるようになって
print "root:" + root.tag
print "node:" + root[0].tag
で
root:image
node:stack
というのが読み込める様にはなったんですが
""のなかの値を呼び出すにはどうしたらいいですか?
↓xmlファイルの中身
<?xml version='1.0' encoding='UTF-8'?>
<image h="896" w="896">
<stack>
<layer mypaint_strokemap="data/layer000_strokemap.dat" opacity="1.0" src="data/layer000.png" x="256" y="0" />
<layer mypaint_strokemap="data/layer001_strokemap.dat" opacity="1.0" src="data/layer001.png" x="0" y="64" />
<layer background_tile="data/background_tile.png" name="background" opacity="1.0" src="data/background.png" x="0" y="0" />
</stack>
</image>
- 36 :デフォルトの名無しさん:2010/11/13(土) 14:09:29
- lxmlは使ってないからよく知らないけど
ElementTree互換だったはずだから
root.get('h') # '896'
root.find('stack/layer').get('mypaint_strokemap') # 'data/layer000_strokemap.dat'
とかできるんじゃまいか
- 37 :デフォルトの名無しさん:2010/11/13(土) 14:10:36
- 属性のこと?
attribかgetを使う。
- 38 :デフォルトの名無しさん:2010/11/13(土) 14:31:26
- 前スレ>>838か
結構頑張るね
- 39 :35=838:2010/11/13(土) 14:33:29
- ありがとうございます!!!
できました!
しかし
stack/layerのmypaint_strokemapっていうのが2個あって
別々に""の中身をとりだすにはどうしたらよいのでしょうか
print root[1].find('stack/layer').get('mypaint_strokemap')
でも
print root.findall('stack/layer').get('mypaint_strokemap')
とやってみましたが
エラーでしたOTL
>38
ありがとう。コツコツやってはいるんだけどね・・・。
- 40 :デフォルトの名無しさん:2010/11/13(土) 14:36:40
- >>33
趣味のプログラムを書く
- 41 :デフォルトの名無しさん:2010/11/13(土) 14:49:00
- >>39
layers = root.findall('stack/layer')
for layer in layers:
if 'mypaint_strokemap' in layer.keys():
print layer.get('mypaint_strokemap')
あとは聞く前にこっち読んでね
わからなかったら質問するといい
http://effbot.org/zone/element-index.htm#usage
http://effbot.org/zone/pythondoc-elementtree-ElementTree.htm
- 42 :デフォルトの名無しさん:2010/11/13(土) 15:10:58
- >>41
うわあできたすごい!!
ありがとうございます!!
- 43 :デフォルトの名無しさん:2010/11/13(土) 15:39:35
- Jython 入れてみた
spiroserver/spiroclient のデモを実行してみた
spiroserver の止めかた誰か教えて orz
- 44 :デフォルトの名無しさん:2010/11/13(土) 15:57:48
- Python2.7のElementTreeはv1.3なんだね
v1.3はXPathで属性の述語が使えるようになったので
>>41はこんなふうにも書ける(lxmlでもいけるかも)
layers = root.findall('stack/layer[@maypaint_strokemap]')
>>43
Ctrl+CとかCtrl+DとかCtrl+Zとか別のコンソールからkillとか?
- 45 :デフォルトの名無しさん:2010/11/13(土) 23:00:33
- >>43でJythonの質問出てるけどここで聞いていいのかな?
Jython+awtで窓を出したいんだけど
一瞬だけ表示されて(または一切表示されずに)終了してしまいます
スクリプトの最後に到達してプロセスが終了しちゃうんじゃないかと思い
http://d.hatena.ne.jp/Monolithic/20080825/1219665865
ここに書いてあるようにイベントキュー(?)を使ってみましたが直りません
javaとjythonのバージョンはjava6u22とjython2.5.2RC2です
- 46 :デフォルトの名無しさん:2010/11/13(土) 23:08:16
- >>45
で、ソースはどこですか?
- 47 :デフォルトの名無しさん:2010/11/13(土) 23:10:46
- ここの内容そのままでもダメでした
http://d.hatena.ne.jp/Monolithic/20080825/1219665865
- 48 :45:2010/11/13(土) 23:22:44
- プロセスが終了してしまうなら対話モードなら?と思い実験してみました.
「jython スクリプト.py」
ではなく,
if __name__=='__main__'
を消してインタラクティブシェルからインポートしてみると
ウィンドウは表示されたままになりました
やはりプロセスが終了することが原因のようです
- 49 :デフォルトの名無しさん:2010/11/14(日) 02:09:41
- どうみても Java スレ池って言われる内容だからなぁ
- 50 :デフォルトの名無しさん:2010/11/14(日) 03:35:45
- import spiroclient
c = spiroclient.SpiroClient('test')
java = c.doimport('java')
javax = c.doimport('javax')
class PyCallableRunnable(java.lang.Runnable):
def __init__(self, pyCallable):
self.pyCallable = pyCallable
def run(self):
self.pyCallable()
def initializeAWT():
def windowClosing(e):
w = e.getWindow()
w.visible = False
w.dispose()
javax.swing.JFrame(windowClosing=windowClosing, bounds=java.awt.Rectangle(800, 600),
title='Hello, work!', visible=True)
java.awt.EventQueue.invokeLater(PyCallableRunnable(initializeAWT))
raw_input('hit enter to end')
うまくいきません><
- 51 :デフォルトの名無しさん:2010/11/14(日) 03:38:58
- import spiroclient
c = spiroclient.SpiroClient('test')
javax = c.doimport('javax')
f = javax.swing.JFrame(bounds=javax.swing.Rectangle(800, 600), title='Hello, work!', visible=True)
raw_input('hit enter to end')
f.dispose()
これならちゃんと動くんですけど><
- 52 :デフォルトの名無しさん:2010/11/14(日) 08:48:07
- PythonMagickの命令方法を教えて下さい。
一応Pythonでバッチファイル作って普通のImageMagikcの
命令を書き込んでいるんですが
どうせならPythonで全部やってみたいです。
- 53 :デフォルトの名無しさん:2010/11/14(日) 21:18:34
- リストに値がうまく入らないのですがどうしたらいいですか?
YYYにはちゃんと値がはいるんですけどYYYのところにY[i]を入れるとエラーになります。
layers = root.findall('stack/layer')
i=0
for layer in layers:
if 'mypaint_strokemap' in layer.keys():
print layer.get('src')+" opacity="+layer.get('opacity')+" X="+ layer.get('x')+" Y="+layer.get('y')
#pngfilename[i] = layer.get('src')
#op[i] = layer.get('opacity')
#X[i] = layer.get('x')
YYY = layer.get('y')
i=i+1
- 54 :53:2010/11/14(日) 21:58:01
- あああ、なんか現象は分かったんだけど
h = []
h[0] = 10
print h[0]
だとエラーで
h = [4,5,3]
h[0] = 10
print h[0]
だとうまくいくけど
最初に要素がいくつあるかなんて
分かんないしどうすればいいですか・・・
- 55 :デフォルトの名無しさん:2010/11/14(日) 22:06:04
- >>54
h = [] は要素0だぞ
h[0]に10を入れたいなら
h.append(10)
- 56 :デフォルトの名無しさん:2010/11/14(日) 22:09:58
- >>55
うおおおありがとうございます!!!
- 57 :デフォルトの名無しさん:2010/11/15(月) 00:14:23
- Cで配列のバイト確保して直接代入するの思い出した
- 58 :デフォルトの名無しさん:2010/11/16(火) 00:36:28
- なんとか作ったプログラムをpy2.exeでexe化して実行したら
えらーがでたけど正直何をどうしていいか分かりません。
助けて下さいOTL
↓実行したときの画像
http://up3.viploader.net/ippan/src/vlippan167785.jpg
conv.pyが自分が作ったパイソンのファイルで
その10行目は
from lxml import etreeです。
で、もちろんexeにするまえのpyの状態ではエラーは出ていませんでした。
- 59 :58:2010/11/16(火) 00:40:18
- python2.6
py2.exeは0.69です。
- 60 :デフォルトの名無しさん:2010/11/16(火) 00:41:31
- すみません、Python初心者の僕から質問があります。
http://www.h3dapi.org/modules/mediawiki/index.php/Mouse_sensor
↑こちらのサイトを見ながら
↓このコードを理解しようとしていますが
# ColorクラスのSFColor型とその値は、SFBoolのフィールドによってルーティングが決定される
# 格納された値が1である場合(マウスクリックされた場合)色は赤となり、その他の値であれば青となる
class Color( TypedField( SFColor, SFBool ) ):
def update( self, event ):
if event.getValue():
return RGB( 1, 1, 0 )
else:
return RGB( 0, 0, 1 )
マウスをクリックした場合に色が変わる、という部分がいまいちよくわかりません・・・。
event.getvalue():では一体何を判断しているのでしょうか?
if event==0やevent==1では上手く動きませんでした。
- 61 :デフォルトの名無しさん:2010/11/16(火) 01:24:51
- includesで_elementpathを使うぞとpy2exeにやさしく教えてあげる
- 62 :デフォルトの名無しさん:2010/11/16(火) 01:34:27
- >61
具体的には何をどうすればいいですか???
- 63 :デフォルトの名無しさん:2010/11/16(火) 01:51:16
- >>60
Python固有の話じゃないのでここで回答をもらうのは正直きついと思う
使ってる人が多いツールキットなら別だけど
ってだけだとあれなので
http://www.h3dapi.org/modules/mediawiki/index.php/H3DAPI_with_Python
> Before proceeding through the examples on this page, the reader should have
> gotten a background on H3D programming from Chapter 4 of the H3DAPI manual.
- 64 :デフォルトの名無しさん:2010/11/16(火) 02:40:53
- Pythonのスレは親切な良スレだな。
- 65 :デフォルトの名無しさん:2010/11/16(火) 07:22:34
- python で firebird の DB にアクセスするプログラムを書いてみているのですが
DB がネットワークドライブ上にあるとうまくいかないみたいです
ローカルドライブにあるファイルなら正常に動作することが出来ました
ネットワークドライブ上の DB でも使えているかたはいらっしゃいますか?
(OS は windows でネットワークドライブにはドライブ名を割り当てて接続しています)
- 66 :デフォルトの名無しさん:2010/11/16(火) 08:02:41
- 750 :NAME IS NULL:2007/10/29(月) 12:20:29 ID:???
FB2.1beta2試してますが、kinterbasdbで接続できないのは
いやがらせですか?
とあったが、どうやらいやがらせでなくてメンテナが亡くなったので・・・
http://sourceforge.net/forum/forum.php?thread_id=1796865&forum_id=30917
Firebird 2.1 に対応できてないっぽい
http://sourceforge.net/forum/forum.php?thread_id=1856392&forum_id=30917
ここ↑では、「private では fix できたぜ!」と言っておきながら、ソースを見せてくれないし、
後になって「おらQA担当で Cのデベロッパーじゃないだよ」とか言い出してるから、本当に fix できてるのかはあやしい。
や、やばいんでないの?
Firebird 2.0 と 2.1 でプロトコルがどう変わったか誰か教えて。
つーか、kinterbasdb を Firebird 2.1 で動くようにして。
それにしても、kinterbasdb のメンテナが亡くなったのは知っていたが、状況からして、
ほとんど一人で開発してたっぽいなぁ。割としっかりしたプロジェクトだと思っていたが、層が薄くてびっくり。
- 67 :デフォルトの名無しさん:2010/11/16(火) 09:24:06
- 初めてのPython 第3版
を読むか
http://pythonjp.sourceforge.jp/dev/tutorial/index.html
こちらのページを読むか、どちらがスムースに学習できるでしょうか?
- 68 :デフォルトの名無しさん:2010/11/16(火) 09:35:13
- >>67
両方嫁
- 69 :デフォルトの名無しさん:2010/11/16(火) 09:57:24
- >>67
まず後者のチュートリアルを読んでみる
そこそこ理解できるようならそのまま読み続ければおk
わけわかんねえよ氏ねよってなるなら前者を買って読む
- 70 :67:2010/11/16(火) 13:28:24
- >>69
ありがとうございます。
後者の数ページを読んでみたのですが、突発的にいろいろな用語が出てきて
このまま読み切ってもいいものか心配でした。
書籍の方を購入してみます。
- 71 :デフォルトの名無しさん:2010/11/16(火) 14:18:26
- >>70
その程度ならもう少し読みつづけてから判断したほうがいいよ
チュートリアルの1,2
- 72 :デフォルトの名無しさん:2010/11/16(火) 14:20:41
- 途中で書き込んでしまってごめん
チュートリアルの1,2章は軽く読み流してもOK
それ以降の章を読んでいて何が何やらまったくわからないってレベルであれば
本を買った方がいい
- 73 :デフォルトの名無しさん:2010/11/16(火) 14:53:27
- あの・・・pythonmagickのインストール方法を教えて貰えませんか??
python 2.6です
http://www.imagemagick.org/download/python/
から0.9.2というのをダウンロードして解凍すると
INSTALLというファイルがあったので
コマンドプロンプトからsetup.py INSTALLを試したのですが
PythonMagick-0.9.2のフォルダーにsetup.pyがないので駄目でした
easy_install PythonMagickもやってみましたが
attributeErrorになり駄目でした。
- 74 :デフォルトの名無しさん:2010/11/16(火) 15:03:24
- Pythonで実効速度を計りたいのですが
CPU使用率に依存されずに計れる方法ありますか?
例えば、1秒間のクロック数を調節(固定)する方法など
それと、実効速度を早くしようと、一部numpyを使ってみたのですが、数倍遅くなってしまいました
numpyを使用すると高速になる場合ってどのような場合ですか?
配列次元数が数百次元とかの場合とかですかね…
現在は、n個のオブジェクトが、それぞれn*nのリストを使っています
全行、それぞれ異なる列の値を+=や*=などで更新するのと、全体の値を、ある最大値以上にならないように、=min(現在値,最大値)で更新してます
nは、50〜200程度で、今は扱ってませんが、数千まで利用出来る状態にして起きたいです
numpyの速度改善を確かめるため、一部を変更しました
関数の引数であるリストを配列に変更し、処理し、最後にリストに変更して返す
という処理にしたので、リストを配列にする処理に時間がかかったため実効時間が遅くなり、一部ではなく全部をnumpyで配列にすれば早くなりますか?
プログラムを全部書き換えるのは時間がかかるためまだ試してません
- 75 :デフォルトの名無しさん:2010/11/16(火) 15:09:00
- >>74
http://img.f.hatena.ne.jp/images/fotolife/a/as1mo/20101112/20101112005926.gif
- 76 :デフォルトの名無しさん:2010/11/16(火) 15:25:52
- >>75
携帯で.gifは見れないので、家に帰れた時に確認します
- 77 :デフォルトの名無しさん:2010/11/16(火) 15:26:49
- 見なくていいと思うよ
- 78 :デフォルトの名無しさん:2010/11/16(火) 15:57:32
- グロ中尉
- 79 :デフォルトの名無しさん:2010/11/16(火) 16:09:11
- >>73
README読めよ
- 80 :デフォルトの名無しさん:2010/11/16(火) 16:40:56
- >>73
どうせWindowsだろ?インストーラ↓
http://www.lfd.uci.edu/~gohlke/pythonlibs/#pythonmagick
- 81 :デフォルトの名無しさん:2010/11/16(火) 16:44:12
- これは素晴らしい
- 82 :デフォルトの名無しさん:2010/11/16(火) 17:01:51
- >>61
できました!!!
ありがとうございます!!
- 83 :デフォルトの名無しさん:2010/11/16(火) 17:04:21
- >>80
うひゃえあああああ!!!
ありがとうございます!!!!1
- 84 :デフォルトの名無しさん:2010/11/16(火) 20:26:23
- pythonでうまく出来ない部分をバッチファイルや外部のexeファイルで行いたいです。
肝心のpythonでバッチファイルやexeファイルを起動させる方法を教えて下さい。
あんまり基本すぎてPython入門サイトにも載ってないです。
- 85 :デフォルトの名無しさん:2010/11/16(火) 20:48:22
- os.system()
もっと細かいことがしたければsubprocessモジュール
- 86 :デフォルトの名無しさん:2010/11/16(火) 20:49:16
- >>85
ありがとうございます!!
- 87 :デフォルトの名無しさん:2010/11/17(水) 00:43:10
- もう・・・本当にしょうもない質問で悪いんだけど
文字列に「 ' 」と「 " 」を入力するにはどうしたらいい??
- 88 :デフォルトの名無しさん:2010/11/17(水) 00:44:50
- '\'' "\""
- 89 :デフォルトの名無しさん:2010/11/17(水) 00:46:23
- '"' "'"
- 90 :デフォルトの名無しさん:2010/11/17(水) 00:54:48
- >88、>89
ありがとうございます!
- 91 :デフォルトの名無しさん:2010/11/17(水) 02:56:07
- PythonってC言語から移行するなら他のLL言語より覚えやすいかな?
そんなのしらねぇよって思うかも知れませんが。。
- 92 :デフォルトの名無しさん:2010/11/17(水) 07:51:15
- なんで移行すんの。w
c知ってんならcでやれよ。w
BASICからの移行なら判るけどさ。w
- 93 :デフォルトの名無しさん:2010/11/17(水) 07:51:48
- 覚えやすい
- 94 :デフォルトの名無しさん:2010/11/17(水) 07:59:04
- >>91
そんなのしらねぇのでPerl, Python, Rubyの処理系を落としてきて
実際に触って自分に合ってそうなのを使えばおk
実際のソースを見比べて判別がつくならそれでもいい
触って試す際に一緒に参照すべきチュートリアルもぐぐれば見つかるし
各言語のスレのテンプレにも載ってるだろう
- 95 :デフォルトの名無しさん:2010/11/17(水) 19:18:41
- >>91 >>94
プログラミング基礎文法最速マスターまとめ - ネットサービス研究室
http://d.hatena.ne.jp/seikenn/20100203/programmingMaster
これ見て合いそうなのやってみれば
ただし目的のライブラリが揃っているかとか、どういう目的でどの環境だと開発しやすいかとか別だから
参考にならないと思う
- 96 :デフォルトの名無しさん:2010/11/17(水) 19:26:07
- ありがとう、色々比べて見てから決めたいと思います。
- 97 :デフォルトの名無しさん:2010/11/18(木) 00:57:11
- zipファイルを作るスクリプトを作ったのですが
全てのファイルの場所と名前を取得できたものの
フォルダーの場所(zipファイル内のファイルのアドレス)がうまく編集できません。
フォルダーの場所を編集しようと
root.replale(diepath,"")
としてみましたが文字列とアドレスの関係かエラーでした・・・。
どうすればいいのでしょうか?
↓スクリプト
dirpath = os.path.join(batdir , "henkan")
zippath =os.path.join(batdir ,"henkan.zip")
zip = zipfile.ZipFile(zippath, 'w')
for root, dirs, files in os.walk(dirpath):
dec_root = root.decode("cp932")
for file in files:
#root=str(root)エラーだった
#print root.replale(diepath,"")
fullpath = os.path.join(root, file)
enc_path = file.encode('mbcs')
enc_fullpath = fullpath.encode('mbcs')
zip.write(enc_fullpath,enc_path)
zip.close()
- 98 :デフォルトの名無しさん:2010/11/18(木) 00:59:26
- easy_installとnoseというものを使ってみた
easy_install便利すぎる。なんでもっとはやく教えてくれなかったんだ
- 99 :デフォルトの名無しさん:2010/11/18(木) 04:08:48
- >>97
もともと何がやりたいのかよくわからんな
フォルダの場所を編集っていうのは、一部のフォルダを無視したいってこと?
- 100 :デフォルトの名無しさん:2010/11/18(木) 06:44:59
- zipファイルに絶対パスでなく相対パスで各メンバ(ファイル)を収納したいとか
そういうことじゃまいか
もしそうなら使えそうなのは os.chdir(path) か os.relpath(path, start) あたりか
引数は適当に調整してね
- 101 :デフォルトの名無しさん:2010/11/18(木) 07:45:06
- >>97
http://pythonjp.sourceforge.jp/dev/library/os.path.html#os.path.relpath
- 102 :デフォルトの名無しさん:2010/11/18(木) 15:32:05
- プログラミング言語間の文法比較はお腹いっぱいなので、
今後は、ライブラリの充実度を比較する記事をよろしくたのむ。
- 103 :デフォルトの名無しさん:2010/11/18(木) 21:06:08
- Windows用のエディタを探しています。
Pythonに対応して、utf8が扱え、HTMLの編集も便利な、初心者向けのエディタは何がいいでしょうか。
ベクターや窓の杜で調べましたが、Pythonに対応しているのがなかなかなくて、JmEditorというのが対応してるっぽいくらい。
なんかお勧めあれば教えてください。
- 104 :デフォルトの名無しさん:2010/11/18(木) 21:10:26
- サクラエディタ。デフォルトではないけどググれば設定の仕方すぐ分かる
- 105 :デフォルトの名無しさん:2010/11/18(木) 21:22:49
- Mery デフォルトでpython色分け対応
- 106 :デフォルトの名無しさん:2010/11/18(木) 21:33:42
- 初心者向けじゃないかもしれないが、Notepad++とか
- 107 :デフォルトの名無しさん:2010/11/18(木) 21:33:43
- タブを押してスペースが4つ入るエディタならなんでもいいよ
- 108 :デフォルトの名無しさん:2010/11/18(木) 22:21:10
- Notepad++, EmEditor, サクラエディタ
Emacs, Meadow, xyzzy
Eclipse+PyDev, NetBeans, PyScripter
- 109 :97:2010/11/18(木) 23:21:04
- >>99->>101
エスパーして頂いてありがとうございます!!
そうです、相対パスです!助かりました!!
- 110 :デフォルトの名無しさん:2010/11/18(木) 23:37:02
- >>104-108
アドバイスありがとうございます。
GinnieというエディタがPython標準対応し、見た目もきれいそうなので、これを使おうかと思います。
ttp://ginnie.kntware.net/free/
おすすめいただいたエディタを触ってみた感想です。
サクラエディタ:Python用の設定を自分でするのがけっこう面倒。
Mery: Python対応のメモ帳みたい。機能がシンプルすぎる。
PyScripter: 文法エラーの表示などPythonだけならすてき。ただHTMLなど他のファイルの編集が弱い。
Emacs、Meadow、xyzzy: 初心者向けエディタを探しているので、今回はパス
Ecipse+PyDev、NetBeans: Javaのインストールが必要なのと、メモリを食い過ぎるのでパス
Notepadd++、EmEditor:未使用
ありがとうございました。
- 111 :デフォルトの名無しさん:2010/11/18(木) 23:39:41
- あれだけで結構面倒ならもう何も言うまい
- 112 :デフォルトの名無しさん:2010/11/18(木) 23:58:10
- 趣味で使う分にはemEditorやサクラ、テパエディターもJmEditorも全部有用だったけどなあ。
でかいもん作るのはそもそもちっぽけなエディターに任せないし、メモ帳+αの機能があれば十分。
- 113 :デフォルトの名無しさん:2010/11/19(金) 00:00:34
- geditかvi
- 114 :デフォルトの名無しさん:2010/11/19(金) 00:03:14
- 結論が付いたんだからもう良いじゃないかw
- 115 :デフォルトの名無しさん:2010/11/19(金) 00:14:38
- Notepadd++って良いネーミングセンスしてるな
- 116 :デフォルトの名無しさん:2010/11/19(金) 00:15:55
- じゃあ次世代PythonはPython++(ぱいそんぷらぷら)で決まりか
- 117 :デフォルトの名無しさん:2010/11/19(金) 00:22:59
- add++
- 118 :デフォルトの名無しさん:2010/11/19(金) 00:28:30
- あれ、特に理由もなくサクラエディタ使ってたけど
Python対応の「対応」ってなに?
なんかいい事あるの???
- 119 :デフォルトの名無しさん:2010/11/19(金) 00:38:21
- eclipse+pydevみたいな予約語とかメソッド名の入力補完は便利だよね
補完候補から選ぶよりタイプした方早いけど、名前忘れちゃった時とかね
仕事で使う人はどれなのか知らんけど
- 120 :デフォルトの名無しさん:2010/11/19(金) 09:14:58
- http://www.python.jp/Zope/workshop/201012/
出場者がやたらに豪華だ
- 121 :デフォルトの名無しさん:2010/11/19(金) 10:06:17
- Python対応ってのは言語のハイライトが初期状態で出来るって意味だろう
IDEとしては入力補完や構文の整形とか
- 122 :デフォルトの名無しさん:2010/11/19(金) 11:38:15
- >>102
めんどくせーから直感だけど。
ライブラリの充実度は
perl > python > ruby > php
ただし、web関連に限った場合は
php > perl > ruby > python
- 123 :デフォルトの名無しさん:2010/11/19(金) 13:11:21
- perl > php> ruby> python> curl> lua
- 124 :デフォルトの名無しさん:2010/11/19(金) 16:58:14
- rubyじゃなくてrailsな
- 125 :デフォルトの名無しさん:2010/11/19(金) 17:09:40
- またそうやって古参Rubyistみたいなことを
- 126 :デフォルトの名無しさん:2010/11/19(金) 18:35:02
- phpってあれだけ普及しててライブラリすくないのか?
- 127 :デフォルトの名無しさん:2010/11/19(金) 19:03:34
- CPANは数は多いけど、大半が無かったら簡単に自作できるようなスクリプトで、
C言語で書かれた有名ライブラリのバインディングが多いのはPythonという印象がある。
Linuxアプリで最近すげー使われてる影響で。
- 128 :デフォルトの名無しさん:2010/11/19(金) 21:47:57
- linuxじゃperl後継としてのpythonだからな
まあサーバだとperlだけど
- 129 :デフォルトの名無しさん:2010/11/19(金) 22:02:32
- Windows XP Service Pack 3です。
C:\>python --versionってやったらPython 2.7って出て来ます。
メーラーの一つであるThunderbirdを使っていると
たまに終了時にプロセスがちゃんと終了しないことがあり、
その場合は毎回タスクマネージャーから現在 動いているプロセスを
ttp://uproda.2ch-library.com/315606VEo/lib315606.jpg
こうやって確認して、Thunderbirdの手動でプロセスを終了しています。
これが面倒なので、Pythonで自動化するにはどう書けば良いでしょうか?
具体的にはそのスクリプトを起動すると
プロセスのうちから名前にthunderbirdと含まれる(大文字小文字を区別しない)プロセスを選び出し
2つ以下ならそれら該当した物を全て強制的に終了する
ということがしたいのです。
os.process.kill(".*thunderbird.*")みたいなことが書けるといいのですが。。。
よろしくお願いいたします。
- 130 :デフォルトの名無しさん:2010/11/19(金) 23:44:10
- 2つ以下という縛りがなければこんなふうには書けるみたい
# pkill.py
import sys, subprocess
subprocess.call('taskkill /fi "imagename eq %s" % sys.argv[1])
c:\> pkill.py thunderbird*
- 131 :デフォルトの名無しさん:2010/11/20(土) 00:02:32
- >>129
ctypesでpsapi叩いても書けるはずだが、まあ面倒だろう
どうしてもPythonでやりたいのなら、IronPythonが楽そう
for ps in System.Diagnostics.Process.GetProcesses():
if 'thunderbird' in ps.MainModule.ModuleName.lower():
ps.Kill()
こんな感じじゃないの、試してないから怪しいけど
- 132 :デフォルトの名無しさん:2010/11/20(土) 00:34:50
- >>130-131
ありがとうございます。
ご教示いただいた内容を次のThunderbirdフリーズ時に試してみます。
(まあ本当はThunderbirdが何故うまく動かないのかについて考える方が大事なんですけどね。)
- 133 :132:2010/11/20(土) 00:55:07
- >>130
os.system("c:\> pkill.py thunderbird*")
ってやれば全部Python上で行けたりしませんかね。
それも今度チャンスがあったら試してみます。
- 134 :デフォルトの名無しさん:2010/11/20(土) 01:09:31
- それならPythonは要らないような。テキストファイルに
taskkill /fi "imagename eq thunderbird*"
って書いて適当な名前で保存してダブルクリックで足りそう
- 135 :デフォルトの名無しさん:2010/11/20(土) 01:11:34
- 訂正。適当な名前じゃまずいね
拡張子は .bat で
- 136 :デフォルトの名無しさん:2010/11/20(土) 01:14:43
- >>134>>135
ありがとうございます。
ただ、Windows XP Service Pack 3にはtaskkill.exeという機能が入っていないようです。
Professional以上ではあるらしいんですが。。。
taskkill簡易版
http://www.vector.co.jp/soft/dl/winnt/util/se401845.html
を入れてみましたが、/fiというオプションを認識しませんでした。。。
- 137 :デフォルトの名無しさん:2010/11/20(土) 01:22:28
- 2つ以下って条件つけるとこんな感じかなぁ.
http://codepad.org/wxLsMHHz
なんで,2つ以下なのか理解できてないけど
- 138 :デフォルトの名無しさん:2010/11/20(土) 01:24:09
- >>137
それは3つ以上のthunderbirdという言葉が含まれるプログラムが存在している状況は
私が今までは見たことがない状況(=安易に強制プロセス終了して行けないかも知れない)
と思ったからです。
理由を書かずすみません。
- 139 :デフォルトの名無しさん:2010/11/20(土) 01:27:27
- >>137
ありがとうございます。
ただエラーとなりまして、
R:\>pk.py
Traceback (most recent call last):
File "R:\pk.py", line 9, in <module>
ps = [x for x in Popen('tasklist', stdout=PIPE).stdout.readlines()
File "C:\Python27\lib\subprocess.py", line 672, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 882, in _execute_child
startupinfo)
WindowsError: [Error 2] 指定されたファイルが見つかりません。
と言われてしまいました。
Windows XP Service Pack 3にはtaskkill.exeという機能が入っていないことと何か関係があるのかもしれませんが、
原因が分かりません。。。
- 140 :デフォルトの名無しさん:2010/11/20(土) 01:28:32
- tasklist も入ってないんだね
- 141 :デフォルトの名無しさん:2010/11/20(土) 01:35:29
- >>139
pywin32 が入ってれば tasklist が無くても何とかなるけど,どうかな?
- 142 :デフォルトの名無しさん:2010/11/20(土) 01:43:10
- pywin32-214を持ってきて
setup.py install
としみてましたがまたもや何かが見つからないだとかいって
インストールがエラーです。
文書に
As for Python itself, these extensions require MSVC7 for Python 2.4 and
later, otherwise MSVC6.
って書いてありますが、まさかMSVCの6や7まで入れなきゃならないなんてことが・・・。。。
- 143 :デフォルトの名無しさん:2010/11/20(土) 01:46:47
- XP SP3でも.NETが入ってればC#コンパイラもcsc.exeって名前で入ってるので
>>131の書いてくれたコードを丸パクリして
using System;
using System.Diagnostics.
class Program {
static void Main() {
foreach (Process p in Process.GetProcesses()) {
if (p.ProcessName.ToLower().Contains("thunderbird")) p.Kill();
}}}
を
C:\> csc pkill.cs
C:\> pkill.exe
とかできるかもだけど試せないのでおやすみなさい
- 144 :デフォルトの名無しさん:2010/11/20(土) 01:54:30
- >>142
ふつうにインストーラ形式でインストールしたほうが簡単ですよ.
2.7対応のやつを入れてね
http://sourceforge.net/projects/pywin32/files/
- 145 :デフォルトの名無しさん:2010/11/20(土) 02:15:03
- >>142
PyWin32がインストールできたら↓で試してみて
http://codepad.org/kK1CbVwI
- 146 :デフォルトの名無しさん:2010/11/20(土) 02:20:46
- windowsだとこんなに面倒なのか、と思ったが、Unixでもやり方わかんねーやorz
Unixだとkillはos.killが使えるとして、プロセス名からpid得るにはどうすんだ?
os.system('ps aux')とか、そういう系のなしで。
os.listdir('/proc')でpid全部手に入れて、/proc/pid/cmdline開くって、どこまで汎用性あるんだろ。
- 147 :デフォルトの名無しさん:2010/11/20(土) 02:47:08
- killall
- 148 :デフォルトの名無しさん:2010/11/20(土) 03:00:25
- >>147
os.system('killall %s' %proc)ですねわかります。
- 149 :デフォルトの名無しさん:2010/11/20(土) 03:10:53
- aptana studio 2 と pydev をインストールした。
pythonのソースコードを編集するのが楽になった。
使ってみた感想だけど、一般的なエディタと比べて、
・インデントが賢い(Pythonの文法を解析したうえでインデントしてくれるため)
・入力の補完をしてくれる(通常のエディタでは難しい)
・プロジェクト管理やバージョン管理などの高度な機能がある
という利点があることがわかった。
ただ、文法エラーを表示してくれないのが残念。
Eclipse+Javaだとリアルタイムで文法をチェックし、構文エラーがあれば即座に画面に表示されるけど
aptana+pydevだとそこまではしてくれないみたい。
だれかaptanaとpydevを使っている人はほかにいませんか。
- 150 :デフォルトの名無しさん:2010/11/20(土) 03:26:26
- IDEとTextEditorの違いがわかってない方ですか?
- 151 :デフォルトの名無しさん:2010/11/20(土) 03:43:43
- そうですが何か問題でも?
- 152 :デフォルトの名無しさん:2010/11/20(土) 09:36:34
- >>149=>>110
- 153 :デフォルトの名無しさん:2010/11/20(土) 11:39:41
- >>146
ちょっとググってみたらこんなの見つけた
http://code.google.com/p/psutil/
マルチプラットフォームでプロセス情報を取り扱う共通APIを提供してくれる
標準ライブラリに取り込んで欲しいくらいですわ
- 154 :129:2010/11/20(土) 13:08:14
- >>144-145
ありがとうございます。
インストーラーを持ってきた上で
ご教示いただいたスクリプトを起動した所、見事希望どおりの動作になりました。
大変お世話になり、ありがとうございました。
- 155 :デフォルトの名無しさん:2010/11/20(土) 16:07:11
- >>122
>ただし、web関連に限った場合は
>php > perl > ruby > python
それはない
php > python >>> perl > ruby
- 156 :デフォルトの名無しさん:2010/11/20(土) 16:24:42
- >>155
cgi.fieldStorage()とか使いにくいんだけど。
- 157 :デフォルトの名無しさん:2010/11/20(土) 17:16:57
- >>156
FieldStorageも必要十分な機能を持っていると思うが、cgiモジュールはアプリケーション
フレームワークじゃなくてプリミティブな機能を提供するだけのライブラリだからな。
リクエストを抽象化するライブラリには例えばWebObがあるし、Djangoとかフレームワークは
それぞれ何か抽象化機構を持っている。
で、具体的に何が使いにくいのん?
そして標準ライブラリの使いやすさが非標準まで含めたライブラリの充実度と同どう関係があるの?
- 158 :デフォルトの名無しさん:2010/11/20(土) 17:23:21
- >>156
使わなきゃ良い
WebOb.py オヌヌメ
- 159 :デフォルトの名無しさん:2010/11/20(土) 17:39:24
- まあ沢山あればいいというもんでもない罠
逆に標準のがしっかりしてるから他のが無いといえるの鴨試練
- 160 :デフォルトの名無しさん:2010/11/20(土) 17:43:44
- じゃあこのゴミ共はなんなの
http://twitter.com/#!/pypi
- 161 :デフォルトの名無しさん:2010/11/20(土) 17:49:44
- ここはくだすれです。お客様はこちらのスレへどうぞ
【Perl,PHP】LLバトルロワイヤル13【Ruby,Python】
http://hibari.2ch.net/test/read.cgi/tech/1287944631/
- 162 :デフォルトの名無しさん:2010/11/20(土) 18:07:03
- python2.7用のmatplotlibってまだ公開されてないですか?
Matplotlib 1.0で動くみたいなことが書いてあったんですが2.6までしか対応してないですよね?
- 163 :デフォルトの名無しさん:2010/11/20(土) 18:22:58
- ソースから入れれば動く
- 164 :デフォルトの名無しさん:2010/11/20(土) 20:02:44
- >>163
ありがとうございます!
- 165 :デフォルトの名無しさん:2010/11/20(土) 22:20:56
- >>154
お役に立てたようでよかったです
俺もこの機会にWMIを少し勉強しようと思い立ってみたり
よいきっかけになりました
もし興味あるならどぞ↓
http://msdn.microsoft.com/ja-jp/library/ms974579.aspx
- 166 :デフォルトの名無しさん:2010/11/21(日) 00:45:28
- http://www.python.org/落ちてませんか...?
他でインストーラ落とせる場所知りませんか?
- 167 :デフォルトの名無しさん:2010/11/21(日) 04:38:59
- 落ちてません
- 168 :デフォルトの名無しさん:2010/11/21(日) 14:32:40
- windows、Python2.6です。
すいません。
ボタンを押してもうまくいきません・・・。
画像を保存するプログラムです。
save_button = Tkinter.Button(window, text = "save",command = self.save_image)
save_button.pack(side = Tkinter.RIGHT)
と書いて
saveボタンを押すと画像を保存するようにしたいのですが
ボタンを押すとエラーが出ます
エラー内容↓
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python26\lib\lib-tk\Tkinter.py",line 1410,in__call__
return self.fanc(*args)
TypeError:save_image() takes exactly 2 arguments (1 given)
上の行を
self.canvas.bind("<ButtonPress-3>", self.save_image)にして
右ボタンをクリックするとエラーなしで画像を保存できました。
なにがいけないのでしょうか??
defのsave_imageは以下です。
def save_image(self, window):
self.canvas.postscript(file="outfile.ps")
- 169 :デフォルトの名無しさん:2010/11/21(日) 14:40:19
- >>168
とりあえずエラーメッセージをちゃんと読もうよ
TypeError:save_image() takes exactly 2 arguments (1 given)
- 170 :168:2010/11/21(日) 14:58:41
- うーん
save_button = Tkinter.Button(window, text = "save",command = self.save_image(self, window))
にしたら
TypeError:save_image() takes exactly 2 arguments (3 given)
になってしまいました。
self.save_image(self)だと何も保存できないし
self.save_image(window)だと起動と同時に何も無い画像だけが保存されてしまいます・・・
- 171 :デフォルトの名無しさん:2010/11/21(日) 15:07:00
- そこはたしかTkinterのはまりどころ
command=lambda: self.save_image(self, window) か
command=lambda: self.save_image(window) とかしたらどうなるか試してみて
- 172 :デフォルトの名無しさん:2010/11/21(日) 15:09:21
- すいません、自己解決しました
def save_image(self, window):を
def save_image(self):にしたら保存できました
お騒がせすいません。
- 173 :デフォルトの名無しさん:2010/11/21(日) 15:10:14
- >>171
うわ、リロード忘れました
アドバイスありがとうございます!!
- 174 :デフォルトの名無しさん:2010/11/21(日) 16:10:41
- すいません・・・
def save_image(self,window):
self.canvas.image(file="outfile.gif")
#image=Image.open("outfile.ps")
#image.save("outfile.jpg")
- 175 :174:2010/11/21(日) 16:15:42
- すいません、暴走しました
def save_image(self,window):
self.canvas.postscript(file="outfile.ps")
をgifやjpegなどで保存するにはどうしたらいいですか?
このあとに
image=Image.open("outfile.ps")
image.save("outfile.jpg")
にしたらBroken pipeというエラーメッセージがでました。
それに一度.psで保存せずとも
pilで保存できないかと
self.canvas.image(file="outfile.jpg")と書いてみましたが駄目でした・・・。
- 176 :デフォルトの名無しさん:2010/11/21(日) 17:02:26
- image.save("outfile.jpg", 'jpg')
- 177 :デフォルトの名無しさん:2010/11/21(日) 17:20:57
- >>157
>そして標準ライブラリの使いやすさが非標準まで含めたライブラリの充実度と同どう関係があるの?
標準ライブラリの使いにくさを指摘されて逆切れ。
まさにPython信者だな。
- 178 :デフォルトの名無しさん:2010/11/21(日) 17:44:24
- だから?
- 179 :デフォルトの名無しさん:2010/11/21(日) 18:02:23
- >>177
いや、使いにくいって書いて煽ったの俺だけどさ。
実際、関係ないよ。
- 180 :デフォルトの名無しさん:2010/11/21(日) 18:06:19
- >>175
Tkinter.canvasにはps形式以外の保存方法がありません
PILでpsファイルを読み込むのは不可能ではありませんが
画像の編集には適さないでしょう
http://www.python.jp/pipermail/python-ml-jp/2003-January/002118.html
- 181 :デフォルトの名無しさん:2010/11/21(日) 18:09:52
- >>156
> cgi.fieldStorage()とか使いにくいんだけど。
という指摘に対して
>>157
> FieldStorageも必要十分な機能を持っていると思うが、cgiモジュールはアプリケーション
> フレームワークじゃなくてプリミティブな機能を提供するだけのライブラリだからな。
という、わけわかめな返答を返すPython信者。
機能が使いにくいことと、機能がプリミティブなことは別の話なのに。
ここで問うべきは「どう使いにくいか?どう改善すればいいか?」のはずなのに。
それができずに、問題点を指摘しただけの相手に逆切れして怖がらせるのは、
コミュニケーション能力に欠けるアスペによく見られる傾向。
あー怖い怖い。
- 182 :デフォルトの名無しさん:2010/11/21(日) 18:19:20
- >コミュニケーション能力に欠けるアスペによく見られる傾向。
くだすれでPython信者がどうこう言い出すおまいが言えることじゃなかろ
本スレでおやり
- 183 :デフォルトの名無しさん:2010/11/21(日) 18:29:15
- >>181
>ここで問うべきは「どう使いにくいか?どう改善すればいいか?」のはずなのに。
>それができずに、問題点を指摘しただけの相手に逆切れして怖がらせるのは、
>コミュニケーション能力に欠けるアスペによく見られる傾向。
higayasoのことですねわかります
- 184 :デフォルトの名無しさん:2010/11/21(日) 19:06:03
- >>181
もうお腹いっぱいです
勘弁して下さい
- 185 :デフォルトの名無しさん:2010/11/21(日) 19:26:52
- >>180
ふげげー!!ありがとうございます。
Tkinter以外で書き直しですね・・・ヽ(^o^)丿
- 186 :デフォルトの名無しさん:2010/11/21(日) 19:37:25
- もう Tkinter 標準装備しなくてもいいんじゃないかと思う今日この頃
- 187 :デフォルトの名無しさん:2010/11/21(日) 19:40:15
- タートルグラフィックスで遊べなくなるじゃまいか!!ヽ(^o^)丿
- 188 :デフォルトの名無しさん:2010/11/21(日) 21:56:56
- あれ・・・pygtkで
window = Tkinter.Tk()
self.canvas = Tkinter.Canvas(window, bg = "white",
width = 500, height = 500)
するにはどうしたらいいですかー??
もうpygtkわからんわ!!
- 189 :デフォルトの名無しさん:2010/11/21(日) 22:19:56
- どうせならWxPythonかPyQtにしましょうね
- 190 :デフォルトの名無しさん:2010/11/21(日) 22:49:06
- >189
うう、だってmypaintがpygtkでやってるから一応合わせた方がいいのかと思って・・・。
- 191 :デフォルトの名無しさん:2010/11/21(日) 23:05:53
- とりあえずWxPythonでやってみるから
window = Tkinter.Tk()
self.canvas = Tkinter.Canvas(window, bg = "white",
width = 500, height = 500)
wxpythonではどう書くのですか??
- 192 :デフォルトの名無しさん:2010/11/21(日) 23:41:18
- wxpythonをインストールしたんだけど
demo.pyってどこにあるの??
- 193 :デフォルトの名無しさん:2010/11/21(日) 23:43:18
- あんまりアレな質問してるとこれまで答えてくれてた人が答えてくれなくなるぞ
- 194 :デフォルトの名無しさん:2010/11/21(日) 23:47:47
- 知ってるけど相手すんの面倒っぽいから無視することにした
- 195 :デフォルトの名無しさん:2010/11/22(月) 00:07:22
- >>193
>>194
テンパリ過ぎて
本当にすいませんでした。
- 196 :デフォルトの名無しさん:2010/11/22(月) 00:36:39
- wxPython2.8-win32-unicode-2.8.11.0-py26.exe
と
wxPython2.8-win32-docs-demos-2.8.11.0.exe
をインストールしたら
C:\Program Files\wxPython2.8 Docs and Demos\demo
のなかにありました。
どうもすいませんでした・・・。
- 197 :デフォルトの名無しさん:2010/11/22(月) 01:31:51
- だめだ・・・もう・・・本当にくだらない質問で悪いんですが
wxpythonのなかのdemo.pyのDragImage.pyにある
import imagesとimport runって何ですか・・・?
import ImageならPILが使えるようになったりとかありますよね?
それと同じようにPILの様にあらかじめなにかインストールの必要があるのでしょうか??
しかしいろいろやっているうちに
demo.pyと同じフォルダにimages.pyとrun.pyがあって
DragImage.pyをコピーして使う際は必要な画像と
images.pyとrun.pyを同じフォルダにコピーすれば
DragImage.pyが動く事がわかりました。
しかもそれらをコピーしたあと
いつの間にやら
images.pyc、run.pyc,DragImage.pycが出来ていました・・・
一体これはなんでしょうか???
- 198 :デフォルトの名無しさん:2010/11/22(月) 04:30:22
- 馬鹿には無理
- 199 :デフォルトの名無しさん:2010/11/22(月) 05:16:16
- 「help」って知ってる?
import image
help(image)
で得られる知識は活用しよう
#ついでに「モジュールオブジェクト.__file__」とか
- 200 :デフォルトの名無しさん:2010/11/22(月) 05:25:32
- それウィルスだよ
いますぐOS再インストールしないと
- 201 :デフォルトの名無しさん:2010/11/22(月) 05:27:32
- >>199
エラーメッセージでさえ読む気がないのにhelpなんて理解できるわけないじゃん
>>198の通り
- 202 :デフォルトの名無しさん:2010/11/22(月) 05:55:50
- 最近は別言語信者がPythonユーザーを騙って
初心者叩きしてるようだな
- 203 :デフォルトの名無しさん:2010/11/22(月) 06:36:46
- >>197
モジュールとimport文について公式チュートリアルや本をよく読む
それでもわからなければ pyhon pyc か python バイトコンパイル でぐぐる
それでもまだわからなければ質問どうぞ
- 204 :デフォルトの名無しさん:2010/11/22(月) 12:39:08
- WindowsでPythonを使っている人に質問です。
WindowsにPythonをインストールすると、%PATH%も設定されるのでしょうか。
つまり、Pythonをインストールすれば、コマンドラインから「python」と打つだけで実行できますか。
当方、Windowsを持ってないので確認できません。
どなたか教えて下さい。
- 205 :デフォルトの名無しさん:2010/11/22(月) 12:58:37
- 自分でPATHを通さないと無理です
- 206 :デフォルトの名無しさん:2010/11/22(月) 13:15:54
- %PATH%も設定される
- 207 :デフォルトの名無しさん:2010/11/22(月) 16:07:21
- >>204
当方XPの環境では自分でPATH通さないとダメだった
- 208 :デフォルトの名無しさん:2010/11/22(月) 18:11:08
- つーかインストール時にPATH通してくれていいよな
手軽さが取り柄のスクリプト言語なんだし
- 209 :デフォルトの名無しさん:2010/11/22(月) 18:24:25
- >>208
自動的に通るはず
(自分も自動で通ったと記憶している)
ただ環境によっては通らなかったりするということだろう
- 210 :デフォルトの名無しさん:2010/11/22(月) 19:04:02
- >>203
うひょーヒントありがとうございます!!!!
すごいたすかりました!!
- 211 :デフォルトの名無しさん:2010/11/22(月) 19:06:07
- この鬱陶しい感じ
- 212 :デフォルトの名無しさん:2010/11/22(月) 22:28:59
- xp(32)と7(64)で25,26,27,31を一通り入れたけど
全部パスは自分で通したと思うんだがなぁ
- 213 :デフォルトの名無しさん:2010/11/22(月) 22:37:52
- 再起動しろって言われて無視したら通らない
- 214 :デフォルトの名無しさん:2010/11/22(月) 23:16:24
- 複数バージョンインスコするときに自動でPATHなんて通されたらムカついてしょうがない
- 215 :デフォルトの名無しさん:2010/11/23(火) 00:08:40
- そんな特別な例を尊重したら終わりやで
- 216 :デフォルトの名無しさん:2010/11/23(火) 01:18:24
- 眠たい疲れた。
- 217 :デフォルトの名無しさん:2010/11/23(火) 13:06:23
- Pyhtonmagickの取説や解説みたいなのないかな?
検索してるけど英語のも見つからない・・・。
- 218 :デフォルトの名無しさん:2010/11/23(火) 13:26:34
- ImageMagickの使い方がある程度わかってないと無理だろう
- 219 :デフォルトの名無しさん:2010/11/23(火) 13:40:42
- imagemagickのコマンドは分かるんだけど
それをPythonMagickではどう記述すればいいのかわからないんだ。
たとえば
convert 1.png 2.png conv.png
とかどうしたらpythonで記述したらいいのか分からない。
import PythonMagick
img = PythonMagick.Image("00000.png")
img=convert("1.png","2.png","test.psd)
img.write("test.psd")
ってやってみたけどname'convert' is ot definedだよ。
convertが通らないんだ。
記述方法が・・・orz
- 220 :219:2010/11/23(火) 13:42:43
- ごめん、これね。
convert 1.png 2.png test.psd
とかどうしたらpythonで記述したらいいのか分からない。
import PythonMagick
img = PythonMagick.Image("00000.png")
img=convert("1.png","2.png","test.psd)
img.write("test.psd")
- 221 :デフォルトの名無しさん:2010/11/23(火) 13:51:59
- もしPythonMagickの中にconvertが入ってるのなら
import PythonMagickしただけでconvertが使えるようになるわけがない
- 222 :デフォルトの名無しさん:2010/11/23(火) 13:54:55
- まずはPythonの入門書を読んだほうが…
- 223 :デフォルトの名無しさん:2010/11/23(火) 13:57:08
- って説明がよくなかったので補足
$ cat modfoo.py
a = 100
$ python
>>> import modfoo
>>> modfoo.a
100
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>222
そうなんだけどねえ
- 224 :デフォルトの名無しさん:2010/11/23(火) 13:57:47
- なぬ!?
いまいろいろやってるんだけど
convertでも
convert -geometry 704x576! 0.png 0.png
は
import PythonMagick
img = PythonMagick.Image("0.png")
img.scale('704x576')
img.write("0.png")
でいけるんだ。
なにがなんやら分からないよ・・・
- 225 :デフォルトの名無しさん:2010/11/23(火) 14:34:40
- 魔法は知らないけど
220がダメで224が通るのは当たり前だと思う
img=convert("1.png","2.png","test.psd)
と
img.scale('704x576')
の違いは?
- 226 :デフォルトの名無しさん:2010/11/23(火) 14:44:10
- >>225
convert 1.png 2.png test.psdは
1.pngと2.pngをレイヤーごとにまとめてtest.psd(フォトショプ形式)で保存する
という命令だけど
↓でやったらうまくいかなかった。
img=convert("1.png","2.png","test.psd)
convert -geometry 704x576! 0.png 0.pngは
0.pngのサイズを704×576に変えるのが
img.scale('704x576')
でやったら出来た
こういう違いです。
- 227 :デフォルトの名無しさん:2010/11/23(火) 14:49:49
- pythonの文法的にだ
言わせんなはずかしい
- 228 :デフォルトの名無しさん:2010/11/23(火) 15:18:23
- よく知らんけどPythonMagickのドキュメント読め
- 229 :デフォルトの名無しさん:2010/11/23(火) 16:07:20
- 死ね
- 230 :デフォルトの名無しさん:2010/11/23(火) 16:18:36
- >>227
うあ、ありがとう
>>228
ドキュメントは検索しても見つかんないよ・・・
>>229
ごめん
- 231 :デフォルトの名無しさん:2010/11/23(火) 16:48:19
- すこし眺めた限りではPythonMagickには複数ファイルのサポートはないみたい
- 232 :デフォルトの名無しさん:2010/11/23(火) 17:35:25
- >>231
ありがとうございます。
全てpythonで再現されている訳では無いんですね。
- 233 :デフォルトの名無しさん:2010/11/23(火) 19:39:29
- クラスの中の変数をグローバルに宣言すればいいのか__init__の中で宣言すればいいのか分からない…
- 234 :デフォルトの名無しさん:2010/11/23(火) 21:14:06
- >>233
グローバルはやる意味ない。クラス変数ならありだけど。
特に理由がないなら、__init__で宣言する。
・同じクラスのインスタンス全部で変数を共有したいとき
・どうせ変更されることがないから、全部のインスタンスに同じものを持たせるのも無駄だと思ったとき
は、クラス変数を使う
- 235 :デフォルトの名無しさん:2010/11/23(火) 21:37:51
- >>234
なるほど。ありがとうございます
- 236 :デフォルトの名無しさん:2010/11/24(水) 00:03:52
- >・どうせ変更されることがないから、全部のインスタンスに同じものを持たせるのも無駄だと思ったとき
全部のインスタンスに同じものを持たせるんじゃないの?
- 237 :デフォルトの名無しさん:2010/11/24(水) 00:35:59
- >>236
ごめんよ。紛らわしい書き方しちゃったね。
同じものをそれぞれのインスタンスのために何度も作るのが無駄、と書いた方がよかったかな。
- 238 :デフォルトの名無しさん:2010/11/24(水) 01:15:08
- while i <= reiyasuu:
bmp = wx.Bitmap(os.path.join("ora","data",pngfilename[i]))
#self.bitmap = bmp.ConvertToBitmap()
print os.path.join("ora","data",pngfilename[i])
#wx.StaticBitmap(self, -1, self.bitmap, (X[i],Y[i]), self.GetClientSize())
self.SetSize(bmp.GetSize())
shape = DragShape(bmp)
shape.pos = (0, 0)
shape.fullscreen = True
self.shapes.append(shape)
i=i+1
- 239 :デフォルトの名無しさん:2010/11/24(水) 01:17:44
- ごめん、暴発した。。。
- 240 :デフォルトの名無しさん:2010/11/24(水) 15:07:43
- a.hoge("hoge")\ # This line is invalid.
.hoge("piyo")# This comment is valid.
みたいな感じでメソッドチェーンを改行しつつ、同時にコメントを付ける方法はあるでしょうか
- 241 :デフォルトの名無しさん:2010/11/24(水) 15:20:18
- (a.hoge("hoge") # comment
.hoge("piyo"))
- 242 :デフォルトの名無しさん:2010/11/24(水) 16:28:24
- \ の後ろのコメントは許してくれてもいいのにとは思う
- 243 :デフォルトの名無しさん:2010/11/24(水) 18:42:03
- >>242
それが可能か前スレか本スレあたりで聞いた気がする
- 244 :デフォルトの名無しさん:2010/11/24(水) 18:46:43
- いつか忘れたけどだいぶ前に同じ質問をしたことがある
- 245 :デフォルトの名無しさん:2010/11/24(水) 18:47:50
- というかメソッドチェーンの途中にコメントって分かりにくくね?
- 246 :デフォルトの名無しさん:2010/11/24(水) 18:49:27
- 長くなると改行したくなる
↓
改行すると行毎にコメントを書きたくなる
↓
\ の後ろにコメントを書くとエラーがでる
↓
いまここ
- 247 :デフォルトの名無しさん:2010/11/24(水) 18:58:44
- 長くて改行するぐらいなら、素直に文分けて一時変数に代入すればよくね
- 248 :デフォルトの名無しさん:2010/11/24(水) 19:31:52
- 一時変数(の値を次々と書き換えていくの)が嫌だから
メソッドチェーンするんだろう
- 249 :デフォルトの名無しさん:2010/11/24(水) 19:42:04
- >>247
それがpythonic
- 250 :デフォルトの名無しさん:2010/11/24(水) 19:53:06
- 自分も>>247に同意だけど、
それでもメソッドチェーン&コメントが必要なら>>241でいいんじゃないの?
基本的に括弧を使った暗黙の行継続の方が推奨されてるわけだし
- 251 :デフォルトの名無しさん:2010/11/25(木) 23:43:01
- GAEのeclipseプラグイン見て気づいたんだが、eclipse3.6が最新バージョンなのか
3.5使ってるんだけど、pydevでpythonしか使わない場合は機能面では変わらない?
軽かったりするのかな
- 252 :デフォルトの名無しさん:2010/11/26(金) 01:16:33
- 軽いね
- 253 :251:2010/11/26(金) 02:10:50
- 3.6にしてみた。3.5が色んな物入れてゴテゴテしたから今度はシンプルにしてみたけど良い感じ
- 254 :デフォルトの名無しさん:2010/11/27(土) 11:14:42
- Sat, 27 Nov 2010 11:12:38 +0900
のような形式の日時をunix timeに変換するにはどうしたらよいでしょう?
正規表現でやって行くしかないのでしょうか?
- 255 :デフォルトの名無しさん:2010/11/27(土) 12:04:56
- >>> time.mktime(time.strptime('Sat, 27 Nov 2010 11:12:38 +0900'[:-6], '%a, %d %b %Y %H:%M:%S'))
1290823958.0
timezone の値は環境変数 TZ=JST-9 とかの設定が必要っぽいのでパス
- 256 :デフォルトの名無しさん:2010/11/27(土) 13:43:35
- wx.pythonのdemoのDragImage.pyを改造したのですがうまくいきません。
アドヴァイスお願いします
↓自分で改造した部分
class DragCanvas(wx.ScrolledWindow):#ドラッグキャンバス
def __init__(self, parent, ID):
wx.ScrolledWindow.__init__(self, parent, ID)#ウィンドウのスクロールバー関係?
self.shapes = []#形状
self.dragImage = None
self.dragShape = None
self.hiliteShape = None
self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))
self.bg_bmp = images.Background.GetBitmap()
self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
i=0
while i <= reiyasuu:
bmp = wx.Bitmap(os.path.join("ora","data",pngfilename[i]))
self.SetSize(bmp.GetSize())
shape = DragShape(bmp)
shape.pos = (0, 0)
shape.fullscreen = True
self.shapes.append(shape)
i=i+1
whileのshape.pos=(0,0)を
shape.pos=(X[i],Y[i])にするとバグってしまいます。
元々のプログラムではwhileで回さず
画像のX座標、Y座標は実際の数字で入力されていましたが
whileで回したい時はどうすればいいのでしょうか??
- 257 :ずれましたすいません:2010/11/27(土) 13:46:37
- wx.pythonのdemoのDragImage.pyを改造したのですがうまくいきません。
アドヴァイスお願いします
↓自分で改造した部分
class DragCanvas(wx.ScrolledWindow):#ドラッグキャンバス
def __init__(self, parent, ID):
wx.ScrolledWindow.__init__(self, parent, ID)#ウィンドウのスクロールバー関係?
self.shapes = []#形状
self.dragImage = None
self.dragShape = None
self.hiliteShape = None
self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))
self.bg_bmp = images.Background.GetBitmap()
self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
i=0
while i <= reiyasuu:
bmp = wx.Bitmap(os.path.join("ora","data",pngfilename[i]))
self.SetSize(bmp.GetSize())
shape = DragShape(bmp)
shape.pos = (0, 0)
shape.fullscreen = True
self.shapes.append(shape)
i=i+1
whileのshape.pos=(0,0)を
shape.pos=(X[i],Y[i])にするとバグってしまいます。
元々のプログラムではwhileで回さず
画像のX座標、Y座標は実際の数字で入力されていましたが
whileで回したい時はどうすればいいのでしょうか??
- 258 :デフォルトの名無しさん:2010/11/27(土) 14:00:10
- 大事なことなので二度言いました
- 259 :デフォルトの名無しさん:2010/11/27(土) 16:35:18
- どんな風にバグるのかは一切書く気がないと
- 260 :257:2010/11/27(土) 17:11:00
- >259
すっすいません
whileでshape.pos = (X[i], Y[i])にすると
画面に画像が表示されず
ウィンドウのバツマークもウィンドウに用意してあるEXITもクリックしても効かなくなり
プログラムが走りっぱなしになります
- 261 :デフォルトの名無しさん:2010/11/27(土) 17:14:42
- X Y はどこにあるの
- 262 :デフォルトの名無しさん:2010/11/27(土) 17:23:28
- >>260
ループの中とかいろんなところにprintを入れてどこで止まっているか調べる
- 263 :デフォルトの名無しさん:2010/11/27(土) 17:50:17
- ==、!=かis、is notかどっちを使えば良いのか分からない
- 264 :デフォルトの名無しさん:2010/11/27(土) 18:37:41
- なにがすっすいませんだよ。
人格破綻者か
- 265 :デフォルトの名無しさん:2010/11/27(土) 19:36:20
- あほは放置で
- 266 :デフォルトの名無しさん:2010/11/27(土) 20:13:45
- そうだな
- 267 :257:2010/11/28(日) 00:52:54
- ファビョってすいません。
なんとかprint入れまくって動くようになりました。
ありがとうございます!!
- 268 :デフォルトの名無しさん:2010/11/28(日) 01:04:04
- >>263
PEP8より
None のようなシングルトンとの比較には、いつも「is」や「is not」を使うべきである。
また「if x is not None」を表現するのに「if x」と書けることを知っておくこと。
たとえば、デフォルトで None が代入される変数や引数に、
他の値を持っていることをテストするときに使える。
他の値には、False も含まれることに注意。
あとは、
・数値/文字列/タプル、その他immutable型と比べるときは、常に==, !=を使っても普通は困らない
が、is, is notだとたまに困るかもしれない
例(環境依存だが): 2**40 is 2**40 # ==> False
・リスト/辞書/自分で作ったクラスなど、mutable型での比較は、意味によって使い分けなければならない
同値性を比較するには==, !=を使って、同一性を比較するにはis, is notを使う。
- 269 :デフォルトの名無しさん:2010/11/28(日) 01:05:17
- ホームページ作ろうと思ったらPythonだけで出来るんでしょうか?
HTML+Pythonってことなんでしょうか。
アホな質問とは重々わかっているのですがよろしくお願いします。
- 270 :デフォルトの名無しさん:2010/11/28(日) 01:15:05
- >>268
それ、おかしくないか
if x is not None と if x では意味が異なる
if [] is not None は True だけど if [] は False
- 271 :デフォルトの名無しさん:2010/11/28(日) 01:15:59
- >>269
PythonスクリプトだけでWebページを作成する事は可能だと思うがhtmlの知識は必要
- 272 :デフォルトの名無しさん:2010/11/28(日) 01:16:20
- ホームページならHTMLだけでいいよ。
- 273 :デフォルトの名無しさん:2010/11/28(日) 01:20:22
- 同値性と同一性について。簡単に書くと。
「同じ」という言葉には、2種類の意味がある。例えば
1. AさんとBさんは同じ服を着ている
2. AさんとBさんは同じバスに乗っている
という2つの文を考える。
この文は、普通は、1での「同じ」は「同値性」を、2での「同じ」は「同一性」を意味する。
どういうことかというと、
1では、AさんとBさんは色・形などが全く違わない服を、それぞれが着ている(と解釈するのが自然)。
決して、1枚の服を2人で着ているわけじゃない。
それに対し、2では、AさんとBさんは1台のバスに乗っている。
(AさんとBさんがバスの運転手なら、色・形などが全く違わないバスに…という文脈もあったかもしれないけど)
それがどうしたって? これは非常に大きな違い。例えば、こういうときに違いが出てくる。
・状態が変化したとき
Aさんが服に醤油をこぼしちゃった! じゃあ、Bさんが着てる服は無事かな?
→無事。Bさんの服とAさんの服は、同じ性質を持っていた(=同値だった)けれども別の物だ(=同一でない)から、
Aさんの服がどうなってもBさんの服とは関係がない。
Aさんが乗ってるバスが事故で爆発しちゃった! じゃあ、Bさんが乗ってるバスはどうなった?
→爆発した。Aさんが乗ってるバスとBさんが乗ってるバスは、完全に関係がある。
- 274 :デフォルトの名無しさん:2010/11/28(日) 01:21:43
- 本スレでやれ
- 275 :デフォルトの名無しさん:2010/11/28(日) 01:21:44
- PythonでCGIうんぬんと言うことでちょっと混乱してました。
とりあえずHTMLの勉強をしようと思います。
回答ありがとうございました。
- 276 :デフォルトの名無しさん:2010/11/28(日) 01:22:39
- ぎゃー、長くなったから消そうと思ったら間違って書いちゃった…
- 277 :デフォルトの名無しさん:2010/11/28(日) 01:25:13
- >>270
他の値には、False も含まれることに注意。
って書いてあるのが、それなんじゃない?
分かりにくい日本語だとは思うが。
- 278 :デフォルトの名無しさん:2010/11/28(日) 01:40:40
- >>277
PEP8原文
> Also, beware of writing "if x" when you really mean "if x is not None"
> -- e.g. when testing whether a variable or argument that defaults to
> None was set to some other value. The other value might have a type
> (such as a container) that could be false in a boolean context!
beware of writing で 書かないよう注意すること、という意味
- 279 :デフォルトの名無しさん:2010/11/28(日) 01:43:20
- 完全に誤訳っぽいね。
- 280 :デフォルトの名無しさん:2010/11/28(日) 02:40:20
- これはちょっとひどいね
- 281 :デフォルトの名無しさん:2010/11/28(日) 07:37:10
- python.jp は糞
- 282 :デフォルトの名無しさん:2010/11/28(日) 07:41:12
- >>269 >>275
ttp://pythonjp.sourceforge.jp/dev/library/wsgiref.html
- 283 :デフォルトの名無しさん:2010/11/28(日) 10:16:12
- "if x is not None"という意味をもたせる場合は"if x"と書かないように注意?
- 284 :デフォルトの名無しさん:2010/11/28(日) 13:46:22
- if not x is None: との違いがわからない
- 285 :デフォルトの名無しさん:2010/11/28(日) 13:47:05
- if x != None: なら問題ない
- 286 :デフォルトの名無しさん:2010/11/28(日) 13:49:43
- >>283と>>284は同じという認識でおk?
- 287 :デフォルトの名無しさん:2010/11/28(日) 15:01:56
- >>284,286
全然違う。
まず、is notは1つの演算子。is演算子とnot演算子が2つくっついてるわけじゃない。
動作も全然違って、if x is not Noneは、xがNoneじゃないときは、Trueが返る。
not x is Noneはxの値によらず常にFalseが返る。
notは否定演算子で、返す値はbool値なのでTrueかFalseだけど、TrueもFalseもNoneではないから。
- 288 :287:2010/11/28(日) 15:03:08
- ごめん、間違ってた。
not x is Noneはnot (x is None)
だから、x is not Noneと同じだ。
- 289 :デフォルトの名無しさん:2010/11/28(日) 15:43:12
- >>285
>>> class Foo(object):
... def __ne__(self, other): return False
...
>>> f = Foo()
>>> f != None, f is not None
(False, True)
- 290 :デフォルトの名無しさん:2010/11/28(日) 15:53:14
- is notは構文糖だろ
not isと違う動作されたらたまらんし
- 291 :デフォルトの名無しさん:2010/11/28(日) 17:06:31
- Pythonで引数の型の判断ってどうやってるんでしょうか?
Cだと関数のプロトタイプ宣言とかで明示的に引数の型をコンパイラに示していることが分かるのですが。
- 292 :デフォルトの名無しさん:2010/11/28(日) 17:12:29
- 上の質問は取り消します。
スレ汚しすみません
- 293 :デフォルトの名無しさん:2010/11/28(日) 17:18:53
- isinstance
- 294 :デフォルトの名無しさん:2010/11/28(日) 21:11:09
- type(x): xの型を返す
isinstance(x, type): xはtype型かをBoolで返す
- 295 :デフォルトの名無しさん:2010/11/28(日) 21:36:23
- >>291
こういうのでしょ?
http://oakwinter.com/code/typecheck/tutorial/basics.html
- 296 :デフォルトの名無しさん:2010/11/28(日) 22:02:59
- isinstanceなんてのがあるんですね。
回答どうもありがとう。
- 297 :デフォルトの名無しさん:2010/11/29(月) 06:48:20
- >>290
構文糖云々じゃなくて(not x) is Noneと勘違いしてたんだろ
- 298 :デフォルトの名無しさん:2010/11/29(月) 09:06:18
- と馬鹿が申しております
- 299 :デフォルトの名無しさん:2010/11/29(月) 17:28:44
- >>179
で、実際に何と比較してどんな点が使いにくかったの?
- 300 :デフォルトの名無しさん:2010/11/30(火) 02:12:49
- >>298
そういう風に書くだけで自分が賢くなったつもりになる人って最近おおいの?
- 301 :デフォルトの名無しさん:2010/11/30(火) 02:16:10
- はい
- 302 :デフォルトの名無しさん:2010/11/30(火) 21:46:03
- みんなのPythonって分かりやすいけどサンプルコード少ないし機能の羅列部分多くね?
個人的な印象なんだけど
- 303 :デフォルトの名無しさん:2010/11/30(火) 22:14:16
- VB C C++ C# javascript python と習ってきたけどググルにまさる良書はなかった
C++までは本読んでたけど、オブジェクト指向の指南書が最後かなあ
- 304 :デフォルトの名無しさん:2010/11/30(火) 22:20:05
- ググルにまさる良書はなかった(キリッ
- 305 :デフォルトの名無しさん:2010/11/30(火) 22:50:32
- 電子化されて検索できる良質のコンテンツが
ネット上で無料にあるってことがいいことなのであって、
ググルさんマジ天使っていうことではないよな
- 306 :デフォルトの名無しさん:2010/11/30(火) 23:22:43
- おー、突っ込むねぇ。w
- 307 :デフォルトの名無しさん:2010/12/01(水) 00:31:53
- 最初は辞書だとかのメソッド丸暗記しなくても良いよね・・・使っていく内に覚えるだろうし。なんか覚えたか気になってなかなか進めなくなってきた
- 308 :デフォルトの名無しさん:2010/12/01(水) 01:33:00
- >>307
論よりrun
- 309 :デフォルトの名無しさん:2010/12/01(水) 01:34:25
- なぜ丸暗記する必要があるの?
持ち込み禁止のテストの勉強してるわけでもないのに
- 310 :デフォルトの名無しさん:2010/12/01(水) 01:39:41
- >>> d = dict()
>>> d['hage'] = 'hoge'
>>> d['fuga'] = 'moge'
>>> d
{'fuga': 'moge', 'hage': 'hoge'}
>>> j = {'fuga': 'moge', 'hage': 'hoge'}
>>> j
{'fuga': 'moge', 'hage': 'hoge'}
>>> j == d
True
>>> j is d
False
- 311 :デフォルトの名無しさん:2010/12/01(水) 02:27:35
- >>308-309
ありがとうございます。
取りあえず紹介されたメソッド使ってなんか作って走らせてみます。
やっぱり読むだけだとダメだと思うので
- 312 :デフォルトの名無しさん:2010/12/01(水) 04:06:20
- cx_Oracle で接続しています。
SELECT * FROM HOGE
として、で取得したカーソルの情報から
列名を指定して値を取り出すことはどうすればよいでしょうか?
バージョンはは3.1.2です。
- 313 :デフォルトの名無しさん:2010/12/01(水) 04:14:13
- http://www.velocityreviews.com/forums/t358221-db-api-how-can-i-find-the-column-names-in-a-cursor.html
- 314 :312:2010/12/01(水) 04:35:14
- >>313
有難うございます。
英語力には自身がありませんが、
教えていただいたURLには結論的な事は記述されていないような気がするのですが。
- 315 :デフォルトの名無しさん:2010/12/01(水) 05:21:05
- オラクルは知らないけどDBAPI2準拠と仮定して
カーソルオブジェクト.descriptionにカラム名が含まれているから
>>> カーソル = コネクション.execute("SELECT * FROM HOGE")
>>> for レコード in カーソル:
... カラム名 = [x[0] for x in カーソル.description]
... D = dict(zip(カラム名, レコード))
でカラム名でアクセスできる辞書の完成
- 316 :312:2010/12/01(水) 06:17:58
- >>315
有難うございます。
何とかできました。
すいません、教えて頂いたサイトの最後までよく読めてませんでした。
そのサイトでもあるとおり、Rubyみたいにサクッとできるのかと思いましたが、
意外とめんどくさいんですね。
少しビックリです。
- 317 :デフォルトの名無しさん:2010/12/01(水) 07:19:56
- cx_ORACLEだからじゃね?
- 318 :312:2010/12/01(水) 07:50:07
- >>317
cx_ORACLEが一番ベタじゃないのか?
何か案があるのなら追加で指南よろしくお願いします。
Oracle使うなというのは無しで。
- 319 :デフォルトの名無しさん:2010/12/01(水) 08:13:01
- 今の流行りってSQLAlchemyじゃないの?
- 320 :デフォルトの名無しさん:2010/12/03(金) 20:41:13
- 本って何読んでPython覚えた?
- 321 :デフォルトの名無しさん:2010/12/03(金) 20:43:48
- はじぱい
- 322 :デフォルトの名無しさん:2010/12/03(金) 20:54:11
- Dive Into Python
wxPython in Action
The Definitive Guide to Django
Python Network Programming
Twisted Network Programming Essentials
- 323 :デフォルトの名無しさん:2010/12/03(金) 20:54:44
- みんぱい→python スタートブック→はじぱい
みんぱいの時に仕事で使うプログラムを作成
実際、なんでもいいから作ってみる方が飲み込めるかも
- 324 :デフォルトの名無しさん:2010/12/03(金) 20:56:03
- 本なんていらん
- 325 :デフォルトの名無しさん:2010/12/04(土) 13:04:47
- ググルを超える良書無し
- 326 :デフォルトの名無しさん:2010/12/04(土) 16:00:45
- あれ、ドラッグ&ドロップをつかってファイル名取得するのはどうやるんだったけ?
バッチファイル経由以外の方法がわからん・・・
- 327 :デフォルトの名無しさん:2010/12/04(土) 16:51:49
- sys.argvでとれないなら何をドラッグして何にドロップするのか
環境も含めて書いた方がいいよ
- 328 :デフォルトの名無しさん:2010/12/04(土) 22:22:48
- プログラム初めてで今日Python始めたんだけど、もしかしてプログラミングって
ある程度英語できないとキツイ?
中学生以下の英語力じゃ厳しいかしら……
- 329 :デフォルトの名無しさん:2010/12/04(土) 22:31:06
- アルファベットの読み書きくらいは不自由ないようにしておかないとな
- 330 :デフォルトの名無しさん:2010/12/04(土) 22:36:44
- そんなこたあない。
ただPythonは日本じゃあんまり流行ってないから情報は少ない
- 331 :デフォルトの名無しさん:2010/12/04(土) 22:50:26
- Pythonのエンコード周りが難しい
- 332 :デフォルトの名無しさん:2010/12/04(土) 22:59:33
- >>331
とりあえず全部uつけとけ
- 333 :デフォルトの名無しさん:2010/12/05(日) 06:26:18
- 3.x使えば問題ない
- 334 :デフォルトの名無しさん:2010/12/05(日) 10:06:11
- test.py
----------------
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import os
print os.path.join(os.path.dirname(__file__), u'テスト.txt')
----------------
c:\test>文字コード表\test.py
Traceback (most recent call last):
File "C:\test\文字コード表\test.py", line 4, in <module>
print os.path.join(os.path.dirname(__file__), u'繝・せ繝・txt')
File "C:\Python25\lib\ntpath.py", line 102, in join
path += "\\" + b
UnicodeDecodeError: 'ascii' codec can't decode byte 0x95 in position 16: ordinal not in range(128)
助けてください ><
- 335 :デフォルトの名無しさん:2010/12/05(日) 10:30:44
- これは質問なのかそれとも誰かさんに対するレスなのか
回避策としては __file__ がユニコード文字列でなくバイト文字列っぽいので
__file__.decode('cp932') とかしてやる
- 336 :デフォルトの名無しさん:2010/12/05(日) 11:10:51
- cp932じゃベタだからsys.getfilesystemencoding()でも使ったほうがいいんじゃね
小手先の対策でしかないけど(3.xなら勿論そういう問題はない)
ディレクトリ名がunicodeの場合(♥とか含んでる)はどうかなと
考えてみたけど
sys.argvがバイト列なので、そもそも直接スクリプトとして実行できない
sys.pathにunicodeディレクトリ名を追加することはできるが、
そこからモジュールを探してimportすることもできないみたいだな
- 337 :デフォルトの名無しさん:2010/12/05(日) 11:14:22
- #!/usr/local/bin/python
# -*- coding: utf-8 -*-
import os
import locale
import sys
print os.path.join(os.path.dirname(__file__.decode(locale.getpreferredencoding())), u'テスト.txt')
print os.path.join(os.path.dirname(__file__.decode(sys.stdin.encoding)), u'テスト.txt')
print os.path.join(os.path.dirname(__file__), u'テスト.txt')
- 338 :336:2010/12/05(日) 11:17:56
- ごめん、なんか言い方が悪かった
ディレクトリがunicodeを含んでいてもファイル名がunicodeを含んでいなければ
2.xでも「そこをカレントにすれば」実行はできるな
カレントでしか実行できないスクリプトってのは良くない書き方だから
あまり想定してなかった
- 339 :デフォルトの名無しさん:2010/12/05(日) 11:20:23
- 例外処理の中で
print os.path.join(os.path.dirname(__file__), u'繝・せ繝・txt')
って文字化けしてしまうけど
これはどうして?
sys.stdout.encofing に encode してくれないのはなぜ?
- 340 :デフォルトの名無しさん:2010/12/05(日) 12:28:53
- インタプリタがバイト列として持ってるソーステキストの一部を引用して
そのまま例外に流して、それをそのままprintしてるから、化けるんじゃないの
ソースコードにわざわざエンコード指定して、unicodeリテラルもちゃんと
解釈できてるのに、そうした動作は意外なことだけどな
- 341 :デフォルトの名無しさん:2010/12/05(日) 12:56:16
- バグだよね
- 342 :デフォルトの名無しさん:2010/12/05(日) 14:29:32
- >>> for c in xrange(0x3000, 0x3100): print '%04X' % c, unichr(c)
...
3000
3001 、
3002 。
3003 〃
3004 Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'cp932' codec can't encode character u'\u3004' in position 0
: illegal multibyte sequence
変換失敗?したところで止まってしまうのですが
どうすればよいでしょうか?
- 343 :デフォルトの名無しさん:2010/12/05(日) 14:34:18
- どうしたいんだよ?w
- 344 :デフォルトの名無しさん:2010/12/05(日) 14:43:14
- こういうことか?
for c in xrange(0x3000, 0x3100):
print '%04X' % c, unichr(c).encode('cp932', 'replace')
- 345 :デフォルトの名無しさん:2010/12/05(日) 14:43:50
- http://www.kent-web.com/pubc/book/test/uploader/uploader.cgi?mode=downld&no=3565
- 346 :デフォルトの名無しさん:2010/12/05(日) 14:46:35
- ありがとうございました。いけました。
- 347 :デフォルトの名無しさん:2010/12/05(日) 20:31:17
- hoge = ["a", "b", "c"]
fuga = ["D", "E", "F"]
なるリストから、
moge = ["a\tD\n", "b\tE\n", "c\tF\n"]
のような新たなリストをつくりたい時はどのようにすればいいでしょうか
- 348 :デフォルトの名無しさん:2010/12/05(日) 20:41:00
- >>> hoge = ["a", "b", "c"]
>>> fuga = ["D", "E", "F"]
>>> ["%s\t%s\n" % (a, b) for (a, b) in zip(hoge, fuga)]
['a\tD\n', 'b\tE\n', 'c\tF\n']
- 349 :デフォルトの名無しさん:2010/12/05(日) 22:04:33
- >>348
ありがとうございます
1行で書けるんですね、参考になりました
- 350 :デフォルトの名無しさん:2010/12/05(日) 22:43:16
- >>> map(lambda x: '%s\t%s\n' % x, zip(['a','b','c'],['D','E','F']))
['a\tD\n', 'b\tE\n', 'c\tF\n']
>>> reduce(lambda x, y: x + ['%s\t%s\n' % y], zip(['a','b','c'],['D','E','F']), [])
['a\tD\n', 'b\tE\n', 'c\tF\n']
- 351 :デフォルトの名無しさん:2010/12/05(日) 23:31:30
- その例でわざわざreduce()使う意味は無いだろうし
map()使うんならzip()は要らんだろ
map(lambda *x: '%s\t%s\n' % x, ['a','b','c'],['D','E','F'])
でいいよ
- 352 :デフォルトの名無しさん:2010/12/05(日) 23:34:37
- ありがとうございました。いけました。
- 353 :デフォルトの名無しさん:2010/12/06(月) 00:29:14
- Pythonってイテレータだったりジェネレータだったりタプルだったりset型だったりCより覚えること多いんじゃないか。
と愚痴を言ってみる
- 354 :デフォルトの名無しさん:2010/12/06(月) 00:32:14
- C++よりはましだろ
- 355 :デフォルトの名無しさん:2010/12/06(月) 00:35:28
- Cはコンテナ関連の構造体やアルゴリズムの教本はあっても標準ライブラリが貧弱だった
C++はSTLがひどくてBoostがでかすぎでどっちも中途半端
Pythonはバランスが良い方
- 356 :デフォルトの名無しさん:2010/12/06(月) 00:39:23
- >>353
Cは言語仕様は小さめに見えるけど、ふつーに使うであろうデータ構造について
標準的なものが何も無いから、それどころじゃないぞ
文字列一つとっても、一般にはヌル終端されたcharの配列だがそうとは限らないし
配列もスタック上、TEXTセグメント上、DATAセグメント上、ヒープ上など
さまざまな場所に配置されている可能性があり
ヒープに確保する場合は多種多様な相互に非互換なアロケータが使われている
可能性があり
wchar_tの場合はそのサイズやエンコーディング方式を規格では
何も定めていないため千差万別だ
- 357 :デフォルトの名無しさん:2010/12/06(月) 00:46:29
- >>336
>cp932じゃベタだからsys.getfilesystemencoding()でも使ったほうがいいんじゃね
locale.getpreferredencoding() だと 'cp932'
sys.stdin.encoding だと 'cp932'
なのに
sys.getfilesystemencoding() だと 'mbcs' になっちゃいますね
- 358 :356:2010/12/06(月) 00:46:50
- 困ったことにCではこうした詳細を知らずにすませることは出来ない
malloc()で確保した領域をGlobalFree()に渡したらどうなるか?
TEXTに配置されている文字列をfree()しようとしたら?
Cのが簡単だなんていえるのは、Cを(まともに)使わずに済んでいたからだよ
- 359 :デフォルトの名無しさん:2010/12/06(月) 00:49:11
- CにはCのメリットがあるんだけどね
それが無くなったらCの意味がないw
- 360 :デフォルトの名無しさん:2010/12/06(月) 00:51:13
- 勿論その通りだが、CがPythonより簡単だなんてのはとんでもない誤りだ
確かに仕様は小さいが、まともなプログラムを書くのはPythonよりずっと難しい
- 361 :デフォルトの名無しさん:2010/12/06(月) 00:53:11
- >>358
メモリ配置を把握してプログラミングする(≒しないといけない)から
そんなことになんないと思うけど。
- 362 :デフォルトの名無しさん:2010/12/06(月) 00:57:03
- >>361
勿論そんなコードを書いたら即座にクラッシュするから、そういうコードを
書くわけはないよ(というか書いたらバグなので修正せざるを得ない)
そうじゃなくて、Pythonじゃそもそもそんな非本質的な問題を
考える必要すらない=楽ってことだ
- 363 :デフォルトの名無しさん:2010/12/06(月) 01:20:02
- >>358 の指摘してる問題(っていうか意図的なバグだろw)って
コンパイルエラーにならない?
- 364 :デフォルトの名無しさん:2010/12/06(月) 01:21:00
- >>363
なるわけないでしょ、型はただのchar*で一緒、区別つかないんだから
C使ったことないだろ
- 365 :デフォルトの名無しさん:2010/12/06(月) 01:31:15
- おまえこそ使ったことないだろ
- 366 :デフォルトの名無しさん:2010/12/06(月) 01:35:20
- >>353だがCを確かに本格的に触ってないから楽に感じたと思うんだが勉強しているうちに次から次へと新機軸の機能が出てくるからちょっと気分が参ったw
初めてLL言語を触るからかも知れんが。
- 367 :デフォルトの名無しさん:2010/12/06(月) 01:35:32
- >>365
char *s1 = "TEXT";
char s2[] = "stack";
char *s3 = (char*)GlobalAlloc(GMEM_FIXED, 1024);
free(s1);
free(s2);
free(s3);
もしかして、これがコンパイルエラーになるとでも思ってるの?
なるわけないだろ
- 368 :デフォルトの名無しさん:2010/12/06(月) 01:37:06
- >>366
別に全部一気に覚えようとか頑張る必要はないよ
- 369 :デフォルトの名無しさん:2010/12/06(月) 01:39:29
- LinuxなのでGlobalAllocは試してないが、最近のコンパイラは賢いねえ (gcc 4.5.1, -Oが必要)
t.c: In function ‘main’:
t.c:9:9: warning: attempt to free a non-heap object
t.c:10:9: warning: attempt to free a non-heap object ‘s2’
- 370 :デフォルトの名無しさん:2010/12/06(月) 01:40:28
- >>368
そうだね、つい覚えた機能は全部使いたくなる、もしくは忘れないように使いたくなるけど無理して全部使う必要はないもんね。とりあえずこんな機能もあるんだ。程度で焦らずに勉強します。
どうもありがとうございます。
- 371 :デフォルトの名無しさん:2010/12/06(月) 01:40:32
- >>369
ワーニングか
一つの関数の中なら静的に解析可能だから、それも出来るわな
場所が離れてたらまず無理だが
- 372 :371:2010/12/06(月) 01:44:18
- わざわざ言わなくともわかると思うが
free()のかわりに
void foo(char *x) { free(x); }
foo()を呼んだような場合、まずコンパイラは警告すら出せないってことね
正直allocateしたものをすぐfree()できるようなごく単純なケースでは
面倒なだけで、特にこんな問題に悩む必要は無い
が、そういう単純なケースだけではないのだよ
- 373 :デフォルトの名無しさん:2010/12/06(月) 02:09:38
- free()なしexit()が最強ってことでw
- 374 :デフォルトの名無しさん:2010/12/06(月) 02:19:44
- 覚えること少なければいいという結論なら、CもPythonもbrainfuckに到底及ばないってことになってしまうよ。
- 375 :デフォルトの名無しさん:2010/12/06(月) 02:21:34
- >>372
それは設計が悪い
- 376 :デフォルトの名無しさん:2010/12/06(月) 02:23:00
- >brainfuck にしても只のアセンブラだと思えば
高速化してbrainfuck用高級言語コンパイラでも作れば
brainfuckで動作するPythonとかありうる
- 377 :デフォルトの名無しさん:2010/12/06(月) 02:24:58
- >>375
いや、なんかallocateしたものを呼び出し側に返さなければならない
(ので、allocateした側がfreeできない)状況というのは普通にあるだろ
例えばクロージャにおけるfunarg問題がそれで、それを解決するために
いっぱんに使われてるのがGC
設計が悪いの一言で切り捨てられるのは、
Cまともにコードを書いた経験がない証拠
勿論本物のカオスを避けるために最大の努力はするわけだがな
- 378 :デフォルトの名無しさん:2010/12/06(月) 02:28:36
- スマートポインタ使ったことないのか?
- 379 :デフォルトの名無しさん:2010/12/06(月) 02:29:13
- あらあらCにいつスマートポインタなんてできました?
- 380 :デフォルトの名無しさん:2010/12/06(月) 03:17:41
- >>19
デリゲート
- 381 :デフォルトの名無しさん:2010/12/06(月) 03:19:14
- Rubyより劣っているところって何?
調べているんだがそういう記事がないんだけど
- 382 :デフォルトの名無しさん:2010/12/06(月) 03:36:43
- 別のところでやってくんない、つーか簡潔に言えば氏ね
- 383 :デフォルトの名無しさん:2010/12/06(月) 03:47:23
- >>381
お前みたいな馬鹿が使ってるところだよ
言わせんな恥ずかしい
- 384 :デフォルトの名無しさん:2010/12/06(月) 04:08:13
- re.scannerが無期限実験中なところかな…
- 385 :デフォルトの名無しさん:2010/12/06(月) 11:08:03
- とりあえず入門サイトとか見ながら
print "hello! hello!"
とか計算とかそういう基本的なのを見よう見まねでやってるんだけど
その後の上達の流れが全く分からない
プログラミング習得してる人ってどんな流れを辿ってるんだろ……
意味が分からなくてもとりあえずサイトに書いてあるようなことは
やっとくべき?
やっているうちに分かるようになるものかしら
- 386 :デフォルトの名無しさん:2010/12/06(月) 11:09:41
- やりたいとがないと上達するわけないだろバカ
- 387 :デフォルトの名無しさん:2010/12/06(月) 11:10:09
- たぶん無理だろうね
- 388 :デフォルトの名無しさん:2010/12/06(月) 11:27:38
- >>386やりたいこと……とりあえずプログラミングやりたいってのと
あとは例えばPC起動後の一定で一連の作業を自動化してみたいとか
そんな感じ。
>>387どうだったら無理じゃないの?
- 389 :デフォルトの名無しさん:2010/12/06(月) 11:30:29
- PC起動後の定型処理はLinuxならたのしく学べる
Windowsだとあまりのハードルの高さに誰もが泣き出すレベル
- 390 :デフォルトの名無しさん:2010/12/06(月) 11:38:56
- Linuxは普段からUbuntu使ってる
そこで「どう学ぶの?」とか聞くのは野暮なんだろうか
やり方聞きたいんじゃなくて学び方が分からないって感じなんだよね
本買ってきて勉強すりゃいいのか グーグル先生に頼ればいいのか
- 391 :デフォルトの名無しさん:2010/12/06(月) 11:44:39
- 具体的に何をやりたいのかわかってないからじゃないの?
- 392 :デフォルトの名無しさん:2010/12/06(月) 12:11:04
- たとえ話は好きじゃないけど
たとえばA地点からB地点へ辿り着きたいが
地図を持っていない状況に近いんじゃないかな
途中に山や谷があるかもしれないし
先人が作った道があるかもしれないが
獣道しかないかもしれないし
最短距離の道があっても途中で絶壁で中断してるかもしれないし
なだらかな道でもかなり遠回りしているかもしれない
- 393 :デフォルトの名無しさん:2010/12/06(月) 12:11:05
- >>391
>>389の言った「PC起動後の定型処理」
じゃ具体的じゃないの?
ちなみにもっと詳しく話すなら
まずどのブラウザ起動してどのサイト開いて
それからどのソフトを……みたいな感じなんだけど。
とにかく入門サイトとか見てても
イマイチ自分のやりたいことと繋がらないんだ。
やりたいことをピンポイントで学ぶ方法はあるのか
そんな近道は無くて、そういう基本は全部やっておくべきなのか
そういうのが知りたいんです。
- 394 :デフォルトの名無しさん:2010/12/06(月) 12:13:35
- >>393
一番いいのは他人のソースを見ること
これがなんだかんだで一番上達が早い
自分がやりたいことに近いソースを入手しろ
- 395 :デフォルトの名無しさん:2010/12/06(月) 12:15:56
- 入門サイトや分厚い参考書なんて意味がない
こういうのを嫌々やってると途中でやる気がなくなる
実用度が低いサンプルばかりだからな
他人のソースにはあらゆるノウハウが詰まっているし
ソースでわからないことを調べていくという作業のほうが効率的
- 396 :デフォルトの名無しさん:2010/12/06(月) 12:22:16
- >>394
>>395
なるほど。
サンクス。ちょっとソース探しの旅に出てくる。
- 397 :デフォルトの名無しさん:2010/12/06(月) 12:45:22
- Linuxならともかく、Windowsなら.NETの力を借りるのが最適解じゃないかな
- 398 :デフォルトの名無しさん:2010/12/06(月) 12:49:31
- 確かに
多分やりたいことの大半がコピペでできる
- 399 :デフォルトの名無しさん:2010/12/06(月) 13:08:07
- 朝からずっとちんちんが堅いんですけどどうすればよいですか?
- 400 :デフォルトの名無しさん:2010/12/06(月) 15:46:04
- その辺のスーパー行って蒟蒻にでも刺して来れば
- 401 :デフォルトの名無しさん:2010/12/06(月) 20:54:32
- jythonでjavaバイトコードに変換して、
jythonインストールせずに実行ってのやる方法が分かりません。
jython -m py_compile <ソース>
ってやるとclassファイルはできるみたいだけど、java 〜 って実行しても
メインがないとか言われる。
- 402 :デフォルトの名無しさん:2010/12/06(月) 21:10:34
- manifest?
- 403 :デフォルトの名無しさん:2010/12/06(月) 21:45:28
- こことか参考になるかも
http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts
- 404 :デフォルトの名無しさん:2010/12/06(月) 22:06:09
- >>403
サンキューです。
何とかできるってことですよね。英語よく分からんからゆっくり読みます。
変な物付いてきて配布するときに、ライセンス的にやばくなるか、それだけが心配だけど。
- 405 :デフォルトの名無しさん:2010/12/07(火) 04:44:14
- >>376
どうやってウィンドウ作るんだよ。
…という茶々はおいといて、それができたところでbrainfuckでは書きたくないと思わないのだったら、
君にPythonのよさを説くことは俺にはできないわ。
- 406 :デフォルトの名無しさん:2010/12/07(火) 04:47:13
- >>393
それって、本当にpython必要か?
ブラウザの設定で、ブラウザ起動時にどのサイト開くかは指定できるし、
PC起動時にブラウザ起動したいなら、Windowsならスタートアップに入れりゃできる。
- 407 :デフォルトの名無しさん:2010/12/07(火) 05:09:53
- >>393
もし、プログラミング自体が初めてなら、まず知るべきことは、コンピュータは計算機だということ。
Pythonを含む多くのプログラミング言語の、一番簡単な利用は、計算機としての利用。
OSの機能を利用して、ウィンドウ出すとか、ゲーム作るとか、何か起動するとかは、PythonだとCより圧倒的に簡単ではあるが、
それでも、計算機として利用するよりは難しいことを知っておくべき。
そして、まずは計算機として利用できるようにならないと、次のステップへは進めない。
計算機としての使い方を知るためには、大まかな文法と制御構造、よくつかう組み込み関数やメソッドを知らないといけない。
幸い、Pythonの制御構造はシンプルだ。ブロック付き構文とか、そういう奇っ怪なものはない。
Webにあるチュートリアルを全部読めばいい。
それさえできれば、計算機処理ならなんでも、計算方法さえ知っていれば、時間さえあれば書けるようになっているはず。
で、ようやく、計算機の次のステップに移れるわけだ。
そこでは、主な仕事は「ライブラリを探して、使うこと」になる。
標準ライブラリに、あなたのやりたいことの手助けになるライブラリがないか探す。
そのものずばりなのがあれば、おめでとう。
できなくはないけど大変そうと思えば、そこで頑張るか、非標準を探すかどちらか選ぶことになる。
全然出来る気がしなければ、非標準ライブラリを探す。
そして探してきたライブラリを、ドキュメントに書いてあるとおりに使う。
計算機としてPythonを使いこなせるようになってきたら、ライブラリとドキュメントさえあれば、
それをどうすればいいかは自然と見えてくる。
- 408 :デフォルトの名無しさん:2010/12/07(火) 05:16:14
- >>407
計算機ってなに?電卓みたいなもの?コンピュータとは違うの?
コンピュータは計算機であると位置づけると初学者にとって何かいいことがあるの?
- 409 :デフォルトの名無しさん:2010/12/07(火) 06:28:21
- 計算機はそのままズバリ「計算するもの」だろ
それが四則演算だったり論理演算だったりシフト演算だったりetc
それらを組み合わせてオートマトンを構成したりetc
文字列も画像も結局は数値の集合体であるわけだし
- 410 :デフォルトの名無しさん:2010/12/07(火) 09:53:05
- >>408
C#やったほうがいい
- 411 :デフォルトの名無しさん:2010/12/07(火) 10:07:05
- 初心者はそんな質問しないだろう。
- 412 :デフォルトの名無しさん:2010/12/07(火) 13:35:26
- 黙ってSICP読めってことだろ
俺は3回挫折したけど
- 413 :デフォルトの名無しさん:2010/12/07(火) 14:37:21
- >>393的な方向だと、
・プログラムを起動するプログラム
・プログラムを操作するプログラム
を書きたいということになるのかな
・バッチファイル
・COMオートメーション
について学ぶといいよ
プログラムを起動するのは簡単だけど
(というかPC起動時に決まったものを起動するだけならプログラムを書く必要
すらない)
「プログラムを操作するプログラム」は相手次第なので
「まずそれが可能なのか」というところから始まる、つまりケースバイケース
COMオートメーションはWindows上での典型例だけど、
広い意味での「プロセス間通信」を使うことになるので
パイプ、TCP/IP、DDE、ウィンドウメッセージ、DLLインジェクションなど
さまざまな方法を理解する必要があるかもしれません
一言で言えば初心者には難しいかもしれないよ、とだけ言っておく
- 414 :デフォルトの名無しさん:2010/12/07(火) 18:00:32
- Ubuntu使ってんじゃないのか?
それにdll injectionは飛びすぎだろ
- 415 :デフォルトの名無しさん:2010/12/07(火) 18:43:10
- あーUbuntuユーザなのか、なら>>413は忘れてw
- 416 :デフォルトの名無しさん:2010/12/08(水) 01:02:15
- 自分はtailとかtreeとかをpythonで作ってみる
数当てゲームをつくる
素数を探す
飽きる
- 417 :393:2010/12/08(水) 01:16:11
- わぁ、レスが一杯。
トリップはいらないかな。
PC知識がハード寄りで、ソフトウェア面がサッパリだったから
デジタル的な中身が知りたくて(そして操りたくて)プログラミングに手を出すことにして
それでPythonが初心者には取っ付き易いと聞いたから始めたんだ。
PC起動後の定型処理は確かにそのままでもできるだろうけど
とりあえずプログラミングで何かするとしたらまずは作業の自動化とかその辺かなと
ただレス見てるともうちょい知識溜め込む必要がある気がしてきたわ
俺にはまだ早いのかもしれないな……レスありがとう。
>>415
WindowsもLinuxも使う。
- 418 :デフォルトの名無しさん:2010/12/08(水) 01:21:19
- ハードが好きならマイコン使った電子工作でアセンブリ言語やった方が面白いかもよ。
その後でC
次にPython
- 419 :デフォルトの名無しさん:2010/12/08(水) 01:32:30
- 目的作った方が早いよ
マジで
- 420 :デフォルトの名無しさん:2010/12/08(水) 01:35:58
- 俺はPythonでWebアプリ頑張って作るわ。
- 421 :デフォルトの名無しさん:2010/12/08(水) 01:36:32
- 目的がどうしても無いならここ
http://projecteuler.net/index.php?section=problems
- 422 :デフォルトの名無しさん:2010/12/08(水) 01:46:29
- Pythonのカプセル化ってちょっと面白い。C++やった後だからだと思うけど。
- 423 :デフォルトの名無しさん:2010/12/08(水) 01:48:57
- >>418
確かにハード寄りの低水準言語の方が向いているのかもしれない。
その分難しそうだけど。
>>419
目的かぁ、最終的には適当な(テキトーじゃなくて)ソフト作ったり
ゲーム作ってみたりしたいけど(Pythonが向いているか、Pythonでやるかは別として)
最終的な目標のためにはまずある程度技術を上げる必要があるからなぁ……
>>421
英語も数学もダメな俺には地獄みたいな場所だな……
プログラミングには絶対的に必要な要素だけど。
なんかこんなんじゃ諦めたほうがいい気がしてきたけど諦めたくねぇ……
- 424 :デフォルトの名無しさん:2010/12/08(水) 01:56:06
- >>423
http://mogoolla.blog113.fc2.com/blog-entry-290.html
これなんか使うとURLや選択した文字列を右クリックから
プログラムに渡せるから学習向けのツマラン課題でも
実用的なものが作りやすいよ。
まあ気長にやってればいつの間にか上達する
- 425 :デフォルトの名無しさん:2010/12/10(金) 06:36:00
- 初歩的な文字列操作の質問です。
path = "C:\Folder1\Folder2\test.txt"
みたいな形でファイルパスが文字列として入っているとして、test.txtというファイル名だけを取得するには
どのような方法がイケていますか?
自分でも何かと方法は思い浮かぶのですが、綺麗なコードを書く人はどうするのか
知りたくなったので質問させていただきます。
できれば、python3で回答お願いします。
- 426 :デフォルトの名無しさん:2010/12/10(金) 06:47:31
- Python 3.1.3 (r313:86834, Nov 27 2010, 18:30:53) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import os
>>> path = r"C:\Folder1\Folder2\test.txt"
>>> os.path.basename(path)
'test.txt'
- 427 :デフォルトの名無しさん:2010/12/10(金) 16:12:21
- ペンタブレットのボタン入力を横どりして別のキー入力として
起動中のソフトに流し込むにはどうすればいいですか?
- 428 :デフォルトの名無しさん:2010/12/10(金) 16:18:15
- たいていHIDとして接続されてるからhid.dllとかlibusbとかで読むことになる
- 429 :デフォルトの名無しさん:2010/12/10(金) 16:34:33
- >>428
なるほど、
ありがとうございます
- 430 :デフォルトの名無しさん:2010/12/10(金) 22:44:29
- Python2.6+Linux環境でのマルチプロセスについての質問です
・サブプロセスはコマンドを受け取ると処理を行い,その結果(ステータス)を通知
・サブプロセスは複数起動させ,Pythonは待ち状態のサブプロセスに順次処理を割り振る
ということを行ないたいと考えています.
サブプロセス1つのみの場合はsubprocess.Popenを用いて出来ています
(サブプロセスのstdin,stdoutでコマンドの送受信を行っています)
サブプロセスを複数実行し,各プロセスのいずれかの標準出力が読めるようになるまで
select.selectで待機させようと考えていますが,デッドロックしてしまいます
(サブプロセスはstdoutにステータス送信後,stdinからコマンドを読み込む時点で☓)
(Pythonはどれかのプロセスのステータスを受信するまでselect.selectで待つ時点で☓)
selectモジュールはこういった処理向けではないのでしょうか?
#もしかしてサブプロセスが終了するまで(=パイプが切れるまで)ブロックしたまま?
- 431 :デフォルトの名無しさん:2010/12/11(土) 09:07:20
- shell=True
- 432 :デフォルトの名無しさん:2010/12/11(土) 11:19:24
- >>430
どういうコードだかわからんので、何とも言いかねるな
とりあえず今試しに書いてみた簡単なサンプルは問題なく動いてるようだけど
http://ideone.com/GYvjQ
- 433 :デフォルトの名無しさん:2010/12/11(土) 18:44:05
- flushし忘れてないか
- 434 :デフォルトの名無しさん:2010/12/11(土) 19:21:55
- IDLEのウインドウが移動できないんですがどうすれば移動できますか?
- 435 :デフォルトの名無しさん:2010/12/11(土) 19:59:11
- なんか変なソフト入れてない?
「ぴたすちお」とかそういう系
- 436 :デフォルトの名無しさん:2010/12/11(土) 20:00:29
- >>435
ずばりぴたすちおが原因でした
ありがとうございます
- 437 :デフォルトの名無しさん:2010/12/11(土) 20:49:48
- 超能力がすげえなw
- 438 :デフォルトの名無しさん:2010/12/11(土) 20:51:35
- 経験者だったんだろ
- 439 :デフォルトの名無しさん:2010/12/11(土) 21:11:34
- >>438
正解
- 440 :デフォルトの名無しさん:2010/12/12(日) 00:39:25
- windows7 64bit なんですが、win32 extension のインストールに失敗したのでActivePython2.5 を64bit版から32bit版にインストールし直しました。
64bitのOSで32bit版のpythonを使うというのはやはり問題があるのでしょうか?
自分がちょっと触った限りではとくに問題が無いように見えますがよくわかりません
- 441 :デフォルトの名無しさん:2010/12/12(日) 01:16:53
- 問題ない
- 442 :デフォルトの名無しさん:2010/12/12(日) 12:23:15
- turbogearsの本を買おうと思うんですが2007年に出版された本なので内容的に古くないか心配です。
内容的には問題ないんでしょうか?
よろしくお願いします。
- 443 :デフォルトの名無しさん:2010/12/12(日) 14:58:33
- >>442は取り消します。
すみません。
- 444 :デフォルトの名無しさん:2010/12/12(日) 15:01:19
- 自分のよく使うキー(ショートカットキー)だけを
ソフトウェアキーボード化したいんだけど
どうしたらいいんだろうか?
とりあえずボタンはTKとか使えばいいと思うけど
実際にキーを押したのと同じという信号(?)を
パソコンに送るにはどうしたらいいの?
- 445 :430:2010/12/12(日) 16:25:25
- サブプロセスのstderrをPythonのstdoutにつなげていたのが原因だったみたいです
理由は不明ですがstderr=open(〜)としたらとりあえず動くようにはなりました
>>431-433回答ありがとうございました
- 446 :デフォルトの名無しさん:2010/12/12(日) 18:40:11
- 初めてのPython読んでクラスのとこ見てるけど、実際デリゲーションとかって使うの?
- 447 :デフォルトの名無しさん:2010/12/12(日) 19:04:01
- はい
- 448 :デフォルトの名無しさん:2010/12/12(日) 19:14:37
- 継承しか使わない
- 449 :440:2010/12/12(日) 23:25:19
- >>441
ありがとうございます
安心しました
- 450 :デフォルトの名無しさん:2010/12/13(月) 00:11:58
- デリゲーション知らない俺にデリゲーションのサンプルコードplz
- 451 :デフォルトの名無しさん:2010/12/13(月) 01:22:14
- でりげーしょんて委譲のことか?
こんな感じでいいのかな
ちなみに俺自身はこの手のコードはほとんど書いたことがないw
class Stack(object):
def __init__(self):
self.data = []
def push(self, x):
return self.data.append(x)
def pop(self):
return self.data.pop()
class Stack2(object):
def __init__(self):
self.data = []
self.push = self.data.append
self.pop = self.data.pop
listify = lambda x: x.split() if isinstance(x, str) else x
def delegate(obj, names):
def delegate_(obj_, names_):
for n, n_ in zip(listify(names), listify(names_)):
setattr(obj_, n_, getattr(obj, n))
return delegate_
class Stack3(object):
def __init__(self):
self.data = []
delegate(self.data, 'append pop')(self, 'push pop')
- 452 :451:2010/12/13(月) 01:23:24
- 一応気持ちとしては、Stackが組み込みのリストに委譲している例で
一番上のが多分一番普通のありがちなコード
- 453 :デフォルトの名無しさん:2010/12/13(月) 01:40:27
- 横からだけど勉強になった
- 454 :デフォルトの名無しさん:2010/12/13(月) 01:45:34
- え〜…そーかぁ…
そりゃまぁ、
i=i+1
なんて書くより
i++
って書く方がおしゃれだけどさぁ…
- 455 :デフォルトの名無しさん:2010/12/13(月) 02:55:30
- Google App Engineってどうやって勉強したらいいですか?
- 456 :デフォルトの名無しさん:2010/12/13(月) 03:06:42
- 公式のドキュメントがあるじゃん
- 457 :デフォルトの名無しさん:2010/12/13(月) 04:16:32
- フレームワークについての質問もおkですか?
Djangoとか
- 458 :デフォルトの名無しさん:2010/12/13(月) 04:21:49
- DjangoならDjangoスレいったほうがいいだろうよ
- 459 :446:2010/12/13(月) 05:50:10
- 知ってるにはこしたことないけど、あんまり使わないってことでいいのかな。
デリゲーション。
- 460 :450:2010/12/13(月) 07:05:25
- >>451
thnx
要するに他所で実装された処理を(継承ではなく)そのまま受け継ぐ(委譲してもらう)ってことか
Stack2みたいなコードを書いたことあるけどそれが委譲なんだ
(Pythonだから楽だけど他言語だとめんどそうだな)
- 461 :デフォルトの名無しさん:2010/12/13(月) 07:40:41
- いや普通に出来るだろ
- 462 :デフォルトの名無しさん:2010/12/13(月) 09:08:30
- できるできないじゃなく面倒つってんだろ禿
- 463 :デフォルトの名無しさん:2010/12/13(月) 14:52:49
- >>458
すいません、Djangoスレ別にありましたね。
そっちで聞いてみます。ありがとう
- 464 :デフォルトの名無しさん:2010/12/13(月) 16:07:37
- Pythonの入門書一冊読み終えた後ぐらいなんですがコード読んで勉強したいのでオライリーのクックブック買おうかと思うんですが問題ないですかね。。
- 465 :デフォルトの名無しさん:2010/12/13(月) 16:21:57
- >>435
動いたあああああああああ! 動かねぇpythonはGUI糞だなと思っててごめんなさいいいいいいいいいい
- 466 :デフォルトの名無しさん:2010/12/13(月) 18:11:52
- >>464
買うなら先にリファレンス本
- 467 :デフォルトの名無しさん:2010/12/13(月) 19:34:37
- クロージャについて
def maker(N):
def action(X):
return X ** N
return action
これってなんかの役に立つの?
- 468 :デフォルトの名無しさん:2010/12/13(月) 20:22:38
- 環境を閉じ込めておけるから結合を疎にできてロジック分離できるとか、
Stateパターン不要とか、遅延評価に利用出来るとか。
- 469 :デフォルトの名無しさん:2010/12/13(月) 22:10:26
- >>466
お勧めリファレンス本plz
オライリーの日本語版は古くない?
尼だとポケットリファレンスが評価いいね。
- 470 :デフォルトの名無しさん:2010/12/14(火) 01:56:28
- 外部コマンドの質問です。
os.system('ls -al')の例だと、ls -alの対象を変数で書く事は可能ですか?
本当に下らない質問で申し訳ない。
- 471 :デフォルトの名無しさん:2010/12/14(火) 02:32:30
- >>470
s = 'ls -al'
os.system(s)
ってこと?
- 472 :デフォルトの名無しさん:2010/12/14(火) 02:42:01
- >>471
いえ違います。
例えばls -al /home
の/homeです。
- 473 :デフォルトの名無しさん:2010/12/14(火) 03:40:01
- 正規表現リテラルもない糞言語と聞いて
やってきますた!クスクスww
- 474 :デフォルトの名無しさん:2010/12/14(火) 04:02:56
- はっきり言ってなくても困らんよ
- 475 :446:2010/12/14(火) 04:32:27
- >>468
> 環境を閉じ込めておけるから結合を疎にできてロジック分離できるとか、
> Stateパターン不要とか、遅延評価に利用出来るとか。
う ん、もうすこし超初心者にも分るように教えてほしい。
- 476 :デフォルトの名無しさん:2010/12/14(火) 07:24:05
- minidom使ってます。
htmlのbodyタグの最初と最後に「<hoge>広告</hoge>」などを追加するには
どうすればよいでしょうか?
- 477 :デフォルトの名無しさん:2010/12/14(火) 10:30:59
- >>469
ポケリファ一択!
- 478 :デフォルトの名無しさん:2010/12/14(火) 18:17:41
- >>473-474
Pythonはテキスト処理用の言語ってワケじゃないからなあ。
テキスト処理が専門なら文法に組み込むのも良いだろうが
汎用の言語だとライブラリレベルでのサポートが一番適切だろうな。
- 479 :デフォルトの名無しさん:2010/12/14(火) 20:56:23
- 質問お願いします。
.pycを読みたいのですが、どうすれば良いでしょうか?
- 480 :デフォルトの名無しさん:2010/12/14(火) 21:24:56
- >>477
産休
- 481 :デフォルトの名無しさん:2010/12/14(火) 21:32:03
- >>479
decompile.pyとかあったような。どの程度使えるのかは知らない
- 482 :デフォルトの名無しさん:2010/12/15(水) 00:22:54
- みんなのPythonの後半が難しす
- 483 :デフォルトの名無しさん:2010/12/15(水) 00:28:28
- 初版は相当舌っ足らずだったので
後になって戻ってくる程度でいいんじゃないか
半分読めば簡単なスクリプトは組めるだろうし
- 484 :デフォルトの名無しさん:2010/12/15(水) 00:29:05
- 入門書でそれでは先が思いやられますね
- 485 :デフォルトの名無しさん:2010/12/15(水) 00:35:18
- >>483
改訂版だけどねw
>>484
全くだ。
- 486 :デフォルトの名無しさん:2010/12/15(水) 01:23:16
- >>472
s = '/home'
os.system('ls -al '+s)
でいいの?
- 487 :デフォルトの名無しさん:2010/12/15(水) 11:21:12
- >>486
ダメ
- 488 :デフォルトの名無しさん:2010/12/15(水) 18:11:51
- >>487
なぜでしょうか
- 489 :デフォルトの名無しさん:2010/12/15(水) 18:25:00
- a, b, c, d = "I", "Me", "Mine", 1970
print "%s %s %s (%d) is good song." % (a, b, c, d)
- 490 :デフォルトの名無しさん:2010/12/15(水) 23:10:53
- aが必要
- 491 :デフォルトの名無しさん:2010/12/16(木) 00:24:05
- 質問が曖昧すぎて回答できてないのに、なんで質問者がこんなに偉そうなんだ。
エスパーもできない屑は書き込むなってことか?
- 492 :デフォルトの名無しさん:2010/12/16(木) 00:47:18
- >>491
>>487が質問者とは限らない
気に障るならスルーしとけ
- 493 :デフォルトの名無しさん:2010/12/16(木) 07:52:25
- >>470 が本気で質問しているとは限らないのでスルーしてる
- 494 :デフォルトの名無しさん:2010/12/16(木) 20:22:15
- emacs上でCPython shell動かしたときにtabで補完できるようにしたいんですがどのようにすればうまくいくのでしょうか
import rlcompleter とかはだめでした
- 495 :デフォルトの名無しさん:2010/12/18(土) 21:46:38
- はじめてのPythonネットワークプログラミングって本読んでるんだけどサーバがないせいかサンプルコードが実行できない。
何か良い方法ありますか?
エスパーの方お願いします。
- 496 :デフォルトの名無しさん:2010/12/18(土) 21:49:06
- サーバがないせいだな
- 497 :デフォルトの名無しさん:2010/12/18(土) 21:53:37
- FTPとTelnet勉強してるんだけど動かないコード書いてもしょうもないしサーバーの導入する方法もないし不親切だなと。
- 498 :デフォルトの名無しさん:2010/12/18(土) 22:08:42
- どういう環境だか知らないけど、たとえWindowsでもHomeエディションとかでなければ
telnetdやftpdがサービスとして利用できたと思うし、できなくとも
フリーのが転がってるだろうし、
なんならVMWareの類でlinuxでも動かしてやればいいのでは
その本は読んだことないけど、「ネットワークプログラミング」の本では
そんなところまでは扱わないのが普通だと思うよ
- 499 :デフォルトの名無しさん:2010/12/18(土) 22:15:20
- VirtualBox+Ubuntuの方が良いよ
- 500 :デフォルトの名無しさん:2010/12/18(土) 22:25:12
- >>498
そうなんですか。
この辺は自分で調べて頑張って導入するしかないですね。
ありがとうございました。
>>499
推薦どうもありがとう。
- 501 :デフォルトの名無しさん:2010/12/18(土) 22:39:38
- photoshopのpsdのレイヤー位置の編集や透明部分のロックをはずしたいのですが
pythonでやるにはどうしたらよいのでしょうか?
とりあえずやってみたのはpsdのバイナリーデータを書きかえる
というものですが
データを取得するのがうまくいきませんでした。
どうすればいいのでしょうか?
欲しいデータは
ttp://d.hatena.ne.jp/hiroki0/20090802/1249208355の
Layer and Mask Information Blockの部分です。
作ったスクリプトは以下ですが
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import struct
filename = "test1.psd"
LayerandMaskInformationSection = struct.calcsize("<4s<4s<2s<4s<4s<4s<4s<2s")
fo = open(filename, "rb")
raw_psdfileheader = fo.read(LayerandMaskInformationSection)
psdfileheader = struct.unpack("<4s<4s<2s<4s<4s<4s<4s<2s", raw_psdfileheader)
print psdfileheader
5行目が
error:bad char in struct formatでした。
- 502 :デフォルトの名無しさん:2010/12/18(土) 22:49:58
- リンク先に「ビッグエンディアン」てあるけど「<」で大丈夫か?
そしてLMIBのまえのHeaderとCMDBとIRBをスキップしてなくね?
- 503 :デフォルトの名無しさん:2010/12/18(土) 22:50:35
- structにわたすフォーマットのプリフィックスはホントに先頭だけ有効
"<4s4s2s4s4s4s4s2s"
でも"<4sh6xwllhh"の方がいいよ
- 504 :デフォルトの名無しさん:2010/12/18(土) 22:55:58
- あと「s」はc文字列(NUL終端文字列)で4sだと4つ目のNULに到達するまでっぽい
バイト単位ならcbBあたりなんじゃないかな
#ヘルプ斜め読みしただけだから間違ってるかもしれんが
- 505 :デフォルトの名無しさん:2010/12/18(土) 23:07:53
- PIL(Python Imaging Library)にPSDImagePluginあるよ
どの程度の機能があるかしらんけど
参考にはなるんじゃないの
- 506 :501:2010/12/18(土) 23:10:29
- すいません、理解が追いつきません
LMIBの前のも必要だったんですね
てっきりstruct.calcsizeと同じサイズのを持ってきてくれるのかと
都合よく勘違いしてましたOTL
まずはHeaderから順にデータを取ってみてからまたきますOTL
- 507 :デフォルトの名無しさん:2010/12/18(土) 23:15:15
- >>505
リロ忘れですOTL
すごそうなのありがとうございます
- 508 :デフォルトの名無しさん:2010/12/18(土) 23:18:08
- Pythonのstructモジュールがやってくれるのは、バイトの列を
テンプレートにしたがってタプルにアンパックしたり、
あるいは逆にタプルをバイト列にパックすることだけで、
肝心のバイト列をファイルから切り出してくる処理は自分で書く必要がある
先頭の方のデータに興味が無いのなら、単にシークしてスキップすれば
いいんじゃないの
可変長の部分があるのなら、そのブロックのレコード長を読んで
シークする必要がある長さを調べる必要があるけどね
- 509 :502,504:2010/12/18(土) 23:28:48
- s:2バイト i:4バイトと仮定して
Header:「>4cs6csiiss」のバイト数をスキップ
ColorModeDataBlock:「>i」のバイト数をスキップ
Image Resource Block:最初の4バイトにブロック長が格納されている
>まず「>i」でデータ長を読み込み(読み込んだ整数値をnとする)
>続けてnバイトをスキップする
で,LMIBの位置までシークが完了すると思う
- 510 :デフォルトの名無しさん:2010/12/19(日) 00:11:48
- ありがとう、まってまって、まだその段階まで行けてないです
今ヘッダーのデータを取って練習していますが
最初の8BPSは<4sでデータが取れたんですが
その次の値(2バイト、おそらく01だと思うのですが)がうまく取れません。
<4s2sで無理やりもってくると('8BPS', '\x00\x01')となり
なんか近い気はするんだけど・・・ちがうかなあ・・・とおもいます。
<4s2bでは
('8BPS', 0, 1)になってしまいます。('8BPS',01)になるような気がするのですが・・・
http://www.python.jp/doc/2.4/lib/module-struct.html
のフォーマット(C での型)はどのように選んだらよいのでしょうか
8BPSは4つ文字がある(文字列)だから4sになるのは分かりますが
ほかの整数型の取り方はどうなっているのでしょうか?
- 511 :デフォルトの名無しさん:2010/12/19(日) 00:28:14
- >>510=>501です
すいません
- 512 :デフォルトの名無しさん:2010/12/19(日) 01:35:04
- struct.calcsize(〜)で返される数値がバイト数
1/2/4バイトの順にcかs/h/iでいいと思うけど一応↑で確認して
だから最初の4バイト+2バイトは「4sh」になるんでない?
- 513 :501:2010/12/19(日) 02:19:05
- >512
>4shでとれました。ありがとうございます!
が・・・6bitの部分が取れませんでした・・・
">4sh*hii"
の*の字の所を3hにすればいいとおもってやってみたのですが
('8BPS', 1, 0, 0, 0, 4, 704, 896)(正しくは('8BPS', 1, 0, 0, 4, 704, 896)だと思いますOTL)
になってしまいます。
総当たりでx,c,b,h,i,I,l,L,q,Q,f,d,s,p,Pを一文字づつすべて試したのですが
期待したデータが取れませんでした
一応自分がtest1.psdとして使っているpsdファイルもアップします。
http://www.dotup.org/uploda/www.dotup.org1306670.psd.html
- 514 :デフォルトの名無しさん:2010/12/19(日) 03:13:36
- 6bit?6byteだよね
そんな変態サイズは定義されていないだろうから
1バイトか2バイト単位で読み込んだあとでまとめるしかない
「4sh3h」なら
('8BPS', 1, #ここが「4sh」
0, 0, 0, #ここが「3h」
4, 704, 896) #ここが「hii」
になるから
> H = list( 読み込んだタプル )
> H[2:5] = [(H[2]*256**2+H[3]*256+H[4])]
ってすれば6バイトの部分が1つにまとまる
- 515 :デフォルトの名無しさん:2010/12/19(日) 03:18:18
- ごめん嘘ついた
>>514は6バイトが負数だとまずい
で,先のフォーマット見直したら予約ってなってるからこの6バイトは無視していい
パディングの「6x」にしとけば多分>>514の「3h」の部分が消えると思う
- 516 :501:2010/12/19(日) 12:46:13
- ありがとう御座います!
こちらから操作しない値もそれで乗り切れそうですね
助かりました!!
- 517 :デフォルトの名無しさん:2010/12/19(日) 14:06:39
- sys.exit()って組み込みにしてくれればよかったのに
プロンプトから対話モード使ってて終了するのにいちいちimportとかメンドくさ
- 518 :デフォルトの名無しさん:2010/12/19(日) 14:25:07
- Linux とか Ctrl+D,Enter
Windows Ctrl+Z,Enter
- 519 :デフォルトの名無しさん:2010/12/19(日) 14:27:24
- >>517
Ctrl+Z(Win)またはCtrl-D(*nix)
- 520 :デフォルトの名無しさん:2010/12/19(日) 14:29:16
- 対話モード時はimport要らんだろ?
- 521 :デフォルトの名無しさん:2010/12/19(日) 14:29:51
- >>518>>519
それは知ってるけど
- 522 :デフォルトの名無しさん:2010/12/19(日) 14:31:59
- 対話モードは quit() で終了できる
あとはPYTHONSTARTUP環境変数使う
- 523 :デフォルトの名無しさん:2010/12/19(日) 14:32:58
- >>522
ほう。quit()は初めて知った。ありがとう
- 524 :デフォルトの名無しさん:2010/12/19(日) 19:47:18
- >>522
raise SystemExit(status)
ってのもある。
- 525 :デフォルトの名無しさん:2010/12/20(月) 22:25:10
- バイナリファイルの書き変えをしたいのですが
こうすると
import struct
import string
filename = "test1.psd"
fo = file(filename, "rb")
naiyou=""
size=struct.calcsize(">4s")
A=fo.read(size)
print A
naiyou="".join([str(naiyou),str(A)])
size=struct.calcsize(">h")
B=fo.read(size)
print B
#Bの値を000に書きかえる
naiyou="".join([str(naiyou),str("000")])
size=struct.calcsize(">6s")
C=fo.read(size)
print C
naiyou="".join([str(naiyou),str(C)])
fo.close()
print naiyou
ft=file("test2.psd","wb")
ft.write(naiyou)
ft.close()
を実行すると
Aは8BPS、naiyouは8BPS000となるのですがBとCの値は何にも取れません
どうしたらよいのでしょうか?
- 526 :続き:2010/12/20(月) 22:31:36
- import struct
import string
filename = "test1.psd"
nagasa = ">4sh6shiihhii4s"
size = struct.calcsize(nagasa)
fo = file(filename, "rb")
raw_psdfileheader = fo.read(size)
psdfileheader = struct.unpack(nagasa, raw_psdfileheader)
print psdfileheader
fo.close()
こうすると
('8BPS', 1, '\x00\x00\x00\x00\x00\x00', 4, 704, 896, 8, 3, 0, 8908, '8BIM')
というように8BPSの続きのデータも取れるのですが
>525の方法じゃなにが駄目なんでしょうか??
- 527 :デフォルトの名無しさん:2010/12/20(月) 22:49:54
- またおまえか
- 528 :デフォルトの名無しさん:2010/12/20(月) 23:00:33
- >>527
そうです、すいません。
>>256のあとに
psd = list(psdfileheader)
にして
psd[3]=1
と値を変えて
naiyou=struct.pack(nagasa,psd[0],psd[1],psd[2].....)という感じで
ft=file("test2.psd","wb")
ft.write(naiyou)
ft.close()
とやろうとしたんですが
print psdfileheaderでは表示されているpsdfileheader[2]が
print psdfileheader[2]ではなにも表示されないので
>525の方法を試してみたのですがそれもうまくいかず
でした・・・。
- 529 :528:2010/12/20(月) 23:01:59
- 「>>256のあと」じゃなくて「>>526のあと」です
- 530 :デフォルトの名無しさん:2010/12/20(月) 23:28:00
- 質問する気ないだろwwww
- 531 :デフォルトの名無しさん:2010/12/20(月) 23:36:03
- 基礎を疎かにするなよ
>>> a = '\0\0\0'
>>> a
'\x00\x00\x00'
>>> print a
>>> print repr(a)
'\x00\x00\x00'
- 532 :デフォルトの名無しさん:2010/12/21(火) 00:03:44
- ありがとうございます!!!
ぐぐったけど意味が全く分からなかったです!!!
repr()関数は引数で与えた値と等価な値を返すインタプリタ表現(リテラル表記)を文字列として返す
とにかくやってみます!!
- 533 :デフォルトの名無しさん:2010/12/21(火) 01:50:41
- 基地外は頭の病気治してからまた来てくれ
- 534 :デフォルトの名無しさん:2010/12/21(火) 04:16:54
- 便乗だけど__str__と__repr__の違いがいまいち身についてないんだが
前者:人間に読みやすい・理解しやすい文字列形式
後者:eval関数で元のオブジェクトに戻せることが期待できる文字列表現
であってる?
- 535 :デフォルトの名無しさん:2010/12/21(火) 04:25:54
- 違う
- 536 :デフォルトの名無しさん:2010/12/21(火) 06:42:09
- >>534
>便乗だけど__str__と__repr__の違いがいまいち身についてないんだが
__str__() は単に文字列に変換するためのもの。
__repr__() は文字列表現を返すもの。eval関数で元のオブジェクトに戻せることもあるけど、必ずしもそうではない(戻せないものも多い)。
class Foo(object):
pass
Foo().__repr__() #=> '<__main__.Foo object at 0x1003b5ad0>'
- 537 :デフォルトの名無しさん:2010/12/21(火) 07:00:18
- >>> class Foo(object):
... def __str__(self):
... return 'ABC'
... def __repr__(self):
... return 'DEF'
...
>>> f = Foo()
>>> f
DEF
>>> print f
ABC
>>> s = '' + f
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'Foo' objects
>>> s = '%s' % (f, )
>>> s
'ABC'
- 538 :デフォルトの名無しさん:2010/12/21(火) 07:20:51
- >>534
__repr__ はプログラマ、__str__ はその他向けの文字列表現にして返す
なぜ __repr__ が eval すれば元のオブジェクトを復元できる*ような*文字列を
返すものとされているのかといえば、そういう文字列はプログラマにとって
オブジェクトの中身がどういうものか調べたり把握するのに都合がいいから
(実際、Python の repr に相当する Ruby のメソッドの名前は inspect )
なので __repr__ の返り値を eval で実際に復元できるかはたいした問題ではない、
というのが漏れの認識
- 539 :デフォルトの名無しさん:2010/12/21(火) 07:32:59
- 実は __unicode__() もあるので注意
- 540 :デフォルトの名無しさん:2010/12/21(火) 07:39:26
- >>> class Foo(object):
... def __repr__(self):
... return 'REPR'
... def __str__(self):
... return 'STR'
... def __unicode__(self):
... return 'UNICODE'
...
>>> f = Foo()
>>> f
REPR
>>> print f
STR
>>> print '%s' % (f, )
STR
>>> print u'%s' % (f, )
UNICODE
>>> '%s' % (f, )
'STR'
>>> u'%s' % (f, )
u'UNICODE'
- 541 :534:2010/12/21(火) 19:06:33
- >__str__と__repr__の違い
なるほど
__repr__はオブジェクトの文字列表現(<〜 object at 0x????????>みたいな)を定義する
objectクラスを継承してれば__repr__はよく見る↑のような文字列を作ってくれる
コレクションみたいに文字列表現を工夫したい場合に__repr__で定義する
(listとかdictはそうなってるみたい)
ってことか
- 542 :デフォルトの名無しさん:2010/12/21(火) 23:08:51
- pyscripter2.4.1.0を使ってるんだけど
printを書きまくったら40個辺りでpythonインタプリタで
表示されなくなった。
コマンドプロンプトでは表示されてるけど
全部表示される方法ある?
それともこういうもんなの?
- 543 :528:2010/12/22(水) 04:13:37
- いろいろ教えて頂いたおかげで
だいぶんpsdのバイナリーデータの取得できたのですが
データの設定のさいに
Bit 0 = transparency protected, bit 1 = visible
という指定がある場所がありました
実際にこの場所のデータ(1byte)を
取得した時の値は9でした。
自分が設定したい状態のファイルのデータを取得してみると
そのデータは8だったので
同じく8を入力してみたのですが期待した状態になりませんでした。
このBitの設定方法はただ単に9を8に設定すればいいという問題では
無かったのでしょうか?
もしそうなら
このBitの設定方法はどうすればいいのでしょうか??
- 544 :デフォルトの名無しさん:2010/12/22(水) 04:25:18
- 知るかよ。Python関係ない
- 545 :デフォルトの名無しさん:2010/12/22(水) 07:40:40
- psdの仕様書みろ
#絵描きにとってpsdってすごい汎用フォーマットなんだけど標準化とかされてるのだろうか
- 546 :528:2010/12/22(水) 08:41:56
- >545
汎用化は分かりませんが
こういう状態のようです。
ttp://www.fileformat.info/format/psd/egff.htm#ADOBEPHO-DMYID.2
ttp://www.shiojiri.ne.jp/~openspc/format/Photoshop/index.html
ttp://d.hatena.ne.jp/hiroki0/20090802/1249208355
- 547 :528:2010/12/22(水) 11:10:00
- 自己解決しました
9を8にすればいい問題でした。
お騒がせしてすいませんでした。
- 548 :デフォルトの名無しさん:2010/12/22(水) 22:10:04
- struct.unpackを使いたいのですが
ループしなければならない場合どうしたらよいのでしょうか?
struct.unpackではタプルで出力のため
タプルだとデータが更新できないのでどうしたらよいのでしょうか?
h=0
while h < Lyer_suu:
Lyer_nagasa = ">iiiih"
Lyer_size = struct.calcsize(Lyer_nagasa)
raw_Lyer = fo.read(Lyer_size)
t_Lyer_old = struct.unpack(Lyer_nagasa, raw_Lyer)
Lyer_old = list(t_Lyer_old)
Lyer_new = struct.pack(Lyer_nagasa,Lyer_old[0],Lyer_old[1],
Lyer_old[2],Lyer_old[3],
Lyer_old[4])
print u"レイヤー情報(レイヤー個別)のデータ"
print ':'.join(["[4byte] Top",str(Lyer_old[0])])
print ':'.join(["[4byte] Left",str(Lyer_old[1])])
print ':'.join(["[4byte] Bottom",str(Lyer_old[2])])
print ':'.join(["[4byte] Right",str(Lyer_old[3])])
print ':'.join(["[2byte] Channels",str(Lyer_old[4])])
ChannelData_suu = Lyer_old[4]
h +=1
- 549 :デフォルトの名無しさん:2010/12/22(水) 22:56:01
- ま
お
か
- 550 :デフォルトの名無しさん:2010/12/22(水) 23:06:12
- >>548
> struct.unpackを使いたいのですが
> ループしなければならない場合どうしたらよいのでしょうか?
意味不明なので追加説明するかエスパーを待て
> struct.unpackではタプルで出力のため
> タプルだとデータが更新できないのでどうしたらよいのでしょうか?
リストに変換してから要素を更新する
layer_info = struct.unpack(format, f.read(layer_info_size))
temp = list(layer_info)
temp[3] = ...
struct.pack(format, *temp)
- 551 :548:2010/12/22(水) 23:15:08
- すいません、説明し直します。
ループ内でタプルを出力するstruct.unpackを使いたいのですが
ループ2回目の時はstruct.unpackでの出力データが更新できません
どうすればいいのでしょうか?
- 552 :デフォルトの名無しさん:2010/12/22(水) 23:18:23
- なぜ更新できないのか自分の頭で考えてから説明してください
- 553 :548:2010/12/22(水) 23:28:20
- えっ
そもそもタプルはデータが更新できないものだからですよね。
ループ内ではタプルで出力するものは使えないってことでしょうか???
- 554 :548:2010/12/22(水) 23:30:16
- すいません、言い直します
ループ内ではstruct.unpackのようなタプルで出力するコマンドは使えないってことでしょうか??
- 555 :デフォルトの名無しさん:2010/12/22(水) 23:41:05
- そんなわけなかろ
>>> from struct import *
>>> from StringIO import StringIO
>>> buf = pack('>4h', 16, 32, 64, 128)
>>> f = StringIO(buf)
>>> for i in range(4): print unpack('>h', f.read(2))[0],
...
16 32 64 128
- 556 :デフォルトの名無しさん:2010/12/22(水) 23:46:53
- Immutableの解説は任せた
- 557 :548:2010/12/23(木) 02:24:28
- アドバイスありがとうございます!
色々考え違いをしていました。
- 558 :デフォルトの名無しさん:2010/12/23(木) 02:49:52
- というかどこが間違っていてどうやって解決したのか書かなきゃだめだ
経験をスレに還元しる
- 559 :デフォルトの名無しさん:2010/12/23(木) 07:06:29
- PSDよりまえに勉強することがあるだろ
10年ROMってろ
- 560 :デフォルトの名無しさん:2010/12/23(木) 18:08:28
- ファイルに書いたたくさんの単語から重複した単語の数え上げを行いたいのですがファイルから全データを読み込んでソートを行なってからループ文で数え上げを行えば良いでしょうか?
- 561 :デフォルトの名無しさん:2010/12/23(木) 18:14:59
- いいえ
- 562 :デフォルトの名無しさん:2010/12/23(木) 19:45:16
- >>560
まあそれでもいいけど…
「単語」の定義がよくわからんが、単に空白文字で区切られた文字列とすると
from itertools import chain, groupby
words = chain.from_iterable(line.strip().split() for line in file)
duplicates = (k for k, g in groupby(sorted(words)) if len(list(g)) > 1)
こんな感じかな
ソートを使わずsetを使う方法もあるよ、多分もっと長くなるけど
- 563 :デフォルトの名無しさん:2010/12/23(木) 20:04:29
- >>562
単語の定義はそれで大丈夫です。
参考になりましたどうもありがとうございます!
- 564 :デフォルトの名無しさん:2010/12/23(木) 20:52:12
- >> 562
itertools,groupby()とか使う方法はメモリを馬鹿食いするしソートするのが遅い気が。
数え上げには辞書を使うのが鉄板ではないかと思う。
d = {}
for l in file:
for w in l.strp().split():
c = d.get(word, 0)
d[word] = d + 1
あとはd[word]で出現回数を参照できる。
- 565 :デフォルトの名無しさん:2010/12/23(木) 21:18:49
- > itertools,groupby()とか使う方法はメモリを馬鹿食いするし
>>564でも全ての単語を辞書dに(=メモリ上に)格納しているわけだけど、
groupbyを使うとそれ以上に無駄な領域をどこかで消費するの?
http://docs.python.org/library/itertools.html
ここのgroupbyに等価なコードを見る限り、そんな風にはとても見えないけれど
- 566 :デフォルトの名無しさん:2010/12/23(木) 22:10:11
- 問題はここだろ
sorted(words)
- 567 :デフォルトの名無しさん:2010/12/23(木) 22:14:13
- なるほど
- 568 :デフォルトの名無しさん:2010/12/24(金) 00:01:01
- d[word] = c + 1
- 569 :デフォルトの名無しさん:2010/12/24(金) 04:31:10
- pythonのsorted()って空間計算量がそんなにひどいのか?
- 570 :デフォルトの名無しさん:2010/12/24(金) 05:59:11
- sorted() については本題から外れてる気がするが
上のケースでは元のソートされてないリスト words が不要なのだから
sorted(words) するより words.sort() のほうがメモリの消費量が減っていいのではということだろう
にしても Sorting Mini-HOW TO がいまだに保守されていて驚いた
http://wiki.python.org/moin/HowTo/Sorting/
- 571 :564:2010/12/24(金) 06:46:07
- >>565
> >>564でも全ての単語を辞書dに(=メモリ上に)格納しているわけだけど、
してねーよ。
- 572 :デフォルトの名無しさん:2010/12/24(金) 09:42:12
- webpy 利用されてる方いらっしゃいましたら教えてください。
webpyに搭載されているsession機能はリクエストがあるごとにセッションIDを更新したり
するのでしょうか?
認証機能付きサイトを作成したいのですが、セッションハイジャックが怖くて
いろいろ調べていました。
パソコン二台で同一のセッションIDを作成するとどちらからも認証後の機能が
使えてしまっていたので、なにかセキュリティのオプションがあるのかなと思いました。
ソースコードを読んでみたんですが、どうやらIPでチェックをかけているようなのですが、
詳しい方いらっしゃいましたらどのように対処されているか教えていただけませんでしょうか?
- 573 :デフォルトの名無しさん:2010/12/24(金) 10:09:55
- >>571
辞書のキーとして単語を格納してるように見えるが
- 574 :デフォルトの名無しさん:2010/12/24(金) 14:59:04
- >>571
D.keys()で何が返ると思ってるの?
まさかユニークな単語セット!=全ての単語とか言わないよね?
- 575 :デフォルトの名無しさん:2010/12/24(金) 16:22:59
- >>570
>>562のwordsはジェネレータでリストではないから
list.sort()は使えないのでは
>>574
まあ違うといえば違うんじゃないの
重複が無い場合は一致するし
片方をメモリを馬鹿食いと言うほどの重要な違いがあるようには見えないけれども
- 576 :570:2010/12/24(金) 16:58:37
- >>575
これはうかつだった。おっしゃるとおりです
- 577 :デフォルトの名無しさん:2010/12/24(金) 21:31:05
- メモリ的にはそんなに変わらないと思うけど、
ソートするか辞書使うか計算量的にはどっちが軽いんだ?
- 578 :デフォルトの名無しさん:2010/12/24(金) 21:40:49
- 計算量は辞書のほうが軽いと思う
C++のmapみたいにO(log n)の辞書だと、オーダーはソートと同じになるんじゃねーか
多分
- 579 :デフォルトの名無しさん:2010/12/24(金) 23:02:53
- すみません.
ソース(モジュール?)が増えてきたのでフォルダ階層を掘って整理したいんですが,
下や上のディレクトリ階層にあるモジュールをimportするにはどうしたらいいんでしょうか?
- 580 :デフォルトの名無しさん:2010/12/24(金) 23:04:58
- ちなみに,自分は普段C++を使っているので,
C++のヘッダインクルード的な感覚で,
別階層のモジュールをインポートしたい気でいます.
- 581 :デフォルトの名無しさん:2010/12/24(金) 23:06:30
- >>579
./path/to/mymodule.py
をインポートするには、
from path.to import mymodule
- 582 :デフォルトの名無しさん:2010/12/24(金) 23:19:52
- Matplotlibが面白かった
- 583 :578:2010/12/25(土) 00:16:03
- あー
n に log n かけりゃ n log nだからソートと同じじゃね?と思ったのだが
機能面で考えればツリー型のordered mapに要素をつっこんでくのは
ソートそのものなんだから、同じで当たり前だな、馬鹿だww
つまり、両者の違いはhash mapとtree mapの計算量の違いと同等ってことじゃないかな?
大抵はどうでもいい違いである(tree mapは十分に高速である)ともいえるし
速度が重要な場合には無視できない違いであるとも言える
- 584 :デフォルトの名無しさん:2010/12/25(土) 00:28:04
- >上のディレクトリ階層にあるモジュールをimportする
ってできるの?
パスを通すとかではなく>>581みたいな感じで(相対的に)
- 585 :デフォルトの名無しさん:2010/12/25(土) 02:05:48
- for c in "qwerty":
print c
とやると1文字ずつに分割されます
これをn文字ずつに分割してループを回すのは
for i in range(6):
print ("qwerty"*3)[3*i:3*(i+1)] # 3文字ずつ
で出来ますが、よりスマートな方法はありませんか?
- 586 :デフォルトの名無しさん:2010/12/25(土) 02:33:04
- >>585
やっと似たような出力になった。スマートでもないが
http://codepad.org/C8KdL6nN
- 587 :デフォルトの名無しさん:2010/12/25(土) 02:34:24
- ごめん、こっちで
http://codepad.org/i7ZFq4QN
- 588 :デフォルトの名無しさん:2010/12/25(土) 02:46:00
- itertoolsあたりにあって良さそうなんだけどねぇ
- 589 :デフォルトの名無しさん:2010/12/25(土) 03:53:35
- import numpy
s = "qwerty"*3
n = 3
for a in numpy.array(list(s)).reshape(len(s)/n,n): print "".join(list(a))
普段numpyしか使わないとはいえ、我ながら馬鹿すぎる
- 590 :587:2010/12/25(土) 04:20:08
- アホだ、for二つもいらんな。>>587の出力なら>>585に習って
print ["".join([("qwerty"*3)[3*i:3*(i+1)]])for i in range(6)]
とした方がマシか。同一ならこうか
for c in ["".join([("qwerty"*3)[3*i:3*(i+1)]])for i in range(6)]: print c
- 591 :デフォルトの名無しさん:2010/12/25(土) 04:27:16
- 結局for文をリスト内包表記に変えただけという始末。ごめん
- 592 :デフォルトの名無しさん:2010/12/25(土) 04:56:36
- 前に聞いたのでスマートだと思ったのは
izip(*[iter(iterable), ] * count)
かな。pair,ring辺りは確かにほしい
- 593 :デフォルトの名無しさん:2010/12/25(土) 13:00:41
- string="qwerty"*3
while string:
print string[:3]
string=string[3:]
- 594 :デフォルトの名無しさん:2010/12/25(土) 13:30:51
- >>584
パス通さない(sys.path.append("..")しない)のだったら、import文では上はできないんじゃないかなぁ。
C++だと"../foo.h"とかできたんだっけ?
試してないけど、こうすればできるかも
import imp
imp.load_module(name, *imp.find_module(name, ".."))
ただし、おすすめはしない。
こうするくらいなら、sys.path.append("..")した方がきれい。
- 595 :デフォルトの名無しさん:2010/12/25(土) 13:36:23
- >>592
俺もそれ思い出した。
for cs in zip(*[iter("qwerty")]*3):
print cs
で
('q', 'w', 'e')
('r', 't', 'y')
になる。
- 596 :デフォルトの名無しさん:2010/12/25(土) 13:54:37
- >>594
> C++だと"../foo.h"とかできたんだっけ?
できる
#include "/dev/tty"
とすら書ける
>>579
http://www.python.org/dev/peps/pep-0328/
この辺見るといいんじゃないの
ただし、relative importでは、ベースになるモジュールのパスを得るのに
__name__を使っているらしいので、モジュールとしてでなく、スクリプトとして
直接実行する場合は上手く機能しないんじゃないかと思う
(__name__が__main__になってしまうから)
そういう場合は
inspectあたりでモジュールパスを得る
→相対パスとos.path.join()で結合
→impでロード
とかになるんじゃないかな
まあ俺の場合そういう面倒くさいことはやりたくないから、そもそも面倒くさい配置は
避けるけどw
- 597 :デフォルトの名無しさん:2010/12/25(土) 13:58:00
- >>585の案がいろいろでてるけどさ
質問者よりも可読性のある書き方って結局無いのだろうか
>>592,595あたりはシンプルっぽいけどぱっと見で何をしてるのか分からないし
クックブックもいろいろ載ってるけどバッドノウハウ的な物が多い気がする
- 598 :デフォルトの名無しさん:2010/12/25(土) 14:00:34
- >>593は何やってるか分かりやすいと思うけど
- 599 :デフォルトの名無しさん:2010/12/25(土) 14:06:28
- >>598
ループ毎に2度も文字列の部分コピーを作ってるからなぁ
(蛇足だけど俺ならこう書く)
string="qwerty"*3
while string:
output,string=string[:3],string[3:]
print output
>>585だと(書き方が微妙だけど)必要な部分文字列以外のコピーは発生していない
- 600 :デフォルトの名無しさん:2010/12/25(土) 14:08:25
- string="qwerty"*3
for i in range(6):
print string[3*i:3*(i+1)]
これでいいんじゃね
- 601 :デフォルトの名無しさん:2010/12/25(土) 14:09:35
- >>599
そんなのは言われなくても初めから分かってるよ
- 602 :585:2010/12/25(土) 14:20:34
- ライブラリにあるかと思ったのですがないみたいですね
皆様ありがとうございました
ついでですが>>585のようなイテレータに名前をつけるとしたら何がいいでしょうか
(enumerateとかzipとかfilterみたいな)
- 603 :デフォルトの名無しさん:2010/12/25(土) 14:22:44
- split
- 604 :デフォルトの名無しさん:2010/12/25(土) 14:22:59
- >>585
http://docs.python.org/library/itertools.html
ここのレシピは宝の山だから一度(というか何度でも)見るといいよ
レシピのgrouper()がだいたい同じもの、かな
- 605 :デフォルトの名無しさん:2010/12/25(土) 14:24:24
- ライブラリにあるとしたら、そのライブラリの中のコードはどうなってんのって話だし
- 606 :585:2010/12/25(土) 14:33:13
- >>604
おおおおお、すごい
参考にさせていただきます
- 607 :デフォルトの名無しさん:2010/12/25(土) 14:46:43
- >>597
可読性気にするなら、i*3みたいなのは読みにくいからrangeのステップ使った方がいいかもね。
["qwerty"[i:i+3] for i in range(0,6,3)]
一般的に書くなら
nsplit = lambda s, n: [s[i:i+n] for i in range(0, len(s), n)]
- 608 :590:2010/12/25(土) 14:55:03
- ああ、そうすればいいのか。リストの外にfor付ける癖がどうもいかん
- 609 :デフォルトの名無しさん:2010/12/25(土) 20:02:48
- pythonスクリプトの実行ディレクトリに
フォルダを作成するのってどうやったら出来ますか?
- 610 :デフォルトの名無しさん:2010/12/25(土) 20:18:08
- >>609
ディレクトリを作成
http://www.python.jp/doc/release/library/os.html#os.mkdir
実行ディレクトリってのがよく分からんがカレントディレクトリなら
os.getcwd()
スクリプトがおいてあるディレクトリなら
os.path.dirname(sys.argv[0])
- 611 :デフォルトの名無しさん:2010/12/25(土) 21:01:48
- >>610
ありがとうございます><
- 612 :デフォルトの名無しさん:2010/12/26(日) 01:56:41
- mecab,twitterライブラリ使ってbotおもしれぇ.
- 613 :デフォルトの名無しさん:2010/12/26(日) 19:16:48
- クリスマスの間に一気にレベル下がったでござるの巻
- 614 :デフォルトの名無しさん:2010/12/26(日) 21:19:49
- 超初心者用なんだし、これくらいがいいだろ
- 615 :デフォルトの名無しさん:2010/12/26(日) 22:33:01
- 初心者を名乗れば何でも許されると思うなよ
- 616 :デフォルトの名無しさん:2010/12/26(日) 22:50:05
- 隔離スレも兼ねてるんだから、なんでも許されなきゃ機能しないよ
- 617 :デフォルトの名無しさん:2010/12/26(日) 23:23:41
- Pythonって標準モジュール覚えてないとちゃんとしたプログラム書けなくない?
- 618 :デフォルトの名無しさん:2010/12/26(日) 23:35:34
- ちゃんとした?
- 619 :デフォルトの名無しさん:2010/12/26(日) 23:50:59
- >>617
どの言語と比較してる?
- 620 :デフォルトの名無しさん:2010/12/26(日) 23:58:19
- Pythonで躓くようならもう素質がないと諦めた方がいいと思うの
- 621 :デフォルトの名無しさん:2010/12/27(月) 00:04:38
- だが何人も躓かないことはない
- 622 :デフォルトの名無しさん:2010/12/27(月) 00:04:51
- お前ら手厳しいなw
- 623 :デフォルトの名無しさん:2010/12/27(月) 00:05:19
- 文字コードには
- 624 :デフォルトの名無しさん:2010/12/27(月) 00:12:47
- >>617
逆に考えるんだ!
標準モジュールを覚えるだけでPythonは使うことができる!
- 625 :デフォルトの名無しさん:2010/12/27(月) 00:16:27
- 覚えなくたって、こういう機能は大体用意されているだろう、という勘が働けばおk.
- 626 :デフォルトの名無しさん:2010/12/27(月) 00:54:52
- 辞書にキーをdatetime、値をstringでいれています。
キーで日時順にソートしたいのですが、どうすればいいのでしょうか?
- 627 :デフォルトの名無しさん:2010/12/27(月) 01:03:06
- D.items().sort(key=(lambda x: x[0]))
でできない?#脳内検証のみ
- 628 :デフォルトの名無しさん:2010/12/27(月) 01:25:36
- 何もしなくてもソートされるような気がするんだが。
- 629 :デフォルトの名無しさん:2010/12/27(月) 01:35:05
- 自分のほしい機能は大抵用意されている時代である
- 630 :デフォルトの名無しさん:2010/12/27(月) 01:36:35
- そんなあなたにレシピ本。
でもオライリー絶版か
- 631 :デフォルトの名無しさん:2010/12/27(月) 01:47:32
- >>627
ありがとうございます。
ですが、上手くいきませんでした。
>>628
追加時に自動でソートされているかと思ったのですが、そうでもないようでした。
- 632 :デフォルトの名無しさん:2010/12/27(月) 01:54:24
- なら2つのdatetime変数を引数にとって比較結果を返す関数を定義して
sortのcmp引数でその関数を渡せばおk
- 633 :デフォルトの名無しさん:2010/12/27(月) 01:58:48
- >>631
追加時に自動ソートはねーよ。
もちろんsort,sortedとか使っての話だよ。
- 634 :デフォルトの名無しさん:2010/12/27(月) 02:22:01
- これでええやろ
>>> d = {
datetime.datetime(2010, 2, 1): '2010-02-01',
datetime.datetime(2010, 12, 1): '2010-12-01',
datetime.datetime(2010, 6, 1): '2010-06-01',
datetime.datetime(2010, 4, 1): '2010-04-01',
datetime.datetime(2010, 8, 1): '2010-08-01',
datetime.datetime(2010, 10, 1): '2010-10-01',
}
>>> for k in sorted(d):
print k, d[k]
2010-02-01 00:00:00 2010-02-01
2010-04-01 00:00:00 2010-04-01
2010-06-01 00:00:00 2010-06-01
2010-08-01 00:00:00 2010-08-01
2010-10-01 00:00:00 2010-10-01
2010-12-01 00:00:00 2010-12-01
- 635 :デフォルトの名無しさん:2010/12/27(月) 03:55:14
- >>625
>こういう機能は大体用意されているだろう
そうなんだよな
「こういう機能」って頭に浮かぶことが重要
初心者は特に固有名詞の付いた枯れた機能を知らない
- 636 :デフォルトの名無しさん:2010/12/27(月) 08:10:01
- カレントディレクトリに、Aっていうディレクトリを作って
その下に、Bっていうディレクトリを作るにはどうすれば良いですか
- 637 :デフォルトの名無しさん:2010/12/27(月) 08:13:24
- os.mkdir("A")
で、Aディレクトリの中に、Bを作るには…?
- 638 :デフォルトの名無しさん:2010/12/27(月) 08:42:46
- makedirs
- 639 :デフォルトの名無しさん:2010/12/27(月) 09:41:41
- >>638
こういうことですか
ありがとうございます
os.mkdir("A\B")
- 640 :デフォルトの名無しさん:2010/12/27(月) 11:32:14
- os.makedirs("./A/B")
- 641 :デフォルトの名無しさん:2010/12/27(月) 11:56:18
- os.makedirs()で既にあると例外出すのはなんか違う気がしてならない
ディレクトリじゃないなら分かるんだけど
- 642 :デフォルトの名無しさん:2010/12/27(月) 14:40:35
- すでにパスの途中までディレクトリ(フォルダ)が存在する場合は、残りのディレクトリ(フォルダ)を作成します
- 643 :デフォルトの名無しさん:2010/12/27(月) 20:08:54
- pyてょnを実行すると(ダブルクリックすると)すぐにその実行結果が現れるけど
pyてょんをダブルクリックしてすぐにGUIを呼び出すことも出来ますか?
JythonとかwxPythonとか使うと出来るんでしょうか。
簡単にGUIを作るならJavaがいいとか聞きましたがどうなんでしょうか
- 644 :デフォルトの名無しさん:2010/12/27(月) 20:50:23
- 簡単にGUI作るならスクリプト言語(Perl, Python, Ruby)
中規模のGUIアプリ作るならJava, C#
大規模のGUIアプリ作るならC++
- 645 :デフォルトの名無しさん:2010/12/27(月) 20:54:04
- WindowsだけだったらVBが超簡単
- 646 :デフォルトの名無しさん:2010/12/27(月) 20:55:34
- > 簡単にGUI作るならスクリプト言語(Perl, Python, Ruby)
GUIならあんまり簡単じゃねーだろ
- 647 :デフォルトの名無しさん:2010/12/27(月) 20:59:16
- >>643
どういったアプリを作る予定?
- 648 :デフォルトの名無しさん:2010/12/27(月) 21:00:36
- 簡単じゃなくて簡易アプリだな
個人用や小規模アプリ以外でスクリプト言語主体のGUIは使えない
- 649 :デフォルトの名無しさん:2010/12/27(月) 21:08:47
- VBは是非とも鮭鯛
- 650 :デフォルトの名無しさん:2010/12/27(月) 21:09:46
- >>644
RubyはGUI作るのに向いてない
Perlは論外
- 651 :デフォルトの名無しさん:2010/12/27(月) 21:14:36
- >>649
なんで?
- 652 :デフォルトの名無しさん:2010/12/27(月) 21:14:59
- PerlはLinuxシステムなら使うよ
最近はPythonに置き換わってるけど
Rubyはゴミカス
- 653 :デフォルトの名無しさん:2010/12/27(月) 21:28:19
- >>647
指定したディレクトリ以下にある全てのテキストファイルの内容を
数行書き換えるためにテキストフィールドを作って実行ボタン押すだけの
本当に簡単そうなやつ作りたいとおもってます。
- 654 :デフォルトの名無しさん:2010/12/27(月) 21:29:08
- >>651
クラスを継承できない作れない
- 655 :デフォルトの名無しさん:2010/12/27(月) 21:39:26
- >>653
よく分からんがこれで出来ないかな
http://easygui.sourceforge.net/
- 656 :デフォルトの名無しさん:2010/12/27(月) 21:42:56
- http://showmedo.com/videotutorials/video?name=pythonJensFromKids1&fromSeriesID=57
- 657 :デフォルトの名無しさん:2010/12/27(月) 22:10:31
- 質問です。
以下のような、Fooクラスと、Fooクラスを継承したBarクラスがあります。
Fooクラスの実装でCloneを実現しようと思って作ってるのですが、Barクラスの__init__()に引数が必要なため、
「TypeError: __init__() takes exactly 2 arguments (1 given)」と出てしまいます。
"Barクラスを触らずに"Fooクラスの実装で、すっきり解決する方法はないでしょうか。
(実際は、Fooクラスを継承するクラスがいくつかあり、それぞれ__init__()の引数が異なります)
ちなみにBarクラスの「def __init__(self, name):」を「def __init__(self, name=""):」と引数を省略可能にすると、期待通りに動いてます。
(実際はディープとシャローコピーの両方書いてます。最小限のコードなのでクローン周りは突っ込まないで下さい〜)
import copy
class Foo(object):
def __init__(self):
self._data = {}
def __copy__(self):
ret = self.__class__()
ret._data = self._data.copy()
return ret
def Clone(self):
return copy.copy(self)
class Bar(Foo):
def __init__(self, name):
Foo.__init__(self)
self._data["test"] = 100
aaa = Bar("namae")
bbb = aaa.Clone()
- 658 :デフォルトの名無しさん:2010/12/27(月) 23:05:58
- >>656
オーストリア人少年すげー
- 659 :デフォルトの名無しさん:2010/12/27(月) 23:08:14
- >ちなみにBarクラスの「def __init__(self, name):」を「def __init__(self, name=""):」と引数を省略可能にすると、期待通りに動いてます。
それでいいんじゃね?
- 660 :デフォルトの名無しさん:2010/12/27(月) 23:11:48
- centos5.3でpython環境を整えていたらいつのまにかpython2とpython2.4がパスの通ったところに置かれたんですが、どっち使ってればいいでしょうか。メジャーというかstableなバージョンはどちらでしょうか?
- 661 :デフォルトの名無しさん:2010/12/27(月) 23:18:39
- python2
- 662 :デフォルトの名無しさん:2010/12/27(月) 23:34:43
- >>659
あ、いや・・・期待通りっていう書き方が悪かったですね。
Barクラスの__init__の引数は、必須項目なので、初期値は省略できないんです。
インスタンスのコピーで実態を作れば、__init__での初期処理はいらない(という前提で作ってる)ので、
__init__の初期化処理をせずにインスタンスを作りたかったのです・・・。
- 663 :デフォルトの名無しさん:2010/12/27(月) 23:40:48
- nameがどこにも使われてないな
- 664 :デフォルトの名無しさん:2010/12/27(月) 23:50:23
- みんなのpython webアプリ編って良い本ですかね
- 665 :デフォルトの名無しさん:2010/12/27(月) 23:53:09
- >>663
そこつっこまない(;w;
最小構成で突っ込まれるとは思わなかった。
- 666 :デフォルトの名無しさん:2010/12/27(月) 23:56:07
- そこはおへそなの
- 667 :デフォルトの名無しさん:2010/12/28(火) 00:46:11
- >__init__の初期化処理をせずにインスタンスを作りたかったのです・・・。
矛盾してるな
- 668 :デフォルトの名無しさん:2010/12/28(火) 00:48:42
- >>667
やっぱり?汗
自分でも書いた後にそう思った。
うまく言いたいことが伝えれない・・・すまんです。
__metaclass__とか__new__使ったらゴニョゴニョできないかなと思って試行錯誤中・・・。
- 669 :デフォルトの名無しさん:2010/12/28(火) 00:53:35
- BにClone定義してもだめだろうな
- 670 :デフォルトの名無しさん:2010/12/28(火) 01:03:28
- >>664
良書。
- 671 :デフォルトの名無しさん:2010/12/28(火) 01:16:57
- どう書く?
L, A = range(20), range(0,20,2)
print [x for x in L if x in A]
>>> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
print filter( lambda x: x in A, L)
>>> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
print filter( A.__contains__, L)
>>> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
- 672 :デフォルトの名無しさん:2010/12/28(火) 04:29:44
- print A
- 673 :デフォルトの名無しさん:2010/12/28(火) 06:51:38
- Pythonの勉強方法として、写経するみたいに参考書のサンプルを一つ一つPCに入力して
その動作を確認したり、サンプルをいじってみたりするのが、結局は一番の早道でしょうか?
- 674 :デフォルトの名無しさん:2010/12/28(火) 07:00:57
- 死ね
はげ
- 675 :デフォルトの名無しさん:2010/12/28(火) 08:23:03
- サンプルいじるのはいい方法だよ
頭の中で分かったつもりになるよりかはサンプル打ち込んだほうが断然いい
- 676 :デフォルトの名無しさん:2010/12/28(火) 10:12:16
- >>657
6行目をret = Fooにしちゃ、まずいかなぁ?
- 677 :676:2010/12/28(火) 10:14:12
- ごめん。まずいわ。
- 678 :デフォルトの名無しさん:2010/12/28(火) 10:15:37
- >>671
listの代わりにsetを使って集合演算する。
- 679 :デフォルトの名無しさん:2010/12/28(火) 10:54:18
- ipythonの良さがよく分からないので簡単に説明してください
- 680 :デフォルトの名無しさん:2010/12/28(火) 11:05:41
- >>662
__repr__を実装して、evalでオブジェクトを作れば?
- 681 :657:2010/12/28(火) 16:01:36
- >>667
>>__init__の初期化処理をせずにインスタンスを作りたかったのです・・・。
>矛盾してるな
質問したときは、自分でもそう思って >>668 を書いたんだけど、ぜんぜん矛盾してなかった。
君もメタクラス勉強したほうがいい、たぶん。「class定義もオブジェクト」なのが身にしみたよ。
他の言語のクラス概念と照らし合わせると、「コンストラクタを呼ばずにインスタンス作りたい?はぁ?何いってんの?」って感じるけど、
Pythonだと__init__を呼ばずにインスタンスを作ることもできちゃうね。
解決方法は、単に、メタクラスつかって、クラスの動きに手を加えればいいだけだった。
実際はtypeから派生したメタクラスMetaHogeを作って__call__を実装し、Fooで__metaclass__ = MetaHoge と、入れたら終わり。
MetaHogeクラスの__call__では、フラグ切り替えで、__init__を呼び出したり、呼ばなかったりすればいい。
こんな感じにデフォルトの__call__の中で__new__と__init__を呼ぶ処理を行ってるのを書き換えちゃう。
def __call__(cls, *args, **kwargs):
instances = cls.__new__(cls, *args, **kwargs)
if not MetaHoge._initdisable:
cls.__init__(instances, *args, **kwargs)
return instances
なんてことなかった・・・・。Pythonは奥が深い、楽しいよPython。
>>676 >>680
少しでも考えてくれてありがとん。
__repr__は使ったことないので、よくわからんです・・・。
これ、派生クラスは実装しなくてもスーパークラスで実装するだけでいけるのかな?
あと、__repr__をevalすると、全部新規生成になるから、ディープコピー相当になるのかな?
ちょっとこのあたり、私の知識じゃ、試さないとわからないや、ここの挙動。
うーん、いずれにしろ、今回はシャローコピーとディープコピーの両方を実装したかったから、__repr__は見送りかな。
とりあえず、満足いく方法を見つけたので、コレで閉めます。
おつきあいありがとう〜。
- 682 :676:2010/12/28(火) 16:25:01
- 他の解決法見つけたみたいだから今更だけど、こうしたらできた…
def __copy__(self):
ret = self
ret._data = self._data.copy()
return ret
コンストラクタを呼ばずにコピーしたいと書いてる割に、
実際にエラー出てる原因は__copy__内でコンストラクタ呼び出してることっぽかったから。
- 683 :デフォルトの名無しさん:2010/12/28(火) 16:25:44
- ごめん。また、ぜんぜんできてない。
- 684 :デフォルトの名無しさん:2010/12/28(火) 16:42:43
- >>682 >>683
copy.copy()かcopy.deepcopy()を呼び出すと、その中でインスタンスが生成されて、__init__が呼び出されるのよね。
で、「引数の数あわねーよ」って怒られる・・・。
__copy__の定義は、copy.copy()かcopy.deepcopy()が呼ばれたときの挙動を変更するだけなので、
今回のメタクラスつかって解決した方法では、ぜんぜん関係なかったです。
「__copy__が定義されてるされてない」に関わらず動くようになりました。
- 685 :デフォルトの名無しさん:2010/12/28(火) 16:44:10
- >>684
あ、copy.copy()は__copy__で、copy.deepcopy()は__deepcopy__ね。
- 686 :デフォルトの名無しさん:2010/12/28(火) 17:08:05
- Python 2.7 を使っています。
Windows上でPythonで作ったアプリケーションを
配布するにはやはり py2exe などで exe 化して
配布するのが常套手段なのでしょうか?
インストーラ、アンインストーラをつけたいと思っています。
また、できればアップデータもつけたいと思っています。
開発中はバージョニングツールとしてbzrを使っているので
bzr update ですぐ終わりますが、リリース後のアップデートは
また別の仕掛けが必要そうで、rpm や deb での配布ならともかく
Windows でなにか便利な方法があるのか知りたいと思っています。
C++やC#で作ったアプリケーションはInno Setupでパッケージ化
しています。たまに EXEpress CX のフリー版を使うこともあります。
「Windows で動く Python アプリケーションの配布(と更新)」
というのは初めてでして、なにか定番のやり方があれば教えて
頂きたいと思っています。
- 687 :デフォルトの名無しさん:2010/12/28(火) 21:00:04
- 対話モードで
for i in range(10):
print (i)
でエラーが出たのですがなぜでしょうか・・
- 688 :デフォルトの名無しさん:2010/12/28(火) 21:02:44
- まずはエラーの内容を(ry
- 689 :デフォルトの名無しさん:2010/12/28(火) 21:03:31
- >>687
お爺ちゃんお口くちゃい
- 690 :デフォルトの名無しさん:2010/12/28(火) 21:03:52
- >>687
とりあえずPythonのバージョンを確認してみれ。
3未満だったらお気の毒、printは関数ではなく文だ。
- 691 :デフォルトの名無しさん:2010/12/28(火) 21:05:27
- IndentationError: expected an indented block
と出ました。
- 692 :デフォルトの名無しさん:2010/12/28(火) 21:06:26
- >>690
バージョンは3.1です
- 693 :デフォルトの名無しさん:2010/12/28(火) 21:08:02
- >>691
じゃあインデントがないんじゃんw
- 694 :デフォルトの名無しさん:2010/12/28(火) 21:10:36
- >>690
まあ、print文でもprint(i)はちゃんと通る。
- 695 :デフォルトの名無しさん:2010/12/28(火) 21:11:48
- >>693
一文字開けたらちゃんと出来ましたw
- 696 :デフォルトの名無しさん:2010/12/28(火) 21:15:09
- 基本くらい学んどけw
- 697 :690:2010/12/28(火) 21:16:46
- >>691
ちくしょーそっちかよ!
「言語処理系はfor文の次の行がインデントされてるもんだと期待してたんだけど、お前のコードはインデントされてないんだよなー」という意味のエラーメッセージだ。
>>694
マジッスか!?
(i) はiと同じとは思ってたんだけど、printと(の間に空白が無くてもエラーにならんとは思わなかった……。
- 698 :デフォルトの名無しさん:2010/12/28(火) 21:22:39
- IDLEとプロンプトは違うんですね・・・IDLEは自動でインデントしてくれてたのか
- 699 :デフォルトの名無しさん:2010/12/28(火) 21:31:18
- (i, ) で一要素のタプルになったりはする
- 700 :デフォルトの名無しさん:2010/12/28(火) 22:01:27
- Amazon.co.jp: みんなのIDLE: 岡田 賢治 : 本
- 701 :デフォルトの名無しさん:2010/12/28(火) 23:28:00
- この早さなら言える
Ruby, Ruby, Ruby
- 702 :デフォルトの名無しさん:2010/12/28(火) 23:33:26
- 滓しかいねーわ
2ch終わってるな
- 703 :デフォルトの名無しさん:2010/12/28(火) 23:35:41
- ┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
- 704 :デフォルトの名無しさん:2010/12/29(水) 01:21:05
- なんのために勉強するかによると思うよ
仕事で使わなくちゃならないなら、写経もいいし、初心者ブログ作るのもいい
もし、自分で何か作りたいならその何かを作るのが一番いい
- 705 :デフォルトの名無しさん:2010/12/29(水) 01:26:14
- >>704
>>673
めっちゃ亀レスだったぽ
- 706 :デフォルトの名無しさん:2010/12/29(水) 01:30:20
- バッチファイルにpythonのスクリプトを組み込んだら
前のバッチ処理(ファイルを変更)が終わるより早く
pythonスクリプトが動き出しちゃうんだけど
これはどうしたら前のファイル変換が終わった事を
pythonに伝えればいいんでしょうか??
- 707 :706:2010/12/29(水) 01:44:21
- ごめんなさい、取り消します。
勘違いでした、すいません
ちゃんと動いてましたOTL
- 708 :デフォルトの名無しさん:2010/12/29(水) 02:00:21
- 5963
- 709 :デフォルトの名無しさん:2010/12/29(水) 10:12:25
- boost.python って Python 3に対応してたのか。
- 710 :デフォルトの名無しさん:2010/12/29(水) 23:00:38
- easy_installってアンインストールはeasyじゃないのか。
- 711 :デフォルトの名無しさん:2010/12/30(木) 04:56:19
- アンインストールはeasyだよ
ただ面倒なだけ
- 712 :デフォルトの名無しさん:2010/12/30(木) 05:17:46
- バージョンは3.1です。
フォルダを飛ばして、ファイルだけ取得するには何の関数を使えばベストでしょうか?
C:\hoge1.txt
C:\hoge2.txt
C:\HOGE ← こいつは取得しない
- 713 :デフォルトの名無しさん:2010/12/30(木) 06:08:10
- C:\hoge2.txt っていいう名前のフォルダだったら?
- 714 :デフォルトの名無しさん:2010/12/30(木) 06:10:15
- os.path.isfile
os.path.isdir
- 715 :712:2010/12/30(木) 13:59:55
- >>713
「フォルダを飛ばして」です
>>714
有難うございます。
後付なってしまいますが、listdirみたいな感じでListで返してくれるのが理想です。
何となく、listdirとisfileの組み合わせで何とかなるような気がしますが。
無いんでしょうか?
- 716 :デフォルトの名無しさん:2010/12/30(木) 14:03:19
- 無いアルヨ
- 717 :デフォルトの名無しさん:2010/12/30(木) 14:07:27
- import os
filter(os.path.isfile, os.listdir(PATH))
- 718 :デフォルトの名無しさん:2010/12/30(木) 14:08:04
- >>715
filter(os.listdir(os.path.isfile, os.path.listdir(d))とか書けばよいのと違うか?
- 719 :718:2010/12/30(木) 14:12:51
- かぶった上に
×os.path.listdir(d)
↓
○os.listdir(d)
だな。
リスト内包だとこうなる。
[p for p in os.listdir(d) if os.path.isfile(p)]
- 720 :715:2010/12/30(木) 14:20:51
- >>716
>>717
>>718
一発でできる関数て無いもんかな?って疑問に思いましたので質問させていただきました。
有難うございました。
- 721 :デフォルトの名無しさん:2010/12/30(木) 14:29:33
- 標準モジュールのリファレンスで良いサイトってありますか。
- 722 :デフォルトの名無しさん:2010/12/30(木) 14:32:40
- >>721
公式でいいだろww
- 723 :デフォルトの名無しさん:2010/12/30(木) 14:39:05
- >>721
http://www.doughellmann.com/PyMOTW/
こんどほんもでるよと
- 724 :デフォルトの名無しさん:2010/12/30(木) 14:45:45
- >>722-723
どもどもありがとう
- 725 :デフォルトの名無しさん:2010/12/30(木) 17:19:51
- 公式のって戻り値が具体的に何なのかわかりにくくない?
- 726 :デフォルトの名無しさん:2010/12/30(木) 17:27:57
- わかりにくいね
っていうか何故か書いてないのが多い
- 727 :デフォルトの名無しさん:2010/12/30(木) 18:16:08
- そんなあなたにパイソンレシピオススメ
- 728 :デフォルトの名無しさん:2010/12/30(木) 18:18:01
- いいえ
結構です
間に合ってます
- 729 :デフォルトの名無しさん:2010/12/30(木) 19:55:47
- py2exeを使うと
.pyのままだとちゃんとフルパスで取れるのに
exeにしたとたん
sys.argv[0]の中身がファイル名だけになってしまいます。
どうしたらフルパスで取得できますか???
↓py2exe用のスクリプト
#-*- coding: utf-8 -*-
#python2.6で作成
#conv.pyをpy2exeでexeファイルにするためのスクリプト
#コマンドプロンプトでset.py py2exeと入力すると動く
from distutils.core import setup
import py2exe
py2exe_options = {
"compressed": 1,
"optimize": 2,
"bundle_files": 2,
"includes" : ["lxml._elementpath","gzip"] }
setup(
options = {"py2exe": py2exe_options},
console = [
{"script" : "conv.py", "icon_resources": [(1,"a.ico")]}],
zipfile = None)
- 730 :続き:2010/12/30(木) 20:00:39
- ↓sys.argv[0]を使ったスクリプト
# -*- coding: utf-8 -*-
#python2.6で作成
import zipfile
import os
import sys
import codecs
import shutil
from lxml import etree
#sys.stdout のエンコードの変更(Python2.6 まではOK、3からは通らない)
sys.stdout = codecs.getwriter('cp932')(sys.stdout)
pydir=os.path.dirname(sys.argv[0])
print sys.argv[0]
.pyでの出力はC:Users\ユーザー名\Desktop\otp5\dist\conv.py
.exeでの出力はconv.exe
になってしまいます
- 731 :デフォルトの名無しさん:2010/12/30(木) 20:37:27
- Pythonでバイナリのかたまり同士の
XORをとるのにもっとも早いと思われる方法はなんでしょうか?
10MB程度の同じサイズのバイト列のXORを取りたいと思っています。
こういうのはやっぱり拡張モジュールを書いてCとかSIMD命令を
使ってやるのが良いのでしょうか?
- 732 :デフォルトの名無しさん:2010/12/30(木) 21:11:43
- numpy使ってこんなのとか
>>> import numpy
>>> a = numpy.frombuffer("01234567", numpy.uint8)
>>> b = numpy.frombuffer("abcdefgh", numpy.uint8)
>>> (a ^ b).tostring()
'QSQWQSQ_'
- 733 :デフォルトの名無しさん:2010/12/30(木) 21:15:41
- >>729-730
exeはダブルクリックしてるの?
cmd.exeから実行してるの?
あるいはそれ以外?
- 734 :デフォルトの名無しさん:2010/12/30(木) 21:32:37
- >>729-730
またお前か
python - how can i get the executable's current directory in py2exe? - Stack Overflow
http://stackoverflow.com/questions/2292703
- 735 :デフォルトの名無しさん:2010/12/31(金) 02:09:04
- バッチファイルに適当なファイルをドラッグアンドドロップしています。
ヒントありがとうございます。
なんとか読んでみます。
- 736 :デフォルトの名無しさん:2010/12/31(金) 02:17:54
- ┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘
- 737 :デフォルトの名無しさん:2010/12/31(金) 17:22:42
- eclipse3.6+pydevで環境組んだが入力補完等が上手く働かないです。
↓のように*.pyファイルを自分で作成すると駄目で、
http://viploader.net/ippan/src/vlippan176948.jpg
↓GrobalBrowserで参照できる*.pyファイルだと正常に動作してるみたいです。
http://viploader.net/ippan/src/vlippan176949.jpg
大晦日に何ですが、対処法等心当たりある方おりませんか?
- 738 :デフォルトの名無しさん:2010/12/31(金) 17:46:51
- ctrl+spaceでは出る?
- 739 :デフォルトの名無しさん:2010/12/31(金) 18:01:23
- >732の1つ目の画像下段、2つ目の画像下段のいずれも、
ctrl+spaceを押した所なのですが、駄目でした。
1つ目は、画像じゃわかりませんが、自動補完のリストが出るかわりに
半角スペースが入力されています。
- 740 :デフォルトの名無しさん:2010/12/31(金) 18:02:13
- >739
訂正、732じゃなくて737でした。
- 741 :デフォルトの名無しさん:2010/12/31(金) 18:39:41
- Windows XP Service Pack 3
Python 2.7
です。
あるテキストファイルがあります。
そのテキストファイルの全ての行は、空行かまたは3つ以下の,で区切られた項目(項目内に,が混ざっていることはない。)の羅列です。
例えば
ttp://uproda.2ch-library.com/328270iJf/lib328270.txt
(化学物質英語用語集(1) ttp://www.rondely.com/zakkaya/irir/chem.htmよりお借りしました。)
こんな感じです。
この様なファイルをよみこみ、
n番目の要素についてソートするにはどういう方法が良いでしょうか。
(整数nは0, 1, 2 ,3のどれかであり、関数の引数などで実行時に決まるとします。)
現在の所
@テキストファイル1行ずつ読み込んでlineに代入。
Alen(line)==0なら無視して次へ。
Bif line.count(",") < 3 :
line = line + ( "," * (3 - line.count(",")) )
とすることで,を強制的に3つにする。
Cline.split(",")でリスト(タプル?)にする。
Dここからどうすれば??
な状態です。
だいぶ回りくどいので、まさにその為にあるような標準ライブラリや
出来合いのライブラリがあったりしませんでしょうか。
よろしくお願いいたします。
- 742 :デフォルトの名無しさん:2010/12/31(金) 18:49:42
- とりあえずCまでを繰り返して二次元配列を作って
n = 2
hoge.sort(key=lambda x: x[n])
でnを適当に変える
- 743 :デフォルトの名無しさん:2010/12/31(金) 18:53:35
- 最大何行あるんだろうな
- 744 :デフォルトの名無しさん:2010/12/31(金) 19:11:48
- import sys,os,csv
tmp=[]
with open('lib328270.txt','r') as f:
for row in csv.reader(f):
if len(row)>0:
while len(row)<3:
row.append('')
tmp.append(row)
# 3列目の要素でソートする
for row in sorted(tmp, key=lambda t: t[2]):
print ",".join(row)
sys.exit(0)
- 745 :741:2010/12/31(金) 19:28:24
- >>742->>744
ありがとうございます。
さっそく作ってみます!
最大行数は今のところ400程度ですが、ここから一気に急増してもおかしくない状態です。
(その急増の仕方が単に末尾に追加されていくだけなので、
定期的にこのスクリプトでソートしようかと思いまして。)
- 746 :デフォルトの名無しさん:2010/12/31(金) 23:10:47
- 400位なら問題ないかな
- 747 :デフォルトの名無しさん:2010/12/31(金) 23:52:28
- バージョン 3.1.3を使用しているのですが
dbfファイルを読み書きするにはどうすれば良いでしょうか?
ググってdbfpyというのは見つけましたが、2.X系でないと使えないようです。
超絶初心者なので、何が何だか分かっていない部分が多いのですが、
よろしくお願いします。
- 748 :デフォルトの名無しさん:2010/12/31(金) 23:56:52
- >>746
こういうのって上限っていくらぐらいなの?
- 749 : 【吉】 :2011/01/01(土) 00:05:44
- あけおめことよろ
- 750 :デフォルトの名無しさん:2011/01/01(土) 00:06:27
- >>748
環境によるんじゃない?
- 751 :デフォルトの名無しさん:2011/01/01(土) 00:07:44
- >>750
そうなのか。
10000とか100000とかその程度でPythonくんがあぼんしちゃったりするってこと!?
- 752 :デフォルトの名無しさん:2011/01/01(土) 09:10:44
- そんなことにはならないから安心しろ
あるとしてもただのメモリ不足だ
- 753 :デフォルトの名無しさん:2011/01/01(土) 09:54:19
- Python 3.1.3での質問です
# encoding: euc-jp
x = "テストU"
print(x)
Uのところで
SyntaxError: 'euc_jp' codec can't decode bytes in position 33-34: illegal multib
yte sequence
となります。
ソースファイルがEUCであることと、リテラルでUの文字を使うことは避けられないのですが、
その上でエラーをなんとか回避する方法はないでしょうか?
- 754 :デフォルトの名無しさん:2011/01/01(土) 11:15:58
- >>753
日本語EUCにローマ数字って含まれてたっけ?
- 755 :デフォルトの名無しさん:2011/01/01(土) 11:24:39
- >> 0xADB5 - 0xADBE
- 756 :デフォルトの名無しさん:2011/01/01(土) 11:30:38
- euc_jisx0213とeuc_jis_2004にはあるみたいだけど、これでいいんだろうか?
- 757 :デフォルトの名無しさん:2011/01/01(土) 14:54:45
- >>756
ありがとうございます、読めました
ところで、どこを探せばeuc_jisx0213/euc_jis_2004を見つけられるのか、
後学のために教えていただけませんか?
- 758 :デフォルトの名無しさん:2011/01/01(土) 15:19:16
- http://docs.python.org/library/codecs.html#standard-encodings
- 759 :デフォルトの名無しさん:2011/01/01(土) 15:19:45
- 7.8. codecs ― Codec registry and base classes ― Python v2.7.1 documentation
http://docs.python.org/library/codecs.html#standard-encodings
JIS X 0213 - Wikipedia
http://ja.wikipedia.org/wiki/JIS_X_0213
- 760 :デフォルトの名無しさん:2011/01/01(土) 16:20:55
- >>758-759
ありがとう!
- 761 :741:2011/01/01(土) 18:18:49
- あけましておめでとうございます。
>>742->>744
ありがとうございました。
ご教示いただいた方法で解決致しました!
- 762 :デフォルトの名無しさん:2011/01/01(土) 19:54:21
- 753の便乗だけど、
# encoding: euc_jp
x = "テスト"
「煤vはどのcodecを使っても絶対にパースできないよね
pythonはスクリプト言語と思えないほど文字処理がクソだよな
- 763 :デフォルトの名無しさん:2011/01/01(土) 22:22:37
- 'テスト'.decode('cp932')
encoding.*見て自分でどうにかすりゃいいじゃん
- 764 :デフォルトの名無しさん:2011/01/01(土) 22:42:08
- >>762
euc_jpってことは、ひょっとしてJIS X 0212の語末のシグマがΣに化けた?
- 765 :デフォルトの名無しさん:2011/01/01(土) 22:54:25
- >>763
それ以前にソースのパースエラーで落ちるんじゃない?
- 766 :デフォルトの名無しさん:2011/01/01(土) 23:09:40
- # encoding: euc_jp
ここがおかしい
- 767 :デフォルトの名無しさん:2011/01/01(土) 23:16:13
- >>766
ソースがEUCである以上、それを何に変えても動かないと思われ
- 768 :デフォルトの名無しさん:2011/01/01(土) 23:26:15
- codecが対応していないと言うことは、EUCのWebで狽含むページをopenした場合に
それを情報を欠落させずにdecodeすることが不可能ということか。
どうしてもやりたかったらbyte処理で頑張る必要がある、と…
- 769 :デフォルトの名無しさん:2011/01/01(土) 23:33:50
- >>> u'Σ'.encode('euc_jp')
'\xa6\xb2'
>>> '\xa6\xb2'.decode('euc_jp')
u'\u03a3'
Python2.6だが、何の問題もないように見えるのだが
一体何を問題にしているのだ?
- 770 :デフォルトの名無しさん:2011/01/01(土) 23:42:29
- >>769
1.Σと狽ナちがう文字。Σなら動く
2.ソースコードがEUCの場合の話
コンソールじゃなくてEUCでファイル作ってやってみ
- 771 :デフォルトの名無しさん:2011/01/01(土) 23:43:47
- >>770
なるほどー
- 772 :デフォルトの名無しさん:2011/01/01(土) 23:44:51
- #>>769
# encoding: euc_jis_2004
x = "テスト"
#これをEUCで保存して実行→Syntax Error
#Python2.6でも再現
- 773 :デフォルトの名無しさん:2011/01/01(土) 23:44:58
- Σ(Sigma/U+03A3)ではなく(Summation/U+2211)の方だな。
JIS X 0213では定義されてないからeuc_jis_2004でも無理だが、
cp51932組み込めればパース出来るんでねぇか。
- 774 :デフォルトの名無しさん:2011/01/02(日) 00:00:09
- >>773
2.4.3のパッチはあるみたいだね。
http://sourceforge.jp/projects/legacy-encoding
3系列はなさげ。
- 775 :デフォルトの名無しさん:2011/01/02(日) 01:44:02
- python3でバイナリ列を標準出力に出す標準的な方法ってどんなものですか?
とりあえず今は
sys.stdout = open(sys.stdout.fileno(), "wb")
sys.stdout.write(b"hello")
と書いていますけど、pythonは初心者ですのでPython wayとして正しいのか自信がありません。
詳しい方是非教えてください
- 776 :デフォルトの名無しさん:2011/01/02(日) 01:45:49
- 413のひとか
- 777 :デフォルトの名無しさん:2011/01/02(日) 08:34:19
- >>775
問題ないと思うけど、python wayかどうかといわれると自信がない
- 778 :デフォルトの名無しさん:2011/01/02(日) 08:45:17
- How to write binary data in stdout in python 3? - Stack Overflow
http://stackoverflow.com/questions/908331/how-to-write-binary-data-in-stdout-in-python-3
- 779 :デフォルトの名無しさん:2011/01/02(日) 11:26:23
- http://wiki.python.org/moin/PortingPythonToPy3k
sys.stdout.flush()
sys.stdout.buffer.write(some_binary_data)
sys.stdout = sys.stdout.detach()
- 780 :777:2011/01/02(日) 13:14:30
- >>778-779
だれも返信しないから知ったかぶってレスしたらごらんのあり様だよ…orz
- 781 :デフォルトの名無しさん:2011/01/02(日) 17:26:57
- PILについて教えて下さい
psdファイルをレイヤー別にPngで出力しようと思ったのですが
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import Image
im = Image.open("bbb.psd")
im.save("xx.png")
とやると
png画像は一枚しか出力されないし
bbb.psdは開いたままになってしまいます。
im.close("bbb.psd")やim.close()にしても
AttributeErrorになってしまいます。
どうしたらいいでしょうか?
- 782 :デフォルトの名無しさん:2011/01/02(日) 18:03:56
- AttributeErrorがなぜ出てるのか分かる?
エラーメッセージを読んで自分の頭で考えてみましょう
- 783 :デフォルトの名無しさん:2011/01/02(日) 18:14:17
- >>782
わかんないですOTL
普通のファイルの時は
f=open("temp.txt","w")
f.write("------test--------")
の後に
f.close()
で行けますよね・・・
画像の場合はどうしたら・・・?
- 784 :デフォルトの名無しさん:2011/01/02(日) 18:18:58
- >>783
とりあえずエラーメッセージを貼れ
- 785 :デフォルトの名無しさん:2011/01/02(日) 18:28:51
- ↓だとAttributeError:closeとでます。
import Image
im = Image.open("aaa.psd")
im.save("xx.png")
im.close()
ふと普通のファイルと同じ様にやってみたら
ファイルが閉じてくれました。
import Image
fo = file("aaa.psd", "rb")
im = Image.open(fo)
im.save("xx.png")
fo.close()
でもレイヤーごとに出力するには
どうしたらいいのでしょうか?
- 786 :デフォルトの名無しさん:2011/01/02(日) 18:42:01
- ドキュメントはない
http://lmgtfy.com/?q=python+pil+psd+seek
- 787 :デフォルトの名無しさん:2011/01/02(日) 18:44:29
- もう少しPythonという言語自体を学ぼうという気がないとどうしようもないよ
AttributeError:closeが出るのは、ありもしないメソッド(つまりclose())を
呼ぼうとしているから
imにどんな属性があってどんな使い方ができるか調べたいときは
対話環境で
dir(im)
help(im)
とかやってみるといいよ
あとは、ドキュメントを読む
ファイルが閉じないのは、開かれたファイルへの参照をimが握っているからで、
imへの参照がなくなれば、その時点でファイルは閉じられるはず
対話環境でやってるんなら、閉じたいときは明示的に
del im
とかするといいよ
それと、PILのimageオブジェクトは、seek()でPSDのレイヤーやGIFアニメのフレームを
飛ばせるはず
もっとも、俺がちょっと試したところでは、Photoshop CSについていた
サンプルPSDのほとんどをPILでは開けなかったけどな
- 788 :デフォルトの名無しさん:2011/01/02(日) 18:54:02
- >>787 お前いいやつだな
- 789 :デフォルトの名無しさん:2011/01/02(日) 19:26:28
- どんだけPDFが好きなんだよ
- 790 :デフォルトの名無しさん:2011/01/02(日) 20:10:34
- >>787
ありがとうございます。
まだ、このコマンドを使うとこう動くぐらいまでしか・・・OTL
↓del imを付けたら無事ファイルが閉じてくれました!
import Image
im = Image.open("aaa.psd")
im.save("xx.png")
del im
psdファイルのレイヤーはフレームでは分けれないのでしょうか・・・?
import Image
im = Image.open("aaa.psd")
try:
while True:
im.save(str(im.tell()) + '.png')
im.seek(im.tell()+1)
except EOFError:
pass
del im
- 791 :デフォルトの名無しさん:2011/01/02(日) 20:38:27
- >>790
そのコードは「aaa.psd全体をPNGに変換したファイル」をレイヤの数だけこしらえてるように見えるが。
PSDファイルを持ってないから試してないが、ImageSequenceモジュールってのを使うとよさげな気配。
- 792 :デフォルトの名無しさん:2011/01/02(日) 20:57:41
- >>「aaa.psd全体をPNGに変換したファイル」をレイヤの数だけこしらえてるように見えるが。
そういうわけでは一切なく…OTL
これもエラーでした
(SystemError: _imaging.c:215: bad argument to internal function)
↓psdファイル
http://www.dotup.org/uploda/www.dotup.org1335852.psd.html
import Image
im = Image.open("aaa.psd")
im.seek(1)
im.save("1.png")
im = Image.open("aaa.psd")
im.seek(0)
im.save("0.png")
im = Image.open("aaa.psd")
im.seek(2)
im.save("2.png")
del im
- 793 :デフォルトの名無しさん:2011/01/02(日) 21:17:50
- ImageSequenceってこれのことですか???
http://www.java2s.com/Open-Source/Python/GUI/Python-Image-Library/Imaging-1.1.7/PIL/ImageSequence.py.htm
これってどうやって使うんですか??
See the README file for information on usage and redistribution.
(使用と再分配に関する情報については、リードミー・ファイルを見なさい。)ってあるんですけど
リードミーファイルってどこに・・・OTL
- 794 :デフォルトの名無しさん:2011/01/02(日) 21:26:51
- >>793
こうやって使うんです。
http://www.pythonware.com/library/pil/handbook/imagesequence.htm
- 795 :デフォルトの名無しさん:2011/01/02(日) 21:37:16
- >>792
エラーメッセージを省略するなよ。Tracebackから最後まで全部だ
お前は読む気がないから分からないだろうが
必要な情報がちゃんと書き出されているんだ
- 796 :デフォルトの名無しさん:2011/01/02(日) 21:53:42
- >794ありがとうございます
やってみましたけど
レイヤーごとに読みだされませんでした。
import Image, ImageSequence
im = Image.open("aaa.psd")
index = 1
for frame in ImageSequence.Iterator(im):
frame.save("frame%d.png" % index)
index = index + 1
del im
>795
どうもすいません
エラーメッセージ全体はこれでいいですか??
Message File Name Line Position
Traceback
<module> C:\Users\ユーザー名\Desktop\module1.py 24
save C:\Python26\lib\site-packages\PIL\Image.py 1439
_save C:\Python26\lib\site-packages\PIL\PngImagePlugin.py 572
_save C:\Python26\lib\site-packages\PIL\ImageFile.py 484
SystemError: _imaging.c:215: bad argument to internal function
- 797 :>796:2011/01/02(日) 22:18:59
- >>796で出力されたファイルは以下です。
http://www.dotup.org/uploda/www.dotup.org1336039.zip.html
- 798 :デフォルトの名無しさん:2011/01/02(日) 22:45:40
- http://www.java2s.com/Open-Source/Python/GUI/Python-Image-Library/Imaging-1.1.7/PIL/PsdImagePlugin.py.htm
これの使い方はどこにありますか??
http://www.pythonware.com/search.htmで検索しても見当たらないです・・・。
- 799 :デフォルトの名無しさん:2011/01/02(日) 23:06:11
- もう使ってる。psdを開いたときのImageがそのファイルのPsdImageFile
>>> im = Image.open('hoge.psd')
>>> im
<PIL.PsdImagePlugin.PsdImageFile image mode=RGB size=640x480 at 0x127C760>
あと、PILはpsdの読み込みしかサポートしていないので注意
- 800 :デフォルトの名無しさん:2011/01/02(日) 23:16:43
- ありがとうございます!
こんな情報も取得できるのですね
import Image
im = Image.open("aaa.psd")
print repr(im)
psdからPNGにするのに
なにか関係があるかと思ったのですが・・・
- 801 :デフォルトの名無しさん:2011/01/03(月) 03:37:41
- 池沼って本当に居るんだな
- 802 :デフォルトの名無しさん:2011/01/03(月) 05:15:22
- 自己紹介乙
- 803 :デフォルトの名無しさん:2011/01/03(月) 18:35:25
- レイヤーごとじゃなくてなんか色ごと?になってしまいます
どうしたら・・・OTL
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import Image
import Image
im = Image.open("aaa.psd")
print im.mode
print im.size
try:
while True:
im.save(str(im.tell()) + '.png')
im.seek(im.tell()+1)
print u"****データ取得テスト*********"
print "mode:"+im.mode
print "tile:"+str(im.tile)
print "frame:"+str(im.frame)
print "fp:"+str(im.fp)
print "layers:"+str(im.layers)
except EOFError:
pass
del im
- 804 :デフォルトの名無しさん:2011/01/03(月) 20:26:36
- >>803
単純にPILのPSD読み込みがバグってるんじゃないの?
- 805 :デフォルトの名無しさん:2011/01/03(月) 21:25:47
- im.layersの中にレイヤの情報が入ってるはずだから、
PILがまともに解析できてるっぽいかどうかは、そこ見れば自分で分からんか?
それと、PsdImagePlugin.pyの中には
# Adobe PSD 2.5/3.0 file handling
と書いてあるが、それは大丈夫なのか
Photoshop3.0ってレイヤーが最初に導入された16年ぐらい前のバージョンで、
PSD3.0はそのフォーマットだと思うが
- 806 :デフォルトの名無しさん:2011/01/03(月) 22:36:27
- tkinterってなんて発音するのですか
- 807 :デフォルトの名無しさん:2011/01/03(月) 22:50:35
- アドバイスありがとうございます。
im.layersの中身は
[('\x94w\x8ci', 'RGB', (0, 0, 640, 480), [('packbits', (0, 0, 640, 480), 15242L, 'R')]),
('\x83\x8c\x83C\x83\x84\x81[ 1', 'RGBA', (0, 12, 620, 473), []),
('\x83\x8c\x83C\x83\x84\x81[ 2', 'RGBA', (235, 31, 602, 428), []),
('\x83\x8c\x83C\x83\x84\x81[ 3', 'RGBA', (90, 116, 443, 363), []),
('\x83\x8c\x83C\x83\x84\x81[ 4', 'RGBA', (182, 44, 515, 417), [])]
こんな感じです。
\x83\x8c\x83C\x83\x84\x81と\x94w\x8ci以外は何なのか
何となく分かりそうなんですがその84とか83が分かりません。
PsdImagePlugin.pyのdef _layerinfo(file):辺りにありそうですが
RGBAの事しか書いてない???様子です。
- 808 :デフォルトの名無しさん:2011/01/03(月) 22:57:13
- その16進の文字列はレイヤー名だろう
中身が知りたければ
print '\x94w\x8ci'.decode('cp932')
とでもやってみればわかる
が、見たところ、壊れてるようだな
cp932でデコードできそうにないバイト列が混じっているようだから
ちゃんとPSD 3.0か確認したのか?
そうでなければPILが正常にパースできなくとも文句は言えないぞ
- 809 :デフォルトの名無しさん:2011/01/04(火) 00:07:49
- アドバイスありがとうございます!
PSD3.0かどうかは分からなかったですが
aaa.psdのファイルをバイナリーエディタで開いてレイヤー名の部分を調べてみると
print "\x83\x8c\x83C\x83\x84\x81[ 4".decode('cp932')
で「レイヤー4」になりました。
- 810 :デフォルトの名無しさん:2011/01/04(火) 00:47:47
- ああ、壊れてるのかと思ったのが勘違いか、ごめん
ならちゃんとレイヤー情報はパース出来てるっぽいな
- 811 :デフォルトの名無しさん:2011/01/04(火) 18:53:22
- ここで教えて貰ったアドヴァイスを元に
psdファイルの中身を調べるスクリプトをなんとか作ったけど
この先、psdから複数pngにするのと
複数pngからpsdにするにはどうすればいいか
アドバイスお願いします。
http://www.uproda.net/down/uproda187952.zip.html
(aaa.psdの中身を見てその後bbb.psdに移動するスクリプト)
*自分の持ってるphotoshopではマスクが作れないので
マスクレイヤーがあったりしたらうまく動かない仕様です
参考にしたサイト
http://d.hatena.ne.jp/hiroki0/20090802/1249208355
http://www.fileformat.info/format/psd/egff.htm
http://www.shiojiri.ne.jp/~openspc/format/Photoshop/index.html
http://www.java2s.com/Open-Source/Python/GUI/Python-Image-Library/Imaging-1.1.7/PIL/PsdImagePlugin.py.htm
- 812 :デフォルトの名無しさん:2011/01/04(火) 19:15:44
- >>811
どうしてもPythonでやりたいならPythonを真面目に勉強してみることをお勧めする
あとスレ違い
- 813 :デフォルトの名無しさん:2011/01/04(火) 19:29:07
- 年末からうろうろしてるひとだな
- 814 :デフォルトの名無しさん:2011/01/04(火) 22:58:59
- >>812
まずはフォトショスレで今後の必要なデータは何か聞いてみます。
ごめんなさい、これでも真面目なつもりなんですが・・・。
>>813
そうです。
だいぶん、psdの中身がいじれるようになってきたんですが
行き詰ってきました。
- 815 :814:2011/01/04(火) 23:49:43
- ところで、なんで超初心者用スレはくだスレっていうんですか?
最初
パイソン→蛇→管(くだ)っぽい
って思っていましたが他の超初心者スレでも「くだすれ」って
名前になっています
もしかして「くだらないスレ」ってことですかね???
- 816 :デフォルトの名無しさん:2011/01/05(水) 02:19:41
- >>815みたいな「くだらない質問」をするスレだから
- 817 :デフォルトの名無しさん:2011/01/05(水) 13:49:51
- ちゃんと調べればそんなに難しくないだろ
がんばれ
- 818 :デフォルトの名無しさん:2011/01/05(水) 16:12:21
- HTMLParserを使ってタグを順番に解析しようとしています。
feed()の処理を途中で止められないでしょうか?
ttp://pastebin.mozilla.org/909677
2chに貼り付けるには長いのでペーストビンを使いました。
上のコードを実行すると
html
body
elem1
elem2
elem3
end.
このように表示されるんですが、ここでタグ「elem2」を読んだ直後に処理を止めたい。
exit()すれば簡単に止まるんですが後で関数・モジュール化して使おうと考えているので
exit()しないでHTMLParserのfeedだけ止めてたい…
close()とかreset()とか試してみたんですがダメでした。いい方法はないだろうか…
最終的に、
html
body
elem1
elem2
end.
と表示させたいです。
ぐぐるとraiseさせて例外として処理して止めたり、1行づつfeed()してそのつど処理状況を返す
メソッドをつくって何度も確認して止めたりする方法があったんですが、もっと簡単に止められないだろうか…
ttp://www.daniweb.com/forums/thread274868.html
- 819 :デフォルトの名無しさん:2011/01/05(水) 16:48:47
- 制御の中断と再開の方法が欲しいということかな
greenletを使うといいよ
- 820 :デフォルトの名無しさん:2011/01/05(水) 16:53:55
- >>818
特定タグが現れた場合に無視すればいいだけじゃないだろうか?
必要なタグだけ処理すればいいじゃない
http://pastebin.mozilla.org/909723
- 821 :819:2011/01/05(水) 17:21:41
- さすがにこれだけじゃわからんだろうからサンプル書いた
http://codepad.org/RZhkgHf7
- 822 :818:2011/01/05(水) 18:02:40
- >>819-821
レスとコードの見本ありがとうございます。勉強になりました。
実際にはもう少し大きいhtmlを、もう少し複雑に条件分岐させて処理して
かつ、数十〜百数十のhtmlを同時に処理しようとしています。なのでなるべく軽くしたい。
あと、移植性考えてHTMLParser使っています。LinuxとWindowsで動くようにしたい。
↓HTMLParser使う部分のコードはこんな感じです
http://pastebin.mozilla.org/909765
>>819
こんなのあるんですね、知りませんでした。ありがとう。調べてみます。
どんな処理でも途中で止めたりできるのかな?
>>820
タグの名前(tag)と属性の名前と値(attrs)に分ける処理を、HTMLParserの内部でしていると思うんです。
かつ、HTMLParserは最初から最後のタグまで一つづつ処理してる。
なのでたくさんタグがある大きなhtmlだと、特定のタグ以降もその処理が続き困る…
handle_starttag()の内部で無視するだけでなく、やっぱりfeed()の処理を止めたいな、という状況です。
以前まではBeautifulSoupとか他のHTMLパーサー使ってたんですが、移植性考えて
初めてHTMLParser使うことにしました。
HTMLParserの内部のフラグか何かをFalseにするみたいな簡単に止める方法ないかなあああああ
- 823 :デフォルトの名無しさん:2011/01/05(水) 18:09:17
- 例外が移植性もあって一番楽じゃないの?
- 824 :デフォルトの名無しさん:2011/01/05(水) 18:10:51
- >HTMLParserの内部のフラグか何かをFalseにするみたいな簡単に止める方法ないかなあああああ
HTMLParser.pyをカレントディレクトリにコピーしてきて数行書き換えればできるんじゃね
気にくわない動作をする標準ライブラリーはいつも俺色に染めてるぜ
- 825 :819:2011/01/05(水) 18:14:17
- >>822
> どんな処理でも途中で止めたりできるのかな?
コルーチンってのはそういうもんだよ
まあ、どうやら止めるだけでいいみたいだから、
単に例外投げるだけでいいんじゃないの
コルーチンが便利なのは、単に止めるだけじゃなくて、止めたところから
再開したい場合ね
- 826 :デフォルトの名無しさん:2011/01/05(水) 18:22:23
- datファイルのテキストを1行ごとに読み込むにはどうしたらいいんですか?
日本語ヘタですみません
1行毎に読み込んで、1行づつ内容を書き換えていきたいのですが
- 827 :デフォルトの名無しさん:2011/01/05(水) 18:33:26
- 一行ずつ表示。lineに一行分入っているから適当に書き換える。
末尾に改行コードが入っているのでrstripとかしてくれ
>>> f = open('1289105386.dat','r')
>>> for line in f:
print line
- 828 :デフォルトの名無しさん:2011/01/05(水) 19:04:32
- while文を使ってx1、x2、・・・x10という10個の変数を作ってそれぞれにデータを入れたいのですが、
どうしたら良いでしょうか。
while i < 11:
x + str(i) = ある行列
i = i + 1
と書いたらエラーが出てしまいました。
- 829 :デフォルトの名無しさん:2011/01/05(水) 19:12:14
- for i in range(10): exec 'x%d = %d' % (i, i)
でもリストで代用できないか検討すべき
- 830 :デフォルトの名無しさん:2011/01/05(水) 19:14:01
- 変数に文字列足してるじゃん
- 831 :デフォルトの名無しさん:2011/01/05(水) 19:14:07
- pythonの正規表現についてわからないのですが、噛み砕いて説明してください
- 832 :デフォルトの名無しさん:2011/01/05(水) 19:15:03
- http://pastebin.mozilla.org/909823
- 833 :デフォルトの名無しさん:2011/01/05(水) 19:15:42
- やなこった
- 834 :デフォルトの名無しさん:2011/01/05(水) 19:16:14
- >>831
おことわりだ
- 835 :デフォルトの名無しさん:2011/01/05(水) 19:18:03
- >>829
>>832
こんな初歩的な質問に答えて頂き
ありがとうございました。
- 836 :デフォルトの名無しさん:2011/01/05(水) 19:19:56
- えと、改行毎に配列に格納するにはどうしたらよいでしょうか
- 837 :デフォルトの名無しさん:2011/01/05(水) 19:20:00
- var_nameって何?
- 838 :デフォルトの名無しさん:2011/01/05(水) 19:20:48
- >>837
いやそれを聞くなら vars() って何? だろう
教えてやらんけど
- 839 :デフォルトの名無しさん:2011/01/05(水) 19:22:12
- >>831
みんぱい読んだが俺も正規表現は訳じゃワカメだったよ
- 840 :デフォルトの名無しさん:2011/01/05(水) 19:22:57
- >>839
いまは理解できたんですか?
- 841 :デフォルトの名無しさん:2011/01/05(水) 19:23:41
- 正規表現とかSQLとかHTTPプロトコルとかは知ってないとどうしようもない基礎知識じゃないか
時間をかけてでも勉強しておいたほうがいいとおもうぞ
- 842 :デフォルトの名無しさん:2011/01/05(水) 19:27:15
- >>840
バリバリ
- 843 :デフォルトの名無しさん:2011/01/05(水) 19:28:48
- >>842
なら、少し解説を・・
- 844 :デフォルトの名無しさん:2011/01/05(水) 19:33:44
- オススメ
http://www.geocities.jp/m_hiroi/light/python04.html
- 845 :デフォルトの名無しさん:2011/01/05(水) 19:49:25
- >>836
http://www.python.jp/doc/release/library/stdtypes.html#file.readlines
- 846 :デフォルトの名無しさん:2011/01/05(水) 20:20:04
- どの言語つかっても、正規表現は、絶対役に立つ。
とりあえず基本は抑えたほうがいいよね。
私はここで覚えた。わかりやすかったよ。
http://www.sixnine.net/regexp/
- 847 :デフォルトの名無しさん:2011/01/05(水) 20:46:07
- 要するに文字列の検索、置き換えでおk
- 848 :デフォルトの名無しさん:2011/01/05(水) 22:26:51
- reモジュールでできることならそれでもいいかもしれないが
正規表現とはなんぞやでその答えだとアウトだな
- 849 :デフォルトの名無しさん:2011/01/05(水) 23:29:17
- 16進のアドレス表記をしたいけど
"%X" %addで大文字の16進表記が出来るのはわかったけど
文字の先頭に0を付けて桁数を揃えて表示したい場合はどうすればいいですか?
↓こんな感じにしたいんです
001
002
003
・
・
・
00F
010
011
- 850 :デフォルトの名無しさん:2011/01/05(水) 23:31:52
- 左に00000・・・・を連結して、右からバッサリ切る!
- 851 :デフォルトの名無しさん:2011/01/05(水) 23:34:43
- "%03X"
- 852 :849:2011/01/05(水) 23:43:52
- >>850
意味が分からないwww
>>851
あたまに0が付いたカッコいい表記ができました!
ありがとうございます!
- 853 :デフォルトの名無しさん:2011/01/06(木) 00:10:14
- >>852
850の言いたいのは、例えば1Aという文字列があったとして
左に0をいっぱい繋げて0000001Aとする。そして必要な桁数右から切り取る。
例えば"%05d"%xと同等の処理は、xが5ケタ以下の整数だとして
("0" * 5 + str(x))[-5:]
と書くことが出来る
Pythonではprintf表記が使えるから関係ないけど、JavaScriptなどでは重宝するテクニック
- 854 :デフォルトの名無しさん:2011/01/06(木) 00:11:02
- 質問です。
reduce関数と同じ処理を内包表現で書くことが出来ますか?
for文を使わないと書けないような気がするのですが…
- 855 :デフォルトの名無しさん:2011/01/06(木) 00:35:58
- >>853
あまりにも初心者すぎる質問したから
からかわれてるのかと思ってた
解説ありがとう!
- 856 :デフォルトの名無しさん:2011/01/06(木) 00:44:57
- >>854
簡単に言うとできない
無理やりやると、例えば↓のような感じ
>>> foldl = lambda f, xs, init:\
... (lambda a: [a.append(f(a[-1], x)) for x in xs] and a[-1])([init])
>>> foldl(lambda x, y: x + y, range(1, 11), 0)
55
>>> foldl(lambda x, y: x.append(y) or x, range(10), [])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- 857 :デフォルトの名無しさん:2011/01/06(木) 00:54:08
- import re
import os
file = raw_input('please_file_name:')
f = open(file, 'r')
for line in f:
pattern = r'(.*?)<>(.*?)<>(.*?)<>(.*?)<>'
replace = r'<div><span>\1</span>\2\3</div><div>\4</div>'
html = re.sub(pattern, replace, line)
print html
f = open("test.html","w")
f.write(html)
f.close()
このソースだと1行しか書き出されないのですが全行書き出すにはどうしたらいいですか?
- 858 :デフォルトの名無しさん:2011/01/06(木) 01:15:07
- >>853
ちょっと前にあった「CSVのソート」なんか、リストにダミーの要素を足してフィールドの数を揃えるのに
同じアルゴリズム(というと大げさだが)技が使えるな。
ループ回してリストにappend()するよかエレガントな感じだ。
- 859 :デフォルトの名無しさん:2011/01/06(木) 01:40:22
- >>857
print html のインデントを忘れてるとか
というか入力データと欲しい出力の例ぐらい書くべき
- 860 :デフォルトの名無しさん:2011/01/06(木) 01:47:54
- >>857
それだと、
1行ずつ読み込んではその行を置換した結果をhtmlという変数に代入する
ということを繰り返して
最後にhtmlという変数の中身を書きだしているのだから、
最後に格納された値(つまり、最後の行を置換した結果)しか書き出されないのは
当然だな
- 861 :デフォルトの名無しさん:2011/01/06(木) 03:20:56
- Pythonって最近は学校教育とかで教えてたりするの?
宿題聞いているような雰囲気がこのスレから伝わるんだけど
- 862 :デフォルトの名無しさん:2011/01/06(木) 03:41:58
- いやくだすれですし
- 863 :デフォルトの名無しさん:2011/01/06(木) 06:01:10
- >861
11月ぐらいからの
お騒がせPSD、PIL、ImageMagick関係は全部自分だわ
ごめんね
あああ会社行きたくねぇぇぇ
- 864 :デフォルトの名無しさん:2011/01/06(木) 06:33:10
- 同一人物なのは誰でも分かると思う
- 865 :デフォルトの名無しさん:2011/01/06(木) 06:36:34
- このスレで解答するに値する質問はほぼ皆無だよね
こいつらドキュメントも読めない文盲なんじゃないかと思うときが多々ある
- 866 :デフォルトの名無しさん:2011/01/06(木) 07:24:38
- くだスレですから
- 867 :デフォルトの名無しさん:2011/01/06(木) 07:44:10
- Pythonの場合はそもそもドキュメントがないからなぁ
- 868 :デフォルトの名無しさん:2011/01/06(木) 07:59:16
- 、ミ川川川彡 ,ィr彡'";;;;;;;;;;;;;;;
ミ 彡 ,.ィi彡',.=从i、;;;;;;;;;;;;
三 ギ そ 三 ,ィ/イ,r'" .i!li,il i、ミ',:;;;;
三. ャ れ 三 ,. -‐==- 、, /!li/'/ l'' l', ',ヾ,ヽ;
三 グ は 三 ,,__-=ニ三三ニヾヽl!/,_ ,_i 、,,.ィ'=-、_ヾヾ
三 で 三,. ‐ニ三=,==‐ ''' `‐゛j,ェツ''''ー=5r‐ォ、, ヽ
三. 言 ひ 三 .,,__/ . ,' ン′  ̄
三 っ ょ 三 / i l,
三. て っ 三 ノ ..::.:... ,_ i ! `´' J
三 る と 三 iェァメ`'7rェ、,ー' i }エ=、
三 の し 三 ノ "'  ̄ ! '';;;;;;;
三 か て 三. iヽ,_ン J l
三 !? 三 !し=、 ヽ i ,.
彡 ミ ! "'' `'′ ヽ、,,__,,..,_ィ,..r,',",
彡川川川ミ. l _, , | ` ー、≡=,ン _,,,
ヽ、 _,,,,,ィニ三"'" ,,.'ヘ rー‐ ''''''"
`, i'''ニ'" ,. -‐'" `/
ヽ ! i´ /
ノレ'ー'! / O
- 869 :デフォルトの名無しさん:2011/01/06(木) 08:24:45
- ないわけじゃないだろw
公式のドキュメントの探しづらさはひどいけどな
- 870 :デフォルトの名無しさん:2011/01/06(木) 09:29:46
- 会社行ったら今日休みだった・・・。
addという配列に.appendを使って
合計値を追加してるんだけどうまく値が入らない。
何がおかしいですか??
i = 0
sum = add[adds]
print "sum="+str(sum)
print "add[adds]=" + "add["+str(adds)+"]="+str(add[adds])
while i < ChannelData_suu:
sum += 2
print "sum+2="+str(sum)
add.append(sum)
print "add[adds+i*2+1]="+"add["+str(adds+i*2+1)+"]="+str(add[adds+i*2+1])
sum += 4
print "sum+4="+str(sum)
add.append(sum)
print "add[adds+i*2+2]="+"add["+str(adds+i*2+2)+"]="+str(add[adds+i*2+2])
ChannelData_nagasa += "hi"
i += 1
- 871 :デフォルトの名無しさん:2011/01/06(木) 09:32:45
- 出力結果はこうです。
sum=11245
add[adds]=add[61]=11245
sum+2=11247
add[adds+i*2+1]=add[62]=11296 #sum+2=11247と同じ値になってほしい・・・
sum+4=11251
add[adds+i*2+2]=add[63]=11297 #sum+4=11251と同じ値になってほしい・・・
sum+2=11253
add[adds+i*2+1]=add[64]=11307
sum+4=11257
add[adds+i*2+2]=add[65]=11308
sum+2=11259
add[adds+i*2+1]=add[66]=11484
sum+4=11263
add[adds+i*2+2]=add[67]=11488
sum+2=11265
add[adds+i*2+1]=add[68]=11492
sum+4=11269
add[adds+i*2+2]=add[69]=11496
- 872 :デフォルトの名無しさん:2011/01/06(木) 09:33:26
- >>870
str大好きなんだね。まずはチュートリアルをしっかり読め
http://www.python.jp/doc/release/tutorial/index.html
- 873 :デフォルトの名無しさん:2011/01/06(木) 09:44:17
- >>870
>会社行ったら今日休みだった・・・。
なんで無職はこういうわかりやすい嘘を書くかなぁ
- 874 :デフォルトの名無しさん:2011/01/06(木) 09:48:25
- え〜、もうちょっとヒントの範囲を狭めてよぉ〜
いま不況だから会社自体の休みが多いだけだよぉ
はー分からんOTL
- 875 :デフォルトの名無しさん:2011/01/06(木) 09:52:58
- >>873
にちゃんではわりと多いよ。
他にも
* 仕事は午後から
* 有給を使った
* 彼女と約束がある
とか。
スレと関係ないのにこういう一文を挿入しちゃう奴は何かしら
コンプレックスがあるんだろうね。
- 876 :デフォルトの名無しさん:2011/01/06(木) 09:56:22
- すくなからず後ろめたいことがあるから
無意識にいらんことを書いちゃうんでしょ
- 877 :デフォルトの名無しさん:2011/01/06(木) 10:01:16
- まあ、質問してる時点でかなり後ろめたいってのはあるよ。
いつも駄目な質問ばかりしてるから・・・
- 878 :デフォルトの名無しさん:2011/01/06(木) 10:01:49
- >>870-871
ループの直前で"print len(add), adds"を実行して値を確かめろ
- 879 :デフォルトの名無しさん:2011/01/06(木) 10:12:23
- うあ、ありがとう!!
len(add)と addsの値が違ってた!!
前の部分を調べてくるよ!!!!
あと","で文字列繋げれたんだね
教えてくれて有難う!!!
- 880 :デフォルトの名無しさん:2011/01/06(木) 10:37:09
- まぁ今書き込んでる奴は全員ニートだけどな
- 881 :デフォルトの名無しさん:2011/01/06(木) 10:41:23
- 大学生舐めんなよ
- 882 :デフォルトの名無しさん:2011/01/06(木) 10:48:22
- >>881 ぷっ
- 883 :デフォルトの名無しさん:2011/01/06(木) 10:50:58
- >>881
ぺろぺろ
- 884 :デフォルトの名無しさん:2011/01/06(木) 10:53:08
- スレタイが
「ニートが会社員と大学生を装うスレ その9」
に変更になったようです
- 885 :デフォルトの名無しさん:2011/01/06(木) 10:55:41
- >>873
会社行ったら今日シャッター閉まってて
怒鳴ってる人がいっぱい集まってた
ならリアルなんだけどな
- 886 :デフォルトの名無しさん:2011/01/06(木) 11:00:45
- >>884
高学歴の俺に嫉妬すんなよ
- 887 :886:2011/01/06(木) 11:12:57
- ちなみに最終学歴は
北京カラオケ大学大学院 音痴矯正科 卒業
カラオケ博士
どうせお前らなんて良くてもハーバード卒だろ
ニートが嫉妬するのも無理ないかw
- 888 :デフォルトの名無しさん:2011/01/06(木) 11:33:06
- さむい
- 889 :デフォルトの名無しさん:2011/01/06(木) 11:33:17
- >>886
hima desu ne.
- 890 :デフォルトの名無しさん:2011/01/06(木) 13:03:32
- >>889
higa yasuo.
- 891 :デフォルトの名無しさん:2011/01/06(木) 13:24:52
- >>890
おい、やめろ
- 892 :デフォルトの名無しさん:2011/01/06(木) 15:30:33
- PSDファイル・・・ついにImageData部分まで内容を取得できたんだけど
次はどうすればいいんだぁぁぁぁ
Rle圧縮調べたら一杯情報出てきたさ
もうね、わけわからん
うごごぉぉx
- 893 :デフォルトの名無しさん:2011/01/06(木) 16:46:19
- オライリーの初めてのpythonを見ながら勉強してるがつまらん・・・なんか作りたい
- 894 :デフォルトの名無しさん:2011/01/06(木) 17:03:08
- Pythonで彼女作ったよ
importし放題
- 895 :デフォルトの名無しさん:2011/01/06(木) 17:05:18
- >893
psd←→Png変換ソフトを作ってくださr(y
- 896 :デフォルトの名無しさん:2011/01/06(木) 17:11:35
- >>895
無理
- 897 :デフォルトの名無しさん:2011/01/06(木) 17:30:29
- つまらんなら作ればいいじゃん
学校で無理矢理勉強させられてるわけじゃないんだろ
意味わかんね
- 898 :デフォルトの名無しさん:2011/01/06(木) 17:32:25
- 俺のような初心者は何が作れるのか・何を作ったらいいかがわからないのだ(キリッ
- 899 :デフォルトの名無しさん:2011/01/06(木) 17:42:27
- * Python のソースコードの半角スペースと を相互変換するスクリプト
* テキスト中のタブと半角スペースを相互変換するスクリプト
* 2ch の dat ファイルと HTML を相互変換するスクリプト
* ISBN-10 を指定すると Amazon の在庫状況を調べるスクリプト
さあがんばれ
- 900 :デフォルトの名無しさん:2011/01/06(木) 17:51:23
- >>899
有難うございます。
最初はdatとhtmlの相互変換をチャレンジしてみます。
- 901 :デフォルトの名無しさん:2011/01/06(木) 18:12:19
- >>898
何か作りたい物があるから
その手段として
プログラムやり始めるんじゃないのか???
- 902 :デフォルトの名無しさん:2011/01/06(木) 18:15:12
- >>899
うっかりリストに入れちゃったけどそれが一番難しい
dat -> HTML の片道変換だけでもできればたいしたもの
- 903 :デフォルトの名無しさん:2011/01/06(木) 18:24:14
- >>902
頑張ってみます(`・ω・´)
- 904 :デフォルトの名無しさん:2011/01/06(木) 18:34:36
- >>898
大量のファイルを規則的にリネームするような使い捨てスクリプトとか。
例えば「番組名+録画日時」のファイル名から、第○話の形にリネームするとか。
タートルグラフィックで遊んでみるのもいいかもね。
Python(command line)から↓を1行ずつ入れてみる(IDLEはイマイチ相性が悪い)
from turtle import *
t = Turtle()
t.pendown()
t.forward(100)
t.right(135)
t.forward(130)
t.circle(20,135)
t.forward(80)
t.circle(20,90)
- 905 :デフォルトの名無しさん:2011/01/06(木) 18:53:43
- >>904
おお〜タートルグラフィック面白いですー
有難うございます。
- 906 :デフォルトの名無しさん:2011/01/06(木) 21:05:26
- >>893
Webプログラミングだったりオライリーのデータマイニング本とか言語解析本とか読みたい本とかないの?
- 907 :デフォルトの名無しさん:2011/01/06(木) 21:08:02
- 厨二みたいなタイトルの方を言えよ
- 908 :デフォルトの名無しさん:2011/01/06(木) 21:20:10
- >>906
残念ながら持ってないです。
なにかおすすめの本ありますか?
- 909 :デフォルトの名無しさん:2011/01/06(木) 21:40:59
- それは自分の興味のある本にした方が良いと思うが・・・集合値プログラミングかな〜
- 910 :デフォルトの名無しさん:2011/01/06(木) 21:52:53
- >>909
集合値プログラミング・・・(´Д`)??
あ、そういえば最近猫でもわかるネットワークプログラミングを尼で買いました。(Cもやってるので)
- 911 :デフォルトの名無しさん:2011/01/06(木) 22:41:44
- buzztterみたいなのって集合知プログラミングのカテゴリですか?
- 912 :デフォルトの名無しさん:2011/01/07(金) 06:51:45
- http://lotus-network.net/?p=445
これと同じ事できないんだけどどうすりゃいいんだー
- 913 :デフォルトの名無しさん:2011/01/07(金) 10:09:38
- とりあえず必要なモジュールは入れたんだよな?
- 914 :デフォルトの名無しさん:2011/01/07(金) 12:23:15
- >>913
必要なモジュールってなんですか?
そもそもモジュールってなんですか?
- 915 :デフォルトの名無しさん:2011/01/07(金) 12:29:19
- what it needs module?
what's the module?
- 916 :デフォルトの名無しさん:2011/01/07(金) 12:32:22
- >what it needs module?
>what it needs module?
>what it needs module?
>what it needs module?
>what it needs module?
>what it needs module?
>what it needs module?
www
- 917 :デフォルトの名無しさん:2011/01/07(金) 12:38:22
- http://what.it.needs/module?www
- 918 :デフォルトの名無しさん:2011/01/07(金) 12:39:28
- >>914
from mod.anal import plug, vibe
- 919 :914:2011/01/07(金) 12:43:12
- >>918
レスどうも
試してみたけど
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named mod.anal
ってなってダメだった
- 920 :デフォルトの名無しさん:2011/01/07(金) 12:57:26
- >>919
import kick as s
- 921 :デフォルトの名無しさん:2011/01/07(金) 13:07:53
- >>919
そんなの試さなくていいから初心者向けの本一冊買ってきて嫁
- 922 :デフォルトの名無しさん:2011/01/07(金) 13:25:18
- そんなレベルだっていうなら3系入れた可能性もありえるな
- 923 :デフォルトの名無しさん:2011/01/07(金) 17:17:04
- パイソンってオープンソース(?)だっけ??
作ったスクリプトは公開しなきゃいけないとかいうやつ??
別に公開したくないわけじゃなくて
公開するんならどこで公開するんだろうって思ったわけで。
- 924 :デフォルトの名無しさん:2011/01/07(金) 17:26:30
- くだらんレスをしたことを先に後悔しろよ
- 925 :デフォルトの名無しさん:2011/01/07(金) 17:28:52
- オープソンースってなに
- 926 :デフォルトの名無しさん:2011/01/07(金) 18:21:38
- 先頭に数字があるファイルをimportできないのは仕様ですか?
- 927 :デフォルトの名無しさん:2011/01/07(金) 18:24:41
- 仕様を確かめる気もしないから適当だけどたぶんそう
大抵のプログラミング言語で名前の先頭に数字を使うのはご法度
- 928 :デフォルトの名無しさん:2011/01/07(金) 18:28:31
- なるほど。ありがとうございます。
- 929 :デフォルトの名無しさん:2011/01/07(金) 20:57:41
- 数字なのか区別が不可能だから
他言語も同様に宣言や命令文でやっても無理
- 930 :デフォルトの名無しさん:2011/01/07(金) 21:33:16
- O とか l を先頭に汁
- 931 :デフォルトの名無しさん:2011/01/07(金) 21:34:00
- それはちょっと
- 932 :デフォルトの名無しさん:2011/01/08(土) 00:36:52
- 相互変換できました・・・
import urllib.request
print('URLを入力してください。')
url = input()
print('保存場所を指定してください')
path = input()
urllib.request.urlretrieve('url', 'path')
パスのファイル名の拡張子にdatを入力したらhtmlをdatに変換できます。
・・・こういう意味じゃないですよね
- 933 :デフォルトの名無しさん:2011/01/08(土) 02:09:03
- No, off course.
- 934 :デフォルトの名無しさん:2011/01/08(土) 05:38:30
- HTML・DATファイルの相互変換プログラムできました。
今度は自信あります。(`・ω・´) ※Python3.1です。
import os.path
import os
html = '.html'
dat = '.dat'
print('変換するファイルのフルパスを入力してください。')
path = input()
root, ext = os.path.splitext(path)
if ext == '.html':
new = input()
os.rename(path, root + dat)
if ext == '.dat':
new = input()
os.rename(path, root + html)
else:
print('このファイルはHTML/DATファイルではありません。')
- 935 :デフォルトの名無しさん:2011/01/08(土) 05:52:28
- あれ?HTMLからDATに変換するときにelse文が出ちゃう。
DATからHTMLはうまくいくのに・・・?
- 936 :デフォルトの名無しさん:2011/01/08(土) 06:00:32
- 困りました
python3で辞書を作りました
dict = {'hoge':huga,・・・}
で、keyを文字列として取り出したいのですが
dict.keys()
- 937 :デフォルトの名無しさん:2011/01/08(土) 06:04:07
- 途中で書きこんでしまった失礼 以下続き
dict.keys() #dict_keys(['hoge',・・・])
このdict_keysからいかようにすれば文字列が取り出せますか?
- 938 :デフォルトの名無しさん:2011/01/08(土) 06:19:15
- >>> x=dict.keys()
>>> type(x)
<type 'list'>
- 939 :デフォルトの名無しさん:2011/01/08(土) 06:23:12
- 日記はちらうらで
- 940 :デフォルトの名無しさん:2011/01/08(土) 06:29:35
- >>939
ここってちらうらじゃないんですか?
- 941 :937:2011/01/08(土) 06:33:27
- 解決したっぽいです
list(dict) #['hoge',・・・]
list(dict)[0] #'hoge'
解せぬ・・・
- 942 :デフォルトの名無しさん:2011/01/08(土) 06:39:00
- >>> d = { 'hoge': 1 }
>>> d.keys()
dict_keys(['hoge'])
>>> for key in d.keys():
print(key)
hoge
- 943 :デフォルトの名無しさん:2011/01/08(土) 09:22:27
- あ〜それでよかったのか
実質for文でしか使わないしなぁ、それでのこういう改善なのかなんなのか
- 944 :デフォルトの名無しさん:2011/01/08(土) 12:30:23
- import shutil
def co():
src = "C:\\Documents and Settings\\Administrator\\デスクトップ\\py\\a.txt"
dst = "C:\\Documents and Settings\\Administrator\\デスクトップ\\a.txt"
shutil.copyfile(src,dst)
co()
これ実行してもコピーされないんですが、何故ですか?(´・ω・`)
- 945 :デフォルトの名無しさん:2011/01/08(土) 12:44:01
- エラーが出てないかコンソールから実行してみたら?
- 946 :デフォルトの名無しさん:2011/01/08(土) 14:43:42
- こんなエラーがでました(´・ω・`)
File "C:\Documents and Settings\Administrator\デスクトップ\py\co.py", line 4
SyntaxError: Non-ASCII character '\x83' in file C:\Documents and Settings\Administrator\デスクトップ\py\co.py on line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
- 947 :デフォルトの名無しさん:2011/01/08(土) 15:03:50
- >>946
プログラムの一番最初に
# -*- coding: cp932 -*-
を入れとけ
- 948 :デフォルトの名無しさん:2011/01/08(土) 15:35:35
- >>947
おお、ありがとうございます
見事に実行できるようになりました
パスに日本語が含まれてたからエラーが出てたんですかね
- 949 :デフォルトの名無しさん:2011/01/08(土) 17:09:37
- 質問させて
ショートカットの作成について
http://www.python.jp/doc/2.3.5/dist/postinstallation-script.html#SECTION000631000000000000000
create_shortcut(target, description, filename[, arguments[,
workdir[, iconpath[, iconindex]]]])
これをどうしたらショートカット作成できるの?
create_shortcutってPythonの標準関数、、、じゃないよね?
- 950 :デフォルトの名無しさん:2011/01/08(土) 17:40:22
- 以前ショートカットをあつかったときは↓でやったけど
http://code.google.com/p/winsys/
pywin32も必要
- 951 :デフォルトの名無しさん:2011/01/08(土) 18:02:00
- いやそれbdist_wininstでくっつくインストーラーのバイナリに埋め込まれてる
X:\Python2X\Lib\distutils\command\wininst-*.exe ね
- 952 :デフォルトの名無しさん:2011/01/08(土) 19:15:09
- ショートカット作るの面倒くさいんだな
- 953 :デフォルトの名無しさん:2011/01/08(土) 22:23:07
- pythonの標準のモジュールは全てスレッドセーフでしょうか?
threadingとHTMLParserモジュールを一緒に使っているんですが、スレッドの数を増やすと
時々HTMLParserが処理するデーターが重複・混線してしまい、どうやらスレッドセーフじゃないように思える…
自分のプログラミングミスかもしれないのだけれども、一般的にどうなっているのだろう…
python-2.5.2をLinux上で使っています。
- 954 :デフォルトの名無しさん:2011/01/09(日) 12:24:32
- pyGTKがPython 3に対応する予定はあるのですか?
- 955 :デフォルトの名無しさん:2011/01/09(日) 13:28:13
- TIOBE Programming Language of the Year
Year Winner
2010 Python ←
2009 Go
2008 C
2007 Python
2006 Ruby
2005 Java
2004 PHP
2003 C++
ttp://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
- 956 :デフォルトの名無しさん:2011/01/09(日) 13:29:58
- > 2009 Go
瞬間風速でも競ってるのか
- 957 :デフォルトの名無しさん:2011/01/09(日) 13:30:02
- 2回目受賞した言語ってpythonが初めてなのか
- 958 :デフォルトの名無しさん:2011/01/09(日) 13:40:20
- 去年なんか変わった出来事ってあったっけ?
- 959 :デフォルトの名無しさん:2011/01/09(日) 23:13:16
- forループを使って1(hoge.a)、2(hoge.b)、3(hoge.c)を出力させたいのですが、次のコードだと全てhoge.iと認識してしまいエラーが返ってきます。
どうすればiを変数として認識できるのでしょうか。
class hoge:
a = "1"
b = "2"
c = "3"
o = ["a", "b", "c"]
for i in o:
print hoge.i
- 960 :デフォルトの名無しさん:2011/01/09(日) 23:17:09
- for i in o: print getattr(hoge, i)
- 961 :デフォルトの名無しさん:2011/01/09(日) 23:20:04
- >>960
ありがとうございます。助かりました。
- 962 :デフォルトの名無しさん:2011/01/10(月) 10:00:18
- テキストファイルに
「あ***お」という文字列を書いて保存しました。
このテキストファイル内の、「***」の部分を「いうえ」に
置き換える方法が分かりません。
f = open("aiueo.txt",r)
r = f.read()
s = r.find("***")
s.replace("*****","いうえ")
f.close
↑こんなのを試してみましたが、ダメでした・・・。
どうしたら出来ますか。
- 963 :デフォルトの名無しさん:2011/01/10(月) 10:14:15
- # -*- coding: cp932 -*-
r = open('aiueo.txt', 'r').read()
w = r.replace('***', 'いうえ')
open('aiueo.txt', 'w').write(w)
- 964 :デフォルトの名無しさん:2011/01/10(月) 10:17:00
- http://www.python.jp/doc/release/library/stdtypes.html#str.replace
- 965 :デフォルトの名無しさん:2011/01/10(月) 11:00:56
- >>963
ありがとうございます、出来ました。
最後writeしないとダメなんですね。
>>964
ありがとうございます、カウント引数知りませんでした。
- 966 :デフォルトの名無しさん:2011/01/10(月) 14:31:54
- datetimeをunixtimeに変えるにはどうしたらいいでしょうか?
- 967 :デフォルトの名無しさん:2011/01/10(月) 14:41:56
- おっさんにもわかるPYTHONの
”ウィンドウを表示するために--クラスを作成する” で
>> self.wTree.add_from_file(os.path.dirname(os.path.abspath(__file__))+"/"+self.gladefile)にて
glib.GError: root 要素が間違っています: 'glade-interface'
が出るんですがどうしたらいいか助けてください
- 968 :デフォルトの名無しさん:2011/01/10(月) 15:07:27
- こっちで聞いた方がいいんじゃないか?
GTK+プログラミング
http://hibari.2ch.net/test/read.cgi/linux/1188968326/l50
- 969 :デフォルトの名無しさん:2011/01/10(月) 15:12:09
- ぱいそんはおもしろいなあ
- 970 :デフォルトの名無しさん:2011/01/10(月) 15:18:57
- >>968
ありがとうございます
- 971 :デフォルトの名無しさん:2011/01/10(月) 20:07:13
- #!/usr/bin/env python
import Tkinter as tk
def openTxt():
filename = ???
open('filename','w')
f = tk.Frame()
e = tk.Entry(f)
bc = tk.Button(f,text="GO",command=openTxt)
bc.pack();f.pack();e.pack();bc.pack();
f.mainloop()
このfilenameという変数に
TkinterのEntryで入力した文字列が入るようにする仕組みを作って
ボタンを押して実行すると、入力したファイルが作成されるようにしたいのですが
どうしたら出来ますか?
- 972 :デフォルトの名無しさん:2011/01/10(月) 20:59:07
- e.get()で文字列が得られるようだから
e = tk.Entry(f)
def openTxt():
filename = e.get()
でどうかな
- 973 :デフォルトの名無しさん:2011/01/10(月) 21:19:13
- >>972
ありがとうございます
あなたは天才だ
- 974 :デフォルトの名無しさん:2011/01/10(月) 23:27:37
- Pythonの付属のモジュールの説明が羅列してある本ってない?
- 975 :デフォルトの名無しさん:2011/01/11(火) 00:55:59
- れっつプリントアウト&せいほん!
http://www.python.jp/doc/nightly/library/index.html
- 976 :デフォルトの名無しさん:2011/01/11(火) 01:27:46
- >>> import datetime
>>> import time
>>> dt = datetime.datetime.utcnow()
>>> dt
datetime.datetime(2011, 1, 10, 16, 26, 23, 442000)
>>> time.mktime((2011,1,10,16,26,23,0,0,0))
1294644383.0
>>> dt.utctimetuple()
(2011, 1, 10, 16, 26, 23, 0, 10, 0)
>>> time.mktime(dt.utctimetuple())
1294644383.0
- 977 :デフォルトの名無しさん:2011/01/11(火) 13:23:13
- せいほんしたいけど1000pくらいあるから一体幾らになるのやら…
- 978 :953:2011/01/12(水) 01:49:41
- HTMLParserモジュールがスレッドセーフなのかどうか調べています。
スレッドセーフじゃなくなる条件を特定して再現できる小さいコードを書けた…ように思う。
そこでスレ住人の方にお願いなのですが、このコードを実行してみて結果を教えては頂けないでしょうか?
http://codepad.org/AIAMGcWG
1. 2つのスレッドで、それぞれタグが1つだけの小さいhtml「<e>xxx</e>」をHTMLParserに処理させる
2. HTMLParser内部で配列(self.array)に自身のスレッドの番号(self.n)を格納(22行目)
3. 配列に格納したスレッドの番号を再度自身のスレッドの番号と比較(18行目) ←スレッドセーフなら同じになるはず
とう処理を行っています。このコードを実行すると自分の環境では100%
「false! array -> [1] in thread 2」または「false! array -> [2] in thread 1」
と出力され3の結果が同じならず、別スレッドのデータが配列に混ざっているように見受けられます…
これはHTMLParserがスレッドセーフじゃないということなんだろうか?
こうなるのは自分の環境だけなんでしょうか?
「python HTMLParser thread safe」でググってみたのだけど、
同じ状況の報告がなかったので不安なのですがどうなのだろう。
上のコードではコメントにしてるんですが、HTMLParserを使ってるクラスTestParser内部の
配列arrayを初期化している部分(8行目)を__init__の内部に入れる(13行目)となぜか
別スレッドのデータが混ざならくなりました。
配列を辞書データに変えても、初期化する部分が__init__の外にあると同様にデータが混ざりました。
配列や辞書データでなくただの変数ならデータは混ざりませんでした。
python-2.5.2を使っています。
- 979 :デフォルトの名無しさん:2011/01/12(水) 02:14:08
- >>978
それってスレッド関係あるん?
http://codepad.org/npqxD72C
- 980 :978:2011/01/12(水) 02:20:31
- >>979
添付いただいたコード実行してみました。同じ結果…スレッド関係ないですね…ありがとう。
__init__の外で array = [] とするのと、__init__の中で self.array = [] と書くのは同じ意味と思っていたのだけど、違う操作なのかな?
__init__の外で初期化すると別のインスタンス間でも値が共有されうのかな?
クラスってこういうものなんでしょうか?
- 981 :デフォルトの名無しさん:2011/01/12(水) 02:21:48
- >>978
HTMLParserはそもそもスレッドセーフじゃないけど、スレッドごとに別々の HTMLParser のインスタンスを
扱っていれば問題は起こらない。
まずは8行目と13行目の違い(クラス属性とインスタンス属性の違い)を理解しないといけない。
8行目だと、 array ってのは TestParser のクラス属性になる。TestParserのインスタンスが
複数あった場合、 self.array.append などでアクセスしている self.array の実態は TestParser.array
で、全インスタンスで共通になってしまう。
13行目だと、そのインスタンスの属性として self.array を追加している。これは、インスタンスごとに
独立している。
a = TestParser()
b = TestParser()
a.array is b.array # 8行目ならTrue、13行目ならFalse
a.array is TestParser.array # 8行目ならTrue、13行目なら、TestParserにarrayって属性が無いのでエラー
- 982 :979:2011/01/12(水) 02:23:55
- >>978
もし俺が話分かってないだけだったら、申し訳ないんだけど。
スレッドとか関係なしに、単に、mutableなクラス変数が変更されてるだけのように見えるんだ。
> 「false! array -> [1] in thread 2」または「false! array -> [2] in thread 1」
が表示されるのは、thread 1のhtml.feed()かthread 2のhtml.feed()のどちらが先に実行されたかって話で、
例えば
thread1のhandle_starttag→thread2のhandle_starttag→thread1のhandle_data→thread2のhandle_data
の順で実行されたとしたら(スレッドセーフじゃないって、そういう意味?)
むしろ何も表示されないんじゃないかなぁ。
- 983 :979:2011/01/12(水) 02:25:49
- おっと。入れ替わり失礼。>>981のいうとおり。
- 984 :デフォルトの名無しさん:2011/01/12(水) 02:29:55
- 2.5ってことはGAE絡みかな?
どうせHTMLParserだって正規表現使ってるんだから
HTMLを処理するなら自分で書いたほうが早いし
その方が堅牢
- 985 :978:2011/01/12(水) 02:47:07
- >>981-983
threadingとHTMLParserの共用が悪いのかな?でも標準のモジュールだしな??とか考えてたんですが
もっと基本的なことでした。インスタンスごとに独立してない、クラス属性 なるものがあったんですね…
どんな場合に使うものなんだろ…とにかく解決して勉強になりました。理解できたと思います。
聞いてみて良かった。ありがとうございました。
>>984
使ってるLinuxのディストリビューションの安定版が配布してるpythonバイナリーが2.5なんです。
いつかパーサーを自分で書けるぐらいになりたーい…
- 986 :地味沢地味男17歳:2011/01/12(水) 19:56:33
- Pythonプログラマになりたい高校生です。
僕にPythonのプの字も分からない人にお勧めの参考書籍を教えてください。
- 987 :デフォルトの名無しさん:2011/01/12(水) 19:58:26
- >>985
debianかな?
lennyは2.5だね
ちょっと前までは2.4だったし…
- 988 :デフォルトの名無しさん:2011/01/12(水) 20:48:05
- >>986
エキスパートPython
- 989 :デフォルトの名無しさん:2011/01/12(水) 20:58:50
- >>986
どうして素直に「みんなのPython 改訂版」柴田淳著 ソフトバンク 定価本体2800円を
教えてあげないのかな?
- 990 :デフォルトの名無しさん:2011/01/12(水) 21:09:50
- 自信を持って勧められるほどの本が入門レベルにないからだろう
- 991 :デフォルトの名無しさん:2011/01/12(水) 21:12:51
- 確かに。
初めてのPythonも今ひとつだし
- 992 :デフォルトの名無しさん:2011/01/12(水) 21:34:07
- >>986
Forestだな
- 993 :デフォルトの名無しさん:2011/01/12(水) 21:37:19
- 他の言語の経験はあるのかな?
- 994 :デフォルトの名無しさん:2011/01/12(水) 21:48:11
- >>989
それゴミだから
- 995 :デフォルトの名無しさん:2011/01/12(水) 21:52:44
- くだすれPython(超初心者用) その10
http://hibari.2ch.net/test/read.cgi/tech/1294836668/
- 996 :デフォルトの名無しさん:2011/01/12(水) 21:55:13
- >>994
はげどう
>>995
乙〜
- 997 :デフォルトの名無しさん:2011/01/12(水) 22:01:10
- >>995
乙py
- 998 :デフォルトの名無しさん:2011/01/12(水) 22:02:57
- >>994
自演好きの著者だから一番に薦めるのは同意しないけど
ゴミは言いすぎ
>>991
「初めてのPython」はUNICODEっていうか日本語の扱い方についての記述が古いよね
- 999 :デフォルトの名無しさん:2011/01/12(水) 22:09:25
- >>998
古いっつーか間違ってるんじゃないかとさえ思える
- 1000 :デフォルトの名無しさん:2011/01/12(水) 22:10:41
- >>986
今ならオンラインでチュートリアルを検索すれば大体間に合う
- 1001 :1001:Over 1000 Thread
- このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
248 KB
★スマホ版★
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 05.05 2022/08/31 Walang Kapalit ★
FOX ★