※ 荒し・キチガイ・自分で努力しない人等は放置で
5 :
デフォルトの名無しさん :2010/11/07(日) 16:39:44
錦蛇は嫌い!
ぱーいそーん
むーずかしーいいいいい
>>1 おつ
クラスのメンバ変数で日本語名使ったらLexical errorってのが出るんですが、命名規則に日本語不可ってありましたか? 1行目にフィールド名のあるCSVを読み込むクラスなのでできれば対象性を維持したいのですが、オプションスイッチかなんかで対処できませんか?
文字コードは?
良いか悪いかはともかくPython3なら使えたような
SJISならutf-8に変換汁
>>9 utf-8です
>>10 バージョンは2.5系です GAE関連なので・・・
utf-8です
2.5系はダメっぽいですね・・・
>できれば対象性を維持したいのですが row.名前 row['名前'] の違いしかないんだったら後者で良いと思う
>>13 2.5はやはり英数字と_だけってことですね
>>14 GAEなのでフィールドはdb.Modelを継承したクラスのメンバ変数として宣言しないといけないんです・・・
最初に書かなくて申し訳ありません
こういうときはカッコ悪くてもフィールド名をローマ字表記にするものですよね?
個人的にとても嫌ですw
ありがとうございました
どうせ自動化するんだろうから メンバ変数名自体は人間が読めなくてもいいよね base64 みたいに 日本語(8bit) <-> 英数字と_だけ のエンコードしてみるとかはどう? (base64 だと +/ が引っかかるので)
>>15 __getitem__を実装して好きなメンバにマッピングすればいいじゃん
>>16 なるほど!参考になりました
>>17 調べてみます
この場合のキーは日本語でOKってことですね
なるほど
変数の入れ物としてクラスを class Foo: pass Foo.foo = 1 Foo.bar = 2 のように使うという方法があるけど、 関数の入れ物を作りたいときってどうすればいい? class Foo: pass Foo.foo = staticmethod(f) Foo.bar = staticmethod(g) っていちいちするのも面倒だし。
>>19 自前のFoo.__setattr__()を定義してはいけないのか?
>>19 その例だけだとクラスにする意味がない。
class Foo: pass
foo = Foo()
foo.foo = 1
foo.bar = f
def foo(): pass
foo.foo = 1
とかでもできるんだな。
けど使い方としてとてもまともとは思えない…
>>20 いけなくはないけど面倒
>>21 複数作りたいならそうだけど、1個でいい場合もそうするメリットってある?
条件後出しすんなボケ
__setattr__ すら書くの面倒なんだろう?
>>22 >複数作りたいならそうだけど、1個でいい場合もそうするメリットってある?
クラスならFoo.bar = staticmethod(f) としなければいけないけど
オブジェクトなら foo.bar = f で済む。
もとの
>>19 がそういう質問だったから。
【質問】 Beautiful Soupを使ってhtmlコンテンツのスクレイピングをしようと思っています。contents[n]に<div class=”info01”>製作年月日</div>のようなタグがあった時、そのnを求める方法はありますか?
あります
31 :
29 :2010/11/12(金) 13:04:38
>30 ぜひ方法を教えて下さい。
つかれた時の気分転換はなんですか。
みんなのPythonを今日一日で読破するぜ!
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>
lxmlは使ってないからよく知らないけど ElementTree互換だったはずだから root.get('h') # '896' root.find('stack/layer').get('mypaint_strokemap') # 'data/layer000_strokemap.dat' とかできるんじゃまいか
属性のこと? attribかgetを使う。
ありがとうございます!!! できました! しかし stack/layerのmypaint_strokemapっていうのが2個あって 別々に""の中身をとりだすにはどうしたらよいのでしょうか print root[1].find('stack/layer').get('mypaint_strokemap') でも print root.findall('stack/layer').get('mypaint_strokemap') とやってみましたが エラーでしたOTL >38 ありがとう。コツコツやってはいるんだけどね・・・。
>>41 うわあできたすごい!!
ありがとうございます!!
Jython 入れてみた spiroserver/spiroclient のデモを実行してみた spiroserver の止めかた誰か教えて orz
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とか?
48 :
45 :2010/11/13(土) 23:22:44
プロセスが終了してしまうなら対話モードなら?と思い実験してみました. 「jython スクリプト.py」 ではなく, if __name__=='__main__' を消してインタラクティブシェルからインポートしてみると ウィンドウは表示されたままになりました やはりプロセスが終了することが原因のようです
どうみても Java スレ池って言われる内容だからなぁ
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') うまくいきません><
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() これならちゃんと動くんですけど><
PythonMagickの命令方法を教えて下さい。 一応Pythonでバッチファイル作って普通のImageMagikcの 命令を書き込んでいるんですが どうせならPythonで全部やってみたいです。
リストに値がうまく入らないのですがどうしたらいいですか? 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] だとうまくいくけど 最初に要素がいくつあるかなんて 分かんないしどうすればいいですか・・・
>>54 h = [] は要素0だぞ
h[0]に10を入れたいなら
h.append(10)
Cで配列のバイト確保して直接代入するの思い出した
59 :
58 :2010/11/16(火) 00:40:18
python2.6 py2.exeは0.69です。
すみません、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では上手く動きませんでした。
includesで_elementpathを使うぞとpy2exeにやさしく教えてあげる
62 :
デフォルトの名無しさん :2010/11/16(火) 01:34:27
>61 具体的には何をどうすればいいですか???
Pythonのスレは親切な良スレだな。
python で firebird の DB にアクセスするプログラムを書いてみているのですが DB がネットワークドライブ上にあるとうまくいかないみたいです ローカルドライブにあるファイルなら正常に動作することが出来ました ネットワークドライブ上の DB でも使えているかたはいらっしゃいますか? (OS は windows でネットワークドライブにはドライブ名を割り当てて接続しています)
>>67 まず後者のチュートリアルを読んでみる
そこそこ理解できるようならそのまま読み続ければおk
わけわかんねえよ氏ねよってなるなら前者を買って読む
70 :
67 :2010/11/16(火) 13:28:24
>>69 ありがとうございます。
後者の数ページを読んでみたのですが、突発的にいろいろな用語が出てきて
このまま読み切ってもいいものか心配でした。
書籍の方を購入してみます。
>>70 その程度ならもう少し読みつづけてから判断したほうがいいよ
チュートリアルの1,2
途中で書き込んでしまってごめん チュートリアルの1,2章は軽く読み流してもOK それ以降の章を読んでいて何が何やらまったくわからないってレベルであれば 本を買った方がいい
あの・・・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になり駄目でした。
Pythonで実効速度を計りたいのですが CPU使用率に依存されずに計れる方法ありますか? 例えば、1秒間のクロック数を調節(固定)する方法など それと、実効速度を早くしようと、一部numpyを使ってみたのですが、数倍遅くなってしまいました numpyを使用すると高速になる場合ってどのような場合ですか? 配列次元数が数百次元とかの場合とかですかね… 現在は、n個のオブジェクトが、それぞれn*nのリストを使っています 全行、それぞれ異なる列の値を+=や*=などで更新するのと、全体の値を、ある最大値以上にならないように、=min(現在値,最大値)で更新してます nは、50〜200程度で、今は扱ってませんが、数千まで利用出来る状態にして起きたいです numpyの速度改善を確かめるため、一部を変更しました 関数の引数であるリストを配列に変更し、処理し、最後にリストに変更して返す という処理にしたので、リストを配列にする処理に時間がかかったため実効時間が遅くなり、一部ではなく全部をnumpyで配列にすれば早くなりますか? プログラムを全部書き換えるのは時間がかかるためまだ試してません
>>75 携帯で.gifは見れないので、家に帰れた時に確認します
見なくていいと思うよ
グロ中尉
これは素晴らしい
>>61 できました!!!
ありがとうございます!!
>>80 うひゃえあああああ!!!
ありがとうございます!!!!1
pythonでうまく出来ない部分をバッチファイルや外部のexeファイルで行いたいです。 肝心のpythonでバッチファイルやexeファイルを起動させる方法を教えて下さい。 あんまり基本すぎてPython入門サイトにも載ってないです。
os.system() もっと細かいことがしたければsubprocessモジュール
もう・・・本当にしょうもない質問で悪いんだけど 文字列に「 ' 」と「 " 」を入力するにはどうしたらいい??
'\'' "\""
'"' "'"
>88、>89 ありがとうございます!
PythonってC言語から移行するなら他のLL言語より覚えやすいかな? そんなのしらねぇよって思うかも知れませんが。。
なんで移行すんの。w c知ってんならcでやれよ。w BASICからの移行なら判るけどさ。w
覚えやすい
>>91 そんなのしらねぇのでPerl, Python, Rubyの処理系を落としてきて
実際に触って自分に合ってそうなのを使えばおk
実際のソースを見比べて判別がつくならそれでもいい
触って試す際に一緒に参照すべきチュートリアルもぐぐれば見つかるし
各言語のスレのテンプレにも載ってるだろう
ありがとう、色々比べて見てから決めたいと思います。
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()
easy_installとnoseというものを使ってみた easy_install便利すぎる。なんでもっとはやく教えてくれなかったんだ
>>97 もともと何がやりたいのかよくわからんな
フォルダの場所を編集っていうのは、一部のフォルダを無視したいってこと?
zipファイルに絶対パスでなく相対パスで各メンバ(ファイル)を収納したいとか そういうことじゃまいか もしそうなら使えそうなのは os.chdir(path) か os.relpath(path, start) あたりか 引数は適当に調整してね
プログラミング言語間の文法比較はお腹いっぱいなので、 今後は、ライブラリの充実度を比較する記事をよろしくたのむ。
Windows用のエディタを探しています。 Pythonに対応して、utf8が扱え、HTMLの編集も便利な、初心者向けのエディタは何がいいでしょうか。 ベクターや窓の杜で調べましたが、Pythonに対応しているのがなかなかなくて、JmEditorというのが対応してるっぽいくらい。 なんかお勧めあれば教えてください。
サクラエディタ。デフォルトではないけどググれば設定の仕方すぐ分かる
Mery デフォルトでpython色分け対応
初心者向けじゃないかもしれないが、Notepad++とか
タブを押してスペースが4つ入るエディタならなんでもいいよ
Notepad++, EmEditor, サクラエディタ Emacs, Meadow, xyzzy Eclipse+PyDev, NetBeans, PyScripter
109 :
97 :2010/11/18(木) 23:21:04
>>99-
>>101 エスパーして頂いてありがとうございます!!
そうです、相対パスです!助かりました!!
>>104-108 アドバイスありがとうございます。
GinnieというエディタがPython標準対応し、見た目もきれいそうなので、これを使おうかと思います。
ttp://ginnie.kntware.net/free/ おすすめいただいたエディタを触ってみた感想です。
サクラエディタ:Python用の設定を自分でするのがけっこう面倒。
Mery: Python対応のメモ帳みたい。機能がシンプルすぎる。
PyScripter: 文法エラーの表示などPythonだけならすてき。ただHTMLなど他のファイルの編集が弱い。
Emacs、Meadow、xyzzy: 初心者向けエディタを探しているので、今回はパス
Ecipse+PyDev、NetBeans: Javaのインストールが必要なのと、メモリを食い過ぎるのでパス
Notepadd++、EmEditor:未使用
ありがとうございました。
あれだけで結構面倒ならもう何も言うまい
趣味で使う分にはemEditorやサクラ、テパエディターもJmEditorも全部有用だったけどなあ。 でかいもん作るのはそもそもちっぽけなエディターに任せないし、メモ帳+αの機能があれば十分。
geditかvi
結論が付いたんだからもう良いじゃないかw
Notepadd++って良いネーミングセンスしてるな
じゃあ次世代PythonはPython++(ぱいそんぷらぷら)で決まりか
add++
あれ、特に理由もなくサクラエディタ使ってたけど Python対応の「対応」ってなに? なんかいい事あるの???
eclipse+pydevみたいな予約語とかメソッド名の入力補完は便利だよね 補完候補から選ぶよりタイプした方早いけど、名前忘れちゃった時とかね 仕事で使う人はどれなのか知らんけど
120 :
デフォルトの名無しさん :2010/11/19(金) 09:14:58
Python対応ってのは言語のハイライトが初期状態で出来るって意味だろう IDEとしては入力補完や構文の整形とか
>>102 めんどくせーから直感だけど。
ライブラリの充実度は
perl > python > ruby > php
ただし、web関連に限った場合は
php > perl > ruby > python
perl > php> ruby> python> curl> lua
rubyじゃなくてrailsな
またそうやって古参Rubyistみたいなことを
phpってあれだけ普及しててライブラリすくないのか?
CPANは数は多いけど、大半が無かったら簡単に自作できるようなスクリプトで、 C言語で書かれた有名ライブラリのバインディングが多いのはPythonという印象がある。 Linuxアプリで最近すげー使われてる影響で。
linuxじゃperl後継としてのpythonだからな まあサーバだとperlだけど
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.*")みたいなことが書けるといいのですが。。。
よろしくお願いいたします。
2つ以下という縛りがなければこんなふうには書けるみたい # pkill.py import sys, subprocess subprocess.call('taskkill /fi "imagename eq %s" % sys.argv[1]) c:\> pkill.py thunderbird*
>>129 ctypesでpsapi叩いても書けるはずだが、まあ面倒だろう
どうしてもPythonでやりたいのなら、IronPythonが楽そう
for ps in System.Diagnostics.Process.GetProcesses():
if 'thunderbird' in ps.MainModule.ModuleName.lower():
ps.Kill()
こんな感じじゃないの、試してないから怪しいけど
>>130-131 ありがとうございます。
ご教示いただいた内容を次のThunderbirdフリーズ時に試してみます。
(まあ本当はThunderbirdが何故うまく動かないのかについて考える方が大事なんですけどね。)
133 :
132 :2010/11/20(土) 00:55:07
>>130 os.system("c:\> pkill.py thunderbird*")
ってやれば全部Python上で行けたりしませんかね。
それも今度チャンスがあったら試してみます。
それならPythonは要らないような。テキストファイルに taskkill /fi "imagename eq thunderbird*" って書いて適当な名前で保存してダブルクリックで足りそう
訂正。適当な名前じゃまずいね 拡張子は .bat で
>>137 それは3つ以上のthunderbirdという言葉が含まれるプログラムが存在している状況は
私が今までは見たことがない状況(=安易に強制プロセス終了して行けないかも知れない)
と思ったからです。
理由を書かずすみません。
>>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という機能が入っていないことと何か関係があるのかもしれませんが、
原因が分かりません。。。
tasklist も入ってないんだね
>>139 pywin32 が入ってれば tasklist が無くても何とかなるけど,どうかな?
pywin32-214を持ってきて setup.py install としみてましたがまたもや何かが見つからないだとかいって インストールがエラーです。 文書に As for Python itself, these extensions require MSVC7 for Python 2.4 and later, otherwise MSVC6. って書いてありますが、まさかMSVCの6や7まで入れなきゃならないなんてことが・・・。。。
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
とかできるかもだけど試せないのでおやすみなさい
windowsだとこんなに面倒なのか、と思ったが、Unixでもやり方わかんねーやorz Unixだとkillはos.killが使えるとして、プロセス名からpid得るにはどうすんだ? os.system('ps aux')とか、そういう系のなしで。 os.listdir('/proc')でpid全部手に入れて、/proc/pid/cmdline開くって、どこまで汎用性あるんだろ。
killall
>>147 os.system('killall %s' %proc)ですねわかります。
aptana studio 2 と pydev をインストールした。 pythonのソースコードを編集するのが楽になった。 使ってみた感想だけど、一般的なエディタと比べて、 ・インデントが賢い(Pythonの文法を解析したうえでインデントしてくれるため) ・入力の補完をしてくれる(通常のエディタでは難しい) ・プロジェクト管理やバージョン管理などの高度な機能がある という利点があることがわかった。 ただ、文法エラーを表示してくれないのが残念。 Eclipse+Javaだとリアルタイムで文法をチェックし、構文エラーがあれば即座に画面に表示されるけど aptana+pydevだとそこまではしてくれないみたい。 だれかaptanaとpydevを使っている人はほかにいませんか。
IDEとTextEditorの違いがわかってない方ですか?
そうですが何か問題でも?
154 :
129 :2010/11/20(土) 13:08:14
>>144-145 ありがとうございます。
インストーラーを持ってきた上で
ご教示いただいたスクリプトを起動した所、見事希望どおりの動作になりました。
大変お世話になり、ありがとうございました。
>>122 >ただし、web関連に限った場合は
>php > perl > ruby > python
それはない
php > python >>> perl > ruby
>>155 cgi.fieldStorage()とか使いにくいんだけど。
>>156 FieldStorageも必要十分な機能を持っていると思うが、cgiモジュールはアプリケーション
フレームワークじゃなくてプリミティブな機能を提供するだけのライブラリだからな。
リクエストを抽象化するライブラリには例えばWebObがあるし、Djangoとかフレームワークは
それぞれ何か抽象化機構を持っている。
で、具体的に何が使いにくいのん?
そして標準ライブラリの使いやすさが非標準まで含めたライブラリの充実度と同どう関係があるの?
>>156 使わなきゃ良い
WebOb.py オヌヌメ
まあ沢山あればいいというもんでもない罠 逆に標準のがしっかりしてるから他のが無いといえるの鴨試練
python2.7用のmatplotlibってまだ公開されてないですか? Matplotlib 1.0で動くみたいなことが書いてあったんですが2.6までしか対応してないですよね?
ソースから入れれば動く
落ちてません
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")
>>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)だと起動と同時に何も無い画像だけが保存されてしまいます・・・
そこはたしかTkinterのはまりどころ command=lambda: self.save_image(self, window) か command=lambda: self.save_image(window) とかしたらどうなるか試してみて
すいません、自己解決しました def save_image(self, window):を def save_image(self):にしたら保存できました お騒がせすいません。
>>171 うわ、リロード忘れました
アドバイスありがとうございます!!
すいません・・・ 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")と書いてみましたが駄目でした・・・。
image.save("outfile.jpg", 'jpg')
>>157 >そして標準ライブラリの使いやすさが非標準まで含めたライブラリの充実度と同どう関係があるの?
標準ライブラリの使いにくさを指摘されて逆切れ。
まさにPython信者だな。
だから?
>>177 いや、使いにくいって書いて煽ったの俺だけどさ。
実際、関係ないよ。
>>156 > cgi.fieldStorage()とか使いにくいんだけど。
という指摘に対して
>>157 > FieldStorageも必要十分な機能を持っていると思うが、cgiモジュールはアプリケーション
> フレームワークじゃなくてプリミティブな機能を提供するだけのライブラリだからな。
という、わけわかめな返答を返すPython信者。
機能が使いにくいことと、機能がプリミティブなことは別の話なのに。
ここで問うべきは「どう使いにくいか?どう改善すればいいか?」のはずなのに。
それができずに、問題点を指摘しただけの相手に逆切れして怖がらせるのは、
コミュニケーション能力に欠けるアスペによく見られる傾向。
あー怖い怖い。
>コミュニケーション能力に欠けるアスペによく見られる傾向。 くだすれでPython信者がどうこう言い出すおまいが言えることじゃなかろ 本スレでおやり
>>181 >ここで問うべきは「どう使いにくいか?どう改善すればいいか?」のはずなのに。
>それができずに、問題点を指摘しただけの相手に逆切れして怖がらせるのは、
>コミュニケーション能力に欠けるアスペによく見られる傾向。
higayasoのことですねわかります
>>180 ふげげー!!ありがとうございます。
Tkinter以外で書き直しですね・・・ヽ(^o^)丿
もう Tkinter 標準装備しなくてもいいんじゃないかと思う今日この頃
タートルグラフィックスで遊べなくなるじゃまいか!!ヽ(^o^)丿
あれ・・・pygtkで window = Tkinter.Tk() self.canvas = Tkinter.Canvas(window, bg = "white", width = 500, height = 500) するにはどうしたらいいですかー?? もうpygtkわからんわ!!
どうせならWxPythonかPyQtにしましょうね
>189 うう、だってmypaintがpygtkでやってるから一応合わせた方がいいのかと思って・・・。
とりあえずWxPythonでやってみるから window = Tkinter.Tk() self.canvas = Tkinter.Canvas(window, bg = "white", width = 500, height = 500) wxpythonではどう書くのですか??
wxpythonをインストールしたんだけど demo.pyってどこにあるの??
あんまりアレな質問してるとこれまで答えてくれてた人が答えてくれなくなるぞ
知ってるけど相手すんの面倒っぽいから無視することにした
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 のなかにありました。 どうもすいませんでした・・・。
だめだ・・・もう・・・本当にくだらない質問で悪いんですが 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が出来ていました・・・ 一体これはなんでしょうか???
馬鹿には無理
「help」って知ってる? import image help(image) で得られる知識は活用しよう #ついでに「モジュールオブジェクト.__file__」とか
それウィルスだよ いますぐOS再インストールしないと
>>199 エラーメッセージでさえ読む気がないのにhelpなんて理解できるわけないじゃん
>>198 の通り
最近は別言語信者がPythonユーザーを騙って 初心者叩きしてるようだな
>>197 モジュールとimport文について公式チュートリアルや本をよく読む
それでもわからなければ pyhon pyc か python バイトコンパイル でぐぐる
それでもまだわからなければ質問どうぞ
WindowsでPythonを使っている人に質問です。 WindowsにPythonをインストールすると、%PATH%も設定されるのでしょうか。 つまり、Pythonをインストールすれば、コマンドラインから「python」と打つだけで実行できますか。 当方、Windowsを持ってないので確認できません。 どなたか教えて下さい。
自分でPATHを通さないと無理です
%PATH%も設定される
>>204 当方XPの環境では自分でPATH通さないとダメだった
つーかインストール時にPATH通してくれていいよな 手軽さが取り柄のスクリプト言語なんだし
>>208 自動的に通るはず
(自分も自動で通ったと記憶している)
ただ環境によっては通らなかったりするということだろう
>>203 うひょーヒントありがとうございます!!!!
すごいたすかりました!!
この鬱陶しい感じ
xp(32)と7(64)で25,26,27,31を一通り入れたけど 全部パスは自分で通したと思うんだがなぁ
再起動しろって言われて無視したら通らない
複数バージョンインスコするときに自動でPATHなんて通されたらムカついてしょうがない
そんな特別な例を尊重したら終わりやで
眠たい疲れた。
Pyhtonmagickの取説や解説みたいなのないかな? 検索してるけど英語のも見つからない・・・。
ImageMagickの使い方がある程度わかってないと無理だろう
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")
もしPythonMagickの中にconvertが入ってるのなら import PythonMagickしただけでconvertが使えるようになるわけがない
まずはPythonの入門書を読んだほうが…
って説明がよくなかったので補足
$ 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 そうなんだけどねえ
なぬ!? いまいろいろやってるんだけど convertでも convert -geometry 704x576! 0.png 0.png は import PythonMagick img = PythonMagick.Image("0.png") img.scale('704x576') img.write("0.png") でいけるんだ。 なにがなんやら分からないよ・・・
魔法は知らないけど 220がダメで224が通るのは当たり前だと思う img=convert("1.png","2.png","test.psd) と img.scale('704x576') の違いは?
>>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')
でやったら出来た
こういう違いです。
pythonの文法的にだ 言わせんなはずかしい
よく知らんけどPythonMagickのドキュメント読め
死ね
すこし眺めた限りではPythonMagickには複数ファイルのサポートはないみたい
>>231 ありがとうございます。
全てpythonで再現されている訳では無いんですね。
クラスの中の変数をグローバルに宣言すればいいのか__init__の中で宣言すればいいのか分からない…
>>233 グローバルはやる意味ない。クラス変数ならありだけど。
特に理由がないなら、__init__で宣言する。
・同じクラスのインスタンス全部で変数を共有したいとき
・どうせ変更されることがないから、全部のインスタンスに同じものを持たせるのも無駄だと思ったとき
は、クラス変数を使う
>・どうせ変更されることがないから、全部のインスタンスに同じものを持たせるのも無駄だと思ったとき 全部のインスタンスに同じものを持たせるんじゃないの?
>>236 ごめんよ。紛らわしい書き方しちゃったね。
同じものをそれぞれのインスタンスのために何度も作るのが無駄、と書いた方がよかったかな。
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
ごめん、暴発した。。。
a.hoge("hoge")\ # This line is invalid. .hoge("piyo")# This comment is valid. みたいな感じでメソッドチェーンを改行しつつ、同時にコメントを付ける方法はあるでしょうか
(a.hoge("hoge") # comment .hoge("piyo"))
\ の後ろのコメントは許してくれてもいいのにとは思う
>>242 それが可能か前スレか本スレあたりで聞いた気がする
いつか忘れたけどだいぶ前に同じ質問をしたことがある
というかメソッドチェーンの途中にコメントって分かりにくくね?
長くなると改行したくなる ↓ 改行すると行毎にコメントを書きたくなる ↓ \ の後ろにコメントを書くとエラーがでる ↓ いまここ
長くて改行するぐらいなら、素直に文分けて一時変数に代入すればよくね
一時変数(の値を次々と書き換えていくの)が嫌だから メソッドチェーンするんだろう
自分も
>>247 に同意だけど、
それでもメソッドチェーン&コメントが必要なら
>>241 でいいんじゃないの?
基本的に括弧を使った暗黙の行継続の方が推奨されてるわけだし
GAEのeclipseプラグイン見て気づいたんだが、eclipse3.6が最新バージョンなのか 3.5使ってるんだけど、pydevでpythonしか使わない場合は機能面では変わらない? 軽かったりするのかな
軽いね
253 :
251 :2010/11/26(金) 02:10:50
3.6にしてみた。3.5が色んな物入れてゴテゴテしたから今度はシンプルにしてみたけど良い感じ
Sat, 27 Nov 2010 11:12:38 +0900 のような形式の日時をunix timeに変換するにはどうしたらよいでしょう? 正規表現でやって行くしかないのでしょうか?
>>> 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 とかの設定が必要っぽいのでパス
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で回したい時はどうすればいいのでしょうか??
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で回したい時はどうすればいいのでしょうか??
大事なことなので二度言いました
どんな風にバグるのかは一切書く気がないと
260 :
257 :2010/11/27(土) 17:11:00
>259 すっすいません whileでshape.pos = (X[i], Y[i])にすると 画面に画像が表示されず ウィンドウのバツマークもウィンドウに用意してあるEXITもクリックしても効かなくなり プログラムが走りっぱなしになります
X Y はどこにあるの
>>260 ループの中とかいろんなところにprintを入れてどこで止まっているか調べる
==、!=かis、is notかどっちを使えば良いのか分からない
なにがすっすいませんだよ。 人格破綻者か
あほは放置で
そうだな
267 :
257 :2010/11/28(日) 00:52:54
ファビョってすいません。 なんとかprint入れまくって動くようになりました。 ありがとうございます!!
>>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を使う。
ホームページ作ろうと思ったらPythonだけで出来るんでしょうか? HTML+Pythonってことなんでしょうか。 アホな質問とは重々わかっているのですがよろしくお願いします。
>>268 それ、おかしくないか
if x is not None と if x では意味が異なる
if [] is not None は True だけど if [] は False
>>269 PythonスクリプトだけでWebページを作成する事は可能だと思うがhtmlの知識は必要
ホームページならHTMLだけでいいよ。
同値性と同一性について。簡単に書くと。 「同じ」という言葉には、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さんが乗ってるバスは、完全に関係がある。
本スレでやれ
PythonでCGIうんぬんと言うことでちょっと混乱してました。 とりあえずHTMLの勉強をしようと思います。 回答ありがとうございました。
ぎゃー、長くなったから消そうと思ったら間違って書いちゃった…
>>270 他の値には、False も含まれることに注意。
って書いてあるのが、それなんじゃない?
分かりにくい日本語だとは思うが。
>>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 で 書かないよう注意すること、という意味
完全に誤訳っぽいね。
これはちょっとひどいね
python.jp は糞
"if x is not None"という意味をもたせる場合は"if x"と書かないように注意?
if not x is None: との違いがわからない
if x != None: なら問題ない
>>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と同じだ。
>>285 >>> class Foo(object):
... def __ne__(self, other): return False
...
>>> f = Foo()
>>> f != None, f is not None
(False, True)
is notは構文糖だろ not isと違う動作されたらたまらんし
Pythonで引数の型の判断ってどうやってるんでしょうか? Cだと関数のプロトタイプ宣言とかで明示的に引数の型をコンパイラに示していることが分かるのですが。
上の質問は取り消します。 スレ汚しすみません
isinstance
type(x): xの型を返す isinstance(x, type): xはtype型かをBoolで返す
isinstanceなんてのがあるんですね。 回答どうもありがとう。
>>290 構文糖云々じゃなくて(not x) is Noneと勘違いしてたんだろ
と馬鹿が申しております
>>179 で、実際に何と比較してどんな点が使いにくかったの?
>>298 そういう風に書くだけで自分が賢くなったつもりになる人って最近おおいの?
はい
みんなのPythonって分かりやすいけどサンプルコード少ないし機能の羅列部分多くね? 個人的な印象なんだけど
VB C C++ C# javascript python と習ってきたけどググルにまさる良書はなかった C++までは本読んでたけど、オブジェクト指向の指南書が最後かなあ
ググルにまさる良書はなかった(キリッ
電子化されて検索できる良質のコンテンツが ネット上で無料にあるってことがいいことなのであって、 ググルさんマジ天使っていうことではないよな
おー、突っ込むねぇ。w
最初は辞書だとかのメソッド丸暗記しなくても良いよね・・・使っていく内に覚えるだろうし。なんか覚えたか気になってなかなか進めなくなってきた
なぜ丸暗記する必要があるの? 持ち込み禁止のテストの勉強してるわけでもないのに
>>> 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
>>308-309 ありがとうございます。
取りあえず紹介されたメソッド使ってなんか作って走らせてみます。
やっぱり読むだけだとダメだと思うので
312 :
デフォルトの名無しさん :2010/12/01(水) 04:06:20
cx_Oracle で接続しています。 SELECT * FROM HOGE として、で取得したカーソルの情報から 列名を指定して値を取り出すことはどうすればよいでしょうか? バージョンはは3.1.2です。
314 :
312 :2010/12/01(水) 04:35:14
>>313 有難うございます。
英語力には自身がありませんが、
教えていただいたURLには結論的な事は記述されていないような気がするのですが。
オラクルは知らないけど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みたいにサクッとできるのかと思いましたが、
意外とめんどくさいんですね。
少しビックリです。
cx_ORACLEだからじゃね?
318 :
312 :2010/12/01(水) 07:50:07
>>317 cx_ORACLEが一番ベタじゃないのか?
何か案があるのなら追加で指南よろしくお願いします。
Oracle使うなというのは無しで。
今の流行りってSQLAlchemyじゃないの?
本って何読んでPython覚えた?
はじぱい
Dive Into Python wxPython in Action The Definitive Guide to Django Python Network Programming Twisted Network Programming Essentials
みんぱい→python スタートブック→はじぱい みんぱいの時に仕事で使うプログラムを作成 実際、なんでもいいから作ってみる方が飲み込めるかも
本なんていらん
ググルを超える良書無し
あれ、ドラッグ&ドロップをつかってファイル名取得するのはどうやるんだったけ? バッチファイル経由以外の方法がわからん・・・
sys.argvでとれないなら何をドラッグして何にドロップするのか 環境も含めて書いた方がいいよ
プログラム初めてで今日Python始めたんだけど、もしかしてプログラミングって ある程度英語できないとキツイ? 中学生以下の英語力じゃ厳しいかしら……
アルファベットの読み書きくらいは不自由ないようにしておかないとな
そんなこたあない。 ただPythonは日本じゃあんまり流行ってないから情報は少ない
Pythonのエンコード周りが難しい
333 :
デフォルトの名無しさん :2010/12/05(日) 06:26:18
3.x使えば問題ない
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) 助けてください ><
これは質問なのかそれとも誰かさんに対するレスなのか 回避策としては __file__ がユニコード文字列でなくバイト文字列っぽいので __file__.decode('cp932') とかしてやる
cp932じゃベタだからsys.getfilesystemencoding()でも使ったほうがいいんじゃね 小手先の対策でしかないけど(3.xなら勿論そういう問題はない) ディレクトリ名がunicodeの場合(♥とか含んでる)はどうかなと 考えてみたけど sys.argvがバイト列なので、そもそも直接スクリプトとして実行できない sys.pathにunicodeディレクトリ名を追加することはできるが、 そこからモジュールを探してimportすることもできないみたいだな
#!/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でも「そこをカレントにすれば」実行はできるな カレントでしか実行できないスクリプトってのは良くない書き方だから あまり想定してなかった
例外処理の中で print os.path.join(os.path.dirname(__file__), u'繝・せ繝・txt') って文字化けしてしまうけど これはどうして? sys.stdout.encofing に encode してくれないのはなぜ?
インタプリタがバイト列として持ってるソーステキストの一部を引用して そのまま例外に流して、それをそのままprintしてるから、化けるんじゃないの ソースコードにわざわざエンコード指定して、unicodeリテラルもちゃんと 解釈できてるのに、そうした動作は意外なことだけどな
バグだよね
>>> 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 変換失敗?したところで止まってしまうのですが どうすればよいでしょうか?
どうしたいんだよ?w
こういうことか? for c in xrange(0x3000, 0x3100): print '%04X' % c, unichr(c).encode('cp932', 'replace')
ありがとうございました。いけました。
hoge = ["a", "b", "c"] fuga = ["D", "E", "F"] なるリストから、 moge = ["a\tD\n", "b\tE\n", "c\tF\n"] のような新たなリストをつくりたい時はどのようにすればいいでしょうか
>>> 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']
>>348 ありがとうございます
1行で書けるんですね、参考になりました
>>> 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']
その例でわざわざreduce()使う意味は無いだろうし map()使うんならzip()は要らんだろ map(lambda *x: '%s\t%s\n' % x, ['a','b','c'],['D','E','F']) でいいよ
ありがとうございました。いけました。
Pythonってイテレータだったりジェネレータだったりタプルだったりset型だったりCより覚えること多いんじゃないか。 と愚痴を言ってみる
C++よりはましだろ
Cはコンテナ関連の構造体やアルゴリズムの教本はあっても標準ライブラリが貧弱だった C++はSTLがひどくてBoostがでかすぎでどっちも中途半端 Pythonはバランスが良い方
>>353 Cは言語仕様は小さめに見えるけど、ふつーに使うであろうデータ構造について
標準的なものが何も無いから、それどころじゃないぞ
文字列一つとっても、一般にはヌル終端されたcharの配列だがそうとは限らないし
配列もスタック上、TEXTセグメント上、DATAセグメント上、ヒープ上など
さまざまな場所に配置されている可能性があり
ヒープに確保する場合は多種多様な相互に非互換なアロケータが使われている
可能性があり
wchar_tの場合はそのサイズやエンコーディング方式を規格では
何も定めていないため千差万別だ
>>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を(まともに)使わずに済んでいたからだよ
CにはCのメリットがあるんだけどね それが無くなったらCの意味がないw
勿論その通りだが、CがPythonより簡単だなんてのはとんでもない誤りだ 確かに仕様は小さいが、まともなプログラムを書くのはPythonよりずっと難しい
>>358 メモリ配置を把握してプログラミングする(≒しないといけない)から
そんなことになんないと思うけど。
>>361 勿論そんなコードを書いたら即座にクラッシュするから、そういうコードを
書くわけはないよ(というか書いたらバグなので修正せざるを得ない)
そうじゃなくて、Pythonじゃそもそもそんな非本質的な問題を
考える必要すらない=楽ってことだ
>>358 の指摘してる問題(っていうか意図的なバグだろw)って
コンパイルエラーにならない?
>>363 なるわけないでしょ、型はただのchar*で一緒、区別つかないんだから
C使ったことないだろ
おまえこそ使ったことないだろ
>>353 だがCを確かに本格的に触ってないから楽に感じたと思うんだが勉強しているうちに次から次へと新機軸の機能が出てくるからちょっと気分が参ったw
初めてLL言語を触るからかも知れんが。
>>365 char *s1 = "TEXT";
char s2[] = "stack";
char *s3 = (char*)GlobalAlloc(GMEM_FIXED, 1024);
free(s1);
free(s2);
free(s3);
もしかして、これがコンパイルエラーになるとでも思ってるの?
なるわけないだろ
>>366 別に全部一気に覚えようとか頑張る必要はないよ
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’
>>368 そうだね、つい覚えた機能は全部使いたくなる、もしくは忘れないように使いたくなるけど無理して全部使う必要はないもんね。とりあえずこんな機能もあるんだ。程度で焦らずに勉強します。
どうもありがとうございます。
>>369 ワーニングか
一つの関数の中なら静的に解析可能だから、それも出来るわな
場所が離れてたらまず無理だが
372 :
371 :2010/12/06(月) 01:44:18
わざわざ言わなくともわかると思うが free()のかわりに void foo(char *x) { free(x); } foo()を呼んだような場合、まずコンパイラは警告すら出せないってことね 正直allocateしたものをすぐfree()できるようなごく単純なケースでは 面倒なだけで、特にこんな問題に悩む必要は無い が、そういう単純なケースだけではないのだよ
free()なしexit()が最強ってことでw
覚えること少なければいいという結論なら、CもPythonもbrainfuckに到底及ばないってことになってしまうよ。
>brainfuck にしても只のアセンブラだと思えば 高速化してbrainfuck用高級言語コンパイラでも作れば brainfuckで動作するPythonとかありうる
>>375 いや、なんかallocateしたものを呼び出し側に返さなければならない
(ので、allocateした側がfreeできない)状況というのは普通にあるだろ
例えばクロージャにおけるfunarg問題がそれで、それを解決するために
いっぱんに使われてるのがGC
設計が悪いの一言で切り捨てられるのは、
Cまともにコードを書いた経験がない証拠
勿論本物のカオスを避けるために最大の努力はするわけだがな
スマートポインタ使ったことないのか?
あらあらCにいつスマートポインタなんてできました?
Rubyより劣っているところって何? 調べているんだがそういう記事がないんだけど
別のところでやってくんない、つーか簡潔に言えば氏ね
>>381 お前みたいな馬鹿が使ってるところだよ
言わせんな恥ずかしい
re.scannerが無期限実験中なところかな…
とりあえず入門サイトとか見ながら print "hello! hello!" とか計算とかそういう基本的なのを見よう見まねでやってるんだけど その後の上達の流れが全く分からない プログラミング習得してる人ってどんな流れを辿ってるんだろ…… 意味が分からなくてもとりあえずサイトに書いてあるようなことは やっとくべき? やっているうちに分かるようになるものかしら
やりたいとがないと上達するわけないだろバカ
たぶん無理だろうね
>>386 やりたいこと……とりあえずプログラミングやりたいってのと
あとは例えばPC起動後の一定で一連の作業を自動化してみたいとか
そんな感じ。
>>387 どうだったら無理じゃないの?
PC起動後の定型処理はLinuxならたのしく学べる Windowsだとあまりのハードルの高さに誰もが泣き出すレベル
Linuxは普段からUbuntu使ってる そこで「どう学ぶの?」とか聞くのは野暮なんだろうか やり方聞きたいんじゃなくて学び方が分からないって感じなんだよね 本買ってきて勉強すりゃいいのか グーグル先生に頼ればいいのか
具体的に何をやりたいのかわかってないからじゃないの?
たとえ話は好きじゃないけど たとえばA地点からB地点へ辿り着きたいが 地図を持っていない状況に近いんじゃないかな 途中に山や谷があるかもしれないし 先人が作った道があるかもしれないが 獣道しかないかもしれないし 最短距離の道があっても途中で絶壁で中断してるかもしれないし なだらかな道でもかなり遠回りしているかもしれない
>>391 >>389 の言った「PC起動後の定型処理」
じゃ具体的じゃないの?
ちなみにもっと詳しく話すなら
まずどのブラウザ起動してどのサイト開いて
それからどのソフトを……みたいな感じなんだけど。
とにかく入門サイトとか見てても
イマイチ自分のやりたいことと繋がらないんだ。
やりたいことをピンポイントで学ぶ方法はあるのか
そんな近道は無くて、そういう基本は全部やっておくべきなのか
そういうのが知りたいんです。
>>393 一番いいのは他人のソースを見ること
これがなんだかんだで一番上達が早い
自分がやりたいことに近いソースを入手しろ
入門サイトや分厚い参考書なんて意味がない こういうのを嫌々やってると途中でやる気がなくなる 実用度が低いサンプルばかりだからな 他人のソースにはあらゆるノウハウが詰まっているし ソースでわからないことを調べていくという作業のほうが効率的
Linuxならともかく、Windowsなら.NETの力を借りるのが最適解じゃないかな
確かに 多分やりたいことの大半がコピペでできる
朝からずっとちんちんが堅いんですけどどうすればよいですか?
その辺のスーパー行って蒟蒻にでも刺して来れば
jythonでjavaバイトコードに変換して、 jythonインストールせずに実行ってのやる方法が分かりません。 jython -m py_compile <ソース> ってやるとclassファイルはできるみたいだけど、java 〜 って実行しても メインがないとか言われる。
manifest?
>>403 サンキューです。
何とかできるってことですよね。英語よく分からんからゆっくり読みます。
変な物付いてきて配布するときに、ライセンス的にやばくなるか、それだけが心配だけど。
>>376 どうやってウィンドウ作るんだよ。
…という茶々はおいといて、それができたところでbrainfuckでは書きたくないと思わないのだったら、
君にPythonのよさを説くことは俺にはできないわ。
>>393 それって、本当にpython必要か?
ブラウザの設定で、ブラウザ起動時にどのサイト開くかは指定できるし、
PC起動時にブラウザ起動したいなら、Windowsならスタートアップに入れりゃできる。
>>393 もし、プログラミング自体が初めてなら、まず知るべきことは、コンピュータは計算機だということ。
Pythonを含む多くのプログラミング言語の、一番簡単な利用は、計算機としての利用。
OSの機能を利用して、ウィンドウ出すとか、ゲーム作るとか、何か起動するとかは、PythonだとCより圧倒的に簡単ではあるが、
それでも、計算機として利用するよりは難しいことを知っておくべき。
そして、まずは計算機として利用できるようにならないと、次のステップへは進めない。
計算機としての使い方を知るためには、大まかな文法と制御構造、よくつかう組み込み関数やメソッドを知らないといけない。
幸い、Pythonの制御構造はシンプルだ。ブロック付き構文とか、そういう奇っ怪なものはない。
Webにあるチュートリアルを全部読めばいい。
それさえできれば、計算機処理ならなんでも、計算方法さえ知っていれば、時間さえあれば書けるようになっているはず。
で、ようやく、計算機の次のステップに移れるわけだ。
そこでは、主な仕事は「ライブラリを探して、使うこと」になる。
標準ライブラリに、あなたのやりたいことの手助けになるライブラリがないか探す。
そのものずばりなのがあれば、おめでとう。
できなくはないけど大変そうと思えば、そこで頑張るか、非標準を探すかどちらか選ぶことになる。
全然出来る気がしなければ、非標準ライブラリを探す。
そして探してきたライブラリを、ドキュメントに書いてあるとおりに使う。
計算機としてPythonを使いこなせるようになってきたら、ライブラリとドキュメントさえあれば、
それをどうすればいいかは自然と見えてくる。
>>407 計算機ってなに?電卓みたいなもの?コンピュータとは違うの?
コンピュータは計算機であると位置づけると初学者にとって何かいいことがあるの?
409 :
デフォルトの名無しさん :2010/12/07(火) 06:28:21
計算機はそのままズバリ「計算するもの」だろ それが四則演算だったり論理演算だったりシフト演算だったりetc それらを組み合わせてオートマトンを構成したりetc 文字列も画像も結局は数値の集合体であるわけだし
初心者はそんな質問しないだろう。
黙ってSICP読めってことだろ 俺は3回挫折したけど
>>393 的な方向だと、
・プログラムを起動するプログラム
・プログラムを操作するプログラム
を書きたいということになるのかな
・バッチファイル
・COMオートメーション
について学ぶといいよ
プログラムを起動するのは簡単だけど
(というかPC起動時に決まったものを起動するだけならプログラムを書く必要
すらない)
「プログラムを操作するプログラム」は相手次第なので
「まずそれが可能なのか」というところから始まる、つまりケースバイケース
COMオートメーションはWindows上での典型例だけど、
広い意味での「プロセス間通信」を使うことになるので
パイプ、TCP/IP、DDE、ウィンドウメッセージ、DLLインジェクションなど
さまざまな方法を理解する必要があるかもしれません
一言で言えば初心者には難しいかもしれないよ、とだけ言っておく
Ubuntu使ってんじゃないのか? それにdll injectionは飛びすぎだろ
あーUbuntuユーザなのか、なら
>>413 は忘れてw
自分はtailとかtreeとかをpythonで作ってみる 数当てゲームをつくる 素数を探す 飽きる
417 :
393 :2010/12/08(水) 01:16:11
わぁ、レスが一杯。
トリップはいらないかな。
PC知識がハード寄りで、ソフトウェア面がサッパリだったから
デジタル的な中身が知りたくて(そして操りたくて)プログラミングに手を出すことにして
それでPythonが初心者には取っ付き易いと聞いたから始めたんだ。
PC起動後の定型処理は確かにそのままでもできるだろうけど
とりあえずプログラミングで何かするとしたらまずは作業の自動化とかその辺かなと
ただレス見てるともうちょい知識溜め込む必要がある気がしてきたわ
俺にはまだ早いのかもしれないな……レスありがとう。
>>415 WindowsもLinuxも使う。
ハードが好きならマイコン使った電子工作でアセンブリ言語やった方が面白いかもよ。 その後でC 次にPython
目的作った方が早いよ マジで
俺はPythonでWebアプリ頑張って作るわ。
Pythonのカプセル化ってちょっと面白い。C++やった後だからだと思うけど。
>>418 確かにハード寄りの低水準言語の方が向いているのかもしれない。
その分難しそうだけど。
>>419 目的かぁ、最終的には適当な(テキトーじゃなくて)ソフト作ったり
ゲーム作ってみたりしたいけど(Pythonが向いているか、Pythonでやるかは別として)
最終的な目標のためにはまずある程度技術を上げる必要があるからなぁ……
>>421 英語も数学もダメな俺には地獄みたいな場所だな……
プログラミングには絶対的に必要な要素だけど。
なんかこんなんじゃ諦めたほうがいい気がしてきたけど諦めたくねぇ……
425 :
デフォルトの名無しさん :2010/12/10(金) 06:36:00
初歩的な文字列操作の質問です。 path = "C:\Folder1\Folder2\test.txt" みたいな形でファイルパスが文字列として入っているとして、test.txtというファイル名だけを取得するには どのような方法がイケていますか? 自分でも何かと方法は思い浮かぶのですが、綺麗なコードを書く人はどうするのか 知りたくなったので質問させていただきます。 できれば、python3で回答お願いします。
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'
ペンタブレットのボタン入力を横どりして別のキー入力として 起動中のソフトに流し込むにはどうすればいいですか?
たいていHIDとして接続されてるからhid.dllとかlibusbとかで読むことになる
430 :
デフォルトの名無しさん :2010/12/10(金) 22:44:29
Python2.6+Linux環境でのマルチプロセスについての質問です ・サブプロセスはコマンドを受け取ると処理を行い,その結果(ステータス)を通知 ・サブプロセスは複数起動させ,Pythonは待ち状態のサブプロセスに順次処理を割り振る ということを行ないたいと考えています. サブプロセス1つのみの場合はsubprocess.Popenを用いて出来ています (サブプロセスのstdin,stdoutでコマンドの送受信を行っています) サブプロセスを複数実行し,各プロセスのいずれかの標準出力が読めるようになるまで select.selectで待機させようと考えていますが,デッドロックしてしまいます (サブプロセスはstdoutにステータス送信後,stdinからコマンドを読み込む時点で☓) (Pythonはどれかのプロセスのステータスを受信するまでselect.selectで待つ時点で☓) selectモジュールはこういった処理向けではないのでしょうか? #もしかしてサブプロセスが終了するまで(=パイプが切れるまで)ブロックしたまま?
shell=True
flushし忘れてないか
IDLEのウインドウが移動できないんですがどうすれば移動できますか?
なんか変なソフト入れてない? 「ぴたすちお」とかそういう系
>>435 ずばりぴたすちおが原因でした
ありがとうございます
超能力がすげえなw
経験者だったんだろ
windows7 64bit なんですが、win32 extension のインストールに失敗したのでActivePython2.5 を64bit版から32bit版にインストールし直しました。 64bitのOSで32bit版のpythonを使うというのはやはり問題があるのでしょうか? 自分がちょっと触った限りではとくに問題が無いように見えますがよくわかりません
問題ない
turbogearsの本を買おうと思うんですが2007年に出版された本なので内容的に古くないか心配です。 内容的には問題ないんでしょうか? よろしくお願いします。
自分のよく使うキー(ショートカットキー)だけを ソフトウェアキーボード化したいんだけど どうしたらいいんだろうか? とりあえずボタンはTKとか使えばいいと思うけど 実際にキーを押したのと同じという信号(?)を パソコンに送るにはどうしたらいいの?
445 :
430 :2010/12/12(日) 16:25:25
サブプロセスのstderrをPythonのstdoutにつなげていたのが原因だったみたいです
理由は不明ですがstderr=open(〜)としたらとりあえず動くようにはなりました
>>431-433 回答ありがとうございました
初めてのPython読んでクラスのとこ見てるけど、実際デリゲーションとかって使うの?
はい
継承しか使わない
449 :
440 :2010/12/12(日) 23:25:19
デリゲーション知らない俺にデリゲーションのサンプルコードplz
でりげーしょんて委譲のことか? こんな感じでいいのかな ちなみに俺自身はこの手のコードはほとんど書いたことがない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が組み込みのリストに委譲している例で 一番上のが多分一番普通のありがちなコード
横からだけど勉強になった
え〜…そーかぁ… そりゃまぁ、 i=i+1 なんて書くより i++ って書く方がおしゃれだけどさぁ…
Google App Engineってどうやって勉強したらいいですか?
公式のドキュメントがあるじゃん
フレームワークについての質問もおkですか? Djangoとか
DjangoならDjangoスレいったほうがいいだろうよ
459 :
446 :2010/12/13(月) 05:50:10
知ってるにはこしたことないけど、あんまり使わないってことでいいのかな。 デリゲーション。
460 :
450 :2010/12/13(月) 07:05:25
>>451 thnx
要するに他所で実装された処理を(継承ではなく)そのまま受け継ぐ(委譲してもらう)ってことか
Stack2みたいなコードを書いたことあるけどそれが委譲なんだ
(Pythonだから楽だけど他言語だとめんどそうだな)
いや普通に出来るだろ
できるできないじゃなく面倒つってんだろ禿
>>458 すいません、Djangoスレ別にありましたね。
そっちで聞いてみます。ありがとう
Pythonの入門書一冊読み終えた後ぐらいなんですがコード読んで勉強したいのでオライリーのクックブック買おうかと思うんですが問題ないですかね。。
>>435 動いたあああああああああ! 動かねぇpythonはGUI糞だなと思っててごめんなさいいいいいいいいいい
クロージャについて def maker(N): def action(X): return X ** N return action これってなんかの役に立つの?
環境を閉じ込めておけるから結合を疎にできてロジック分離できるとか、 Stateパターン不要とか、遅延評価に利用出来るとか。
>>466 お勧めリファレンス本plz
オライリーの日本語版は古くない?
尼だとポケットリファレンスが評価いいね。
外部コマンドの質問です。 os.system('ls -al')の例だと、ls -alの対象を変数で書く事は可能ですか? 本当に下らない質問で申し訳ない。
>>470 s = 'ls -al'
os.system(s)
ってこと?
>>471 いえ違います。
例えばls -al /home
の/homeです。
正規表現リテラルもない糞言語と聞いて やってきますた!クスクスww
はっきり言ってなくても困らんよ
475 :
446 :2010/12/14(火) 04:32:27
>>468 > 環境を閉じ込めておけるから結合を疎にできてロジック分離できるとか、
> Stateパターン不要とか、遅延評価に利用出来るとか。
う ん、もうすこし超初心者にも分るように教えてほしい。
476 :
デフォルトの名無しさん :2010/12/14(火) 07:24:05
minidom使ってます。 htmlのbodyタグの最初と最後に「<hoge>広告</hoge>」などを追加するには どうすればよいでしょうか?
>>473-474 Pythonはテキスト処理用の言語ってワケじゃないからなあ。
テキスト処理が専門なら文法に組み込むのも良いだろうが
汎用の言語だとライブラリレベルでのサポートが一番適切だろうな。
質問お願いします。 .pycを読みたいのですが、どうすれば良いでしょうか?
>>479 decompile.pyとかあったような。どの程度使えるのかは知らない
みんなのPythonの後半が難しす
初版は相当舌っ足らずだったので 後になって戻ってくる程度でいいんじゃないか 半分読めば簡単なスクリプトは組めるだろうし
入門書でそれでは先が思いやられますね
>>472 s = '/home'
os.system('ls -al '+s)
でいいの?
a, b, c, d = "I", "Me", "Mine", 1970 print "%s %s %s (%d) is good song." % (a, b, c, d)
aが必要
質問が曖昧すぎて回答できてないのに、なんで質問者がこんなに偉そうなんだ。 エスパーもできない屑は書き込むなってことか?
>>470 が本気で質問しているとは限らないのでスルーしてる
emacs上でCPython shell動かしたときにtabで補完できるようにしたいんですがどのようにすればうまくいくのでしょうか import rlcompleter とかはだめでした
はじめてのPythonネットワークプログラミングって本読んでるんだけどサーバがないせいかサンプルコードが実行できない。 何か良い方法ありますか? エスパーの方お願いします。
サーバがないせいだな
FTPとTelnet勉強してるんだけど動かないコード書いてもしょうもないしサーバーの導入する方法もないし不親切だなと。
どういう環境だか知らないけど、たとえWindowsでもHomeエディションとかでなければ telnetdやftpdがサービスとして利用できたと思うし、できなくとも フリーのが転がってるだろうし、 なんならVMWareの類でlinuxでも動かしてやればいいのでは その本は読んだことないけど、「ネットワークプログラミング」の本では そんなところまでは扱わないのが普通だと思うよ
VirtualBox+Ubuntuの方が良いよ
>>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でした。
リンク先に「ビッグエンディアン」てあるけど「<」で大丈夫か? そしてLMIBのまえのHeaderとCMDBとIRBをスキップしてなくね?
structにわたすフォーマットのプリフィックスはホントに先頭だけ有効 "<4s4s2s4s4s4s4s2s" でも"<4sh6xwllhh"の方がいいよ
あと「s」はc文字列(NUL終端文字列)で4sだと4つ目のNULに到達するまでっぽい バイト単位ならcbBあたりなんじゃないかな #ヘルプ斜め読みしただけだから間違ってるかもしれんが
PIL(Python Imaging Library)にPSDImagePluginあるよ どの程度の機能があるかしらんけど 参考にはなるんじゃないの
506 :
501 :2010/12/18(土) 23:10:29
すいません、理解が追いつきません LMIBの前のも必要だったんですね てっきりstruct.calcsizeと同じサイズのを持ってきてくれるのかと 都合よく勘違いしてましたOTL まずはHeaderから順にデータを取ってみてからまたきますOTL
>>505 リロ忘れですOTL
すごそうなのありがとうございます
Pythonのstructモジュールがやってくれるのは、バイトの列を テンプレートにしたがってタプルにアンパックしたり、 あるいは逆にタプルをバイト列にパックすることだけで、 肝心のバイト列をファイルから切り出してくる処理は自分で書く必要がある 先頭の方のデータに興味が無いのなら、単にシークしてスキップすれば いいんじゃないの 可変長の部分があるのなら、そのブロックのレコード長を読んで シークする必要がある長さを調べる必要があるけどね
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になるのは分かりますが
ほかの整数型の取り方はどうなっているのでしょうか?
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
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つにまとまる
ごめん嘘ついた
>>514 は6バイトが負数だとまずい
で,先のフォーマット見直したら予約ってなってるからこの6バイトは無視していい
パディングの「6x」にしとけば多分
>>514 の「3h」の部分が消えると思う
516 :
501 :2010/12/19(日) 12:46:13
ありがとう御座います! こちらから操作しない値もそれで乗り切れそうですね 助かりました!!
sys.exit()って組み込みにしてくれればよかったのに プロンプトから対話モード使ってて終了するのにいちいちimportとかメンドくさ
Linux とか Ctrl+D,Enter Windows Ctrl+Z,Enter
>>517 Ctrl+Z(Win)またはCtrl-D(*nix)
対話モード時はimport要らんだろ?
対話モードは quit() で終了できる あとはPYTHONSTARTUP環境変数使う
>>522 ほう。quit()は初めて知った。ありがとう
>>522 raise SystemExit(status)
ってのもある。
バイナリファイルの書き変えをしたいのですが こうすると 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 そうです、すいません。
>>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
質問する気ないだろwwww
基礎を疎かにするなよ >>> a = '\0\0\0' >>> a '\x00\x00\x00' >>> print a >>> print repr(a) '\x00\x00\x00'
ありがとうございます!!! ぐぐったけど意味が全く分からなかったです!!! repr()関数は引数で与えた値と等価な値を返すインタプリタ表現(リテラル表記)を文字列として返す とにかくやってみます!!
基地外は頭の病気治してからまた来てくれ
便乗だけど__str__と__repr__の違いがいまいち身についてないんだが 前者:人間に読みやすい・理解しやすい文字列形式 後者:eval関数で元のオブジェクトに戻せることが期待できる文字列表現 であってる?
違う
>>534 >便乗だけど__str__と__repr__の違いがいまいち身についてないんだが
__str__() は単に文字列に変換するためのもの。
__repr__() は文字列表現を返すもの。eval関数で元のオブジェクトに戻せることもあるけど、必ずしもそうではない(戻せないものも多い)。
class Foo(object):
pass
Foo().__repr__() #=> '<__main__.Foo object at 0x1003b5ad0>'
>>> 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'
>>534 __repr__ はプログラマ、__str__ はその他向けの文字列表現にして返す
なぜ __repr__ が eval すれば元のオブジェクトを復元できる*ような*文字列を
返すものとされているのかといえば、そういう文字列はプログラマにとって
オブジェクトの中身がどういうものか調べたり把握するのに都合がいいから
(実際、Python の repr に相当する Ruby のメソッドの名前は inspect )
なので __repr__ の返り値を eval で実際に復元できるかはたいした問題ではない、
というのが漏れの認識
実は __unicode__() もあるので注意
>>> 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はそうなってるみたい) ってことか
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の設定方法はどうすればいいのでしょうか??
知るかよ。Python関係ない
psdの仕様書みろ #絵描きにとってpsdってすごい汎用フォーマットなんだけど標準化とかされてるのだろうか
546 :
528 :2010/12/22(水) 08:41:56
547 :
528 :2010/12/22(水) 11:10:00
自己解決しました 9を8にすればいい問題でした。 お騒がせしてすいませんでした。
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
ま お か
>>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での出力データが更新できません どうすればいいのでしょうか?
なぜ更新できないのか自分の頭で考えてから説明してください
553 :
548 :2010/12/22(水) 23:28:20
えっ そもそもタプルはデータが更新できないものだからですよね。 ループ内ではタプルで出力するものは使えないってことでしょうか???
554 :
548 :2010/12/22(水) 23:30:16
すいません、言い直します ループ内ではstruct.unpackのようなタプルで出力するコマンドは使えないってことでしょうか??
そんなわけなかろ >>> 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
Immutableの解説は任せた
557 :
548 :2010/12/23(木) 02:24:28
アドバイスありがとうございます! 色々考え違いをしていました。
というかどこが間違っていてどうやって解決したのか書かなきゃだめだ 経験をスレに還元しる
PSDよりまえに勉強することがあるだろ 10年ROMってろ
ファイルに書いたたくさんの単語から重複した単語の数え上げを行いたいのですがファイルから全データを読み込んでソートを行なってからループ文で数え上げを行えば良いでしょうか?
いいえ
>>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を使う方法もあるよ、多分もっと長くなるけど
>>562 単語の定義はそれで大丈夫です。
参考になりましたどうもありがとうございます!
>> 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]で出現回数を参照できる。
問題はここだろ sorted(words)
なるほど
d[word] = c + 1
pythonのsorted()って空間計算量がそんなにひどいのか?
571 :
564 :2010/12/24(金) 06:46:07
>>565 >
>>564 でも全ての単語を辞書dに(=メモリ上に)格納しているわけだけど、
してねーよ。
webpy 利用されてる方いらっしゃいましたら教えてください。 webpyに搭載されているsession機能はリクエストがあるごとにセッションIDを更新したり するのでしょうか? 認証機能付きサイトを作成したいのですが、セッションハイジャックが怖くて いろいろ調べていました。 パソコン二台で同一のセッションIDを作成するとどちらからも認証後の機能が 使えてしまっていたので、なにかセキュリティのオプションがあるのかなと思いました。 ソースコードを読んでみたんですが、どうやらIPでチェックをかけているようなのですが、 詳しい方いらっしゃいましたらどのように対処されているか教えていただけませんでしょうか?
>>571 辞書のキーとして単語を格納してるように見えるが
>>571 D.keys()で何が返ると思ってるの?
まさかユニークな単語セット!=全ての単語とか言わないよね?
>>570 >>562 のwordsはジェネレータでリストではないから
list.sort()は使えないのでは
>>574 まあ違うといえば違うんじゃないの
重複が無い場合は一致するし
片方をメモリを馬鹿食いと言うほどの重要な違いがあるようには見えないけれども
576 :
570 :2010/12/24(金) 16:58:37
>>575 これはうかつだった。おっしゃるとおりです
メモリ的にはそんなに変わらないと思うけど、 ソートするか辞書使うか計算量的にはどっちが軽いんだ?
計算量は辞書のほうが軽いと思う C++のmapみたいにO(log n)の辞書だと、オーダーはソートと同じになるんじゃねーか 多分
すみません. ソース(モジュール?)が増えてきたのでフォルダ階層を掘って整理したいんですが, 下や上のディレクトリ階層にあるモジュールをimportするにはどうしたらいいんでしょうか?
ちなみに,自分は普段C++を使っているので, C++のヘッダインクルード的な感覚で, 別階層のモジュールをインポートしたい気でいます.
>>579 ./path/to/mymodule.py
をインポートするには、
from path.to import mymodule
Matplotlibが面白かった
583 :
578 :2010/12/25(土) 00:16:03
あー n に log n かけりゃ n log nだからソートと同じじゃね?と思ったのだが 機能面で考えればツリー型のordered mapに要素をつっこんでくのは ソートそのものなんだから、同じで当たり前だな、馬鹿だww つまり、両者の違いはhash mapとtree mapの計算量の違いと同等ってことじゃないかな? 大抵はどうでもいい違いである(tree mapは十分に高速である)ともいえるし 速度が重要な場合には無視できない違いであるとも言える
>上のディレクトリ階層にあるモジュールをimportする
ってできるの?
パスを通すとかではなく
>>581 みたいな感じで(相対的に)
for c in "qwerty": print c とやると1文字ずつに分割されます これをn文字ずつに分割してループを回すのは for i in range(6): print ("qwerty"*3)[3*i:3*(i+1)] # 3文字ずつ で出来ますが、よりスマートな方法はありませんか?
itertoolsあたりにあって良さそうなんだけどねぇ
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
結局for文をリスト内包表記に変えただけという始末。ごめん
前に聞いたのでスマートだと思ったのは izip(*[iter(iterable), ] * count) かな。pair,ring辺りは確かにほしい
string="qwerty"*3 while string: print string[:3] string=string[3:]
>>584 パス通さない(sys.path.append("..")しない)のだったら、import文では上はできないんじゃないかなぁ。
C++だと"../foo.h"とかできたんだっけ?
試してないけど、こうすればできるかも
import imp
imp.load_module(name, *imp.find_module(name, ".."))
ただし、おすすめはしない。
こうするくらいなら、sys.path.append("..")した方がきれい。
>>592 俺もそれ思い出した。
for cs in zip(*[iter("qwerty")]*3):
print cs
で
('q', 'w', 'e')
('r', 't', 'y')
になる。
>>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
>>585 の案がいろいろでてるけどさ
質問者よりも可読性のある書き方って結局無いのだろうか
>>592 ,595あたりはシンプルっぽいけどぱっと見で何をしてるのか分からないし
クックブックもいろいろ載ってるけどバッドノウハウ的な物が多い気がする
>>598 ループ毎に2度も文字列の部分コピーを作ってるからなぁ
(蛇足だけど俺ならこう書く)
string="qwerty"*3
while string:
output,string=string[:3],string[3:]
print output
>>585 だと(書き方が微妙だけど)必要な部分文字列以外のコピーは発生していない
string="qwerty"*3 for i in range(6): print string[3*i:3*(i+1)] これでいいんじゃね
>>599 そんなのは言われなくても初めから分かってるよ
602 :
585 :2010/12/25(土) 14:20:34
ライブラリにあるかと思ったのですがないみたいですね
皆様ありがとうございました
ついでですが
>>585 のようなイテレータに名前をつけるとしたら何がいいでしょうか
(enumerateとかzipとかfilterみたいな)
split
ライブラリにあるとしたら、そのライブラリの中のコードはどうなってんのって話だし
606 :
585 :2010/12/25(土) 14:33:13
>>604 おおおおお、すごい
参考にさせていただきます
>>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スクリプトの実行ディレクトリに フォルダを作成するのってどうやったら出来ますか?
611 :
デフォルトの名無しさん :2010/12/25(土) 21:01:48
mecab,twitterライブラリ使ってbotおもしれぇ.
クリスマスの間に一気にレベル下がったでござるの巻
超初心者用なんだし、これくらいがいいだろ
初心者を名乗れば何でも許されると思うなよ
隔離スレも兼ねてるんだから、なんでも許されなきゃ機能しないよ
Pythonって標準モジュール覚えてないとちゃんとしたプログラム書けなくない?
ちゃんとした?
Pythonで躓くようならもう素質がないと諦めた方がいいと思うの
だが何人も躓かないことはない
お前ら手厳しいなw
文字コードには
>>617 逆に考えるんだ!
標準モジュールを覚えるだけでPythonは使うことができる!
覚えなくたって、こういう機能は大体用意されているだろう、という勘が働けばおk.
辞書にキーをdatetime、値をstringでいれています。 キーで日時順にソートしたいのですが、どうすればいいのでしょうか?
D.items().sort(key=(lambda x: x[0])) でできない?#脳内検証のみ
何もしなくてもソートされるような気がするんだが。
自分のほしい機能は大抵用意されている時代である
そんなあなたにレシピ本。 でもオライリー絶版か
>>627 ありがとうございます。
ですが、上手くいきませんでした。
>>628 追加時に自動でソートされているかと思ったのですが、そうでもないようでした。
なら2つのdatetime変数を引数にとって比較結果を返す関数を定義して sortのcmp引数でその関数を渡せばおk
>>631 追加時に自動ソートはねーよ。
もちろんsort,sortedとか使っての話だよ。
これでええやろ >>> 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
>>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")
os.makedirs("./A/B")
os.makedirs()で既にあると例外出すのはなんか違う気がしてならない ディレクトリじゃないなら分かるんだけど
すでにパスの途中までディレクトリ(フォルダ)が存在する場合は、残りのディレクトリ(フォルダ)を作成します
643 :
デフォルトの名無しさん :2010/12/27(月) 20:08:54
pyてょnを実行すると(ダブルクリックすると)すぐにその実行結果が現れるけど pyてょんをダブルクリックしてすぐにGUIを呼び出すことも出来ますか? JythonとかwxPythonとか使うと出来るんでしょうか。 簡単にGUIを作るならJavaがいいとか聞きましたがどうなんでしょうか
簡単にGUI作るならスクリプト言語(Perl, Python, Ruby) 中規模のGUIアプリ作るならJava, C# 大規模のGUIアプリ作るならC++
WindowsだけだったらVBが超簡単
> 簡単にGUI作るならスクリプト言語(Perl, Python, Ruby) GUIならあんまり簡単じゃねーだろ
簡単じゃなくて簡易アプリだな 個人用や小規模アプリ以外でスクリプト言語主体のGUIは使えない
VBは是非とも鮭鯛
>>644 RubyはGUI作るのに向いてない
Perlは論外
PerlはLinuxシステムなら使うよ 最近はPythonに置き換わってるけど Rubyはゴミカス
653 :
デフォルトの名無しさん :2010/12/27(月) 21:28:19
>>647 指定したディレクトリ以下にある全てのテキストファイルの内容を
数行書き換えるためにテキストフィールドを作って実行ボタン押すだけの
本当に簡単そうなやつ作りたいとおもってます。
質問です。 以下のような、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()
>ちなみにBarクラスの「def __init__(self, name):」を「def __init__(self, name=""):」と引数を省略可能にすると、期待通りに動いてます。 それでいいんじゃね?
centos5.3でpython環境を整えていたらいつのまにかpython2とpython2.4がパスの通ったところに置かれたんですが、どっち使ってればいいでしょうか。メジャーというかstableなバージョンはどちらでしょうか?
python2
>>659 あ、いや・・・期待通りっていう書き方が悪かったですね。
Barクラスの__init__の引数は、必須項目なので、初期値は省略できないんです。
インスタンスのコピーで実態を作れば、__init__での初期処理はいらない(という前提で作ってる)ので、
__init__の初期化処理をせずにインスタンスを作りたかったのです・・・。
nameがどこにも使われてないな
みんなのpython webアプリ編って良い本ですかね
>>663 そこつっこまない(;w;
最小構成で突っ込まれるとは思わなかった。
そこはおへそなの
>__init__の初期化処理をせずにインスタンスを作りたかったのです・・・。 矛盾してるな
>>667 やっぱり?汗
自分でも書いた後にそう思った。
うまく言いたいことが伝えれない・・・すまんです。
__metaclass__とか__new__使ったらゴニョゴニョできないかなと思って試行錯誤中・・・。
BにClone定義してもだめだろうな
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]
print A
Pythonの勉強方法として、写経するみたいに参考書のサンプルを一つ一つPCに入力して その動作を確認したり、サンプルをいじってみたりするのが、結局は一番の早道でしょうか?
死ね はげ
サンプルいじるのはいい方法だよ 頭の中で分かったつもりになるよりかはサンプル打ち込んだほうが断然いい
>>657 6行目をret = Fooにしちゃ、まずいかなぁ?
677 :
676 :2010/12/28(火) 10:14:12
ごめん。まずいわ。
>>671 listの代わりにsetを使って集合演算する。
ipythonの良さがよく分からないので簡単に説明してください
>>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__内でコンストラクタ呼び出してることっぽかったから。
ごめん。また、ぜんぜんできてない。
>>682 >>683 copy.copy()かcopy.deepcopy()を呼び出すと、その中でインスタンスが生成されて、__init__が呼び出されるのよね。
で、「引数の数あわねーよ」って怒られる・・・。
__copy__の定義は、copy.copy()かcopy.deepcopy()が呼ばれたときの挙動を変更するだけなので、
今回のメタクラスつかって解決した方法では、ぜんぜん関係なかったです。
「__copy__が定義されてるされてない」に関わらず動くようになりました。
>>684 あ、copy.copy()は__copy__で、copy.deepcopy()は__deepcopy__ね。
Python 2.7 を使っています。 Windows上でPythonで作ったアプリケーションを 配布するにはやはり py2exe などで exe 化して 配布するのが常套手段なのでしょうか? インストーラ、アンインストーラをつけたいと思っています。 また、できればアップデータもつけたいと思っています。 開発中はバージョニングツールとしてbzrを使っているので bzr update ですぐ終わりますが、リリース後のアップデートは また別の仕掛けが必要そうで、rpm や deb での配布ならともかく Windows でなにか便利な方法があるのか知りたいと思っています。 C++やC#で作ったアプリケーションはInno Setupでパッケージ化 しています。たまに EXEpress CX のフリー版を使うこともあります。 「Windows で動く Python アプリケーションの配布(と更新)」 というのは初めてでして、なにか定番のやり方があれば教えて 頂きたいと思っています。
対話モードで for i in range(10): print (i) でエラーが出たのですがなぜでしょうか・・
まずはエラーの内容を(ry
>>687 とりあえずPythonのバージョンを確認してみれ。
3未満だったらお気の毒、printは関数ではなく文だ。
IndentationError: expected an indented block と出ました。
>>690 まあ、print文でもprint(i)はちゃんと通る。
基本くらい学んどけw
697 :
690 :2010/12/28(火) 21:16:46
>>691 ちくしょーそっちかよ!
「言語処理系はfor文の次の行がインデントされてるもんだと期待してたんだけど、お前のコードはインデントされてないんだよなー」という意味のエラーメッセージだ。
>>694 マジッスか!?
(i) はiと同じとは思ってたんだけど、printと(の間に空白が無くてもエラーにならんとは思わなかった……。
IDLEとプロンプトは違うんですね・・・IDLEは自動でインデントしてくれてたのか
(i, ) で一要素のタプルになったりはする
Amazon.co.jp: みんなのIDLE: 岡田 賢治 : 本
この早さなら言える Ruby, Ruby, Ruby
702 :
デフォルトの名無しさん :2010/12/28(火) 23:33:26
滓しかいねーわ 2ch終わってるな
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
なんのために勉強するかによると思うよ 仕事で使わなくちゃならないなら、写経もいいし、初心者ブログ作るのもいい もし、自分で何か作りたいならその何かを作るのが一番いい
706 :
デフォルトの名無しさん :2010/12/29(水) 01:30:20
バッチファイルにpythonのスクリプトを組み込んだら 前のバッチ処理(ファイルを変更)が終わるより早く pythonスクリプトが動き出しちゃうんだけど これはどうしたら前のファイル変換が終わった事を pythonに伝えればいいんでしょうか??
707 :
706 :2010/12/29(水) 01:44:21
ごめんなさい、取り消します。 勘違いでした、すいません ちゃんと動いてましたOTL
5963
boost.python って Python 3に対応してたのか。
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 ← こいつは取得しない
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の組み合わせで何とかなるような気がしますが。
無いんでしょうか?
無いアルヨ
import os filter(os.path.isfile, os.listdir(PATH))
>>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
標準モジュールのリファレンスで良いサイトってありますか。
公式のって戻り値が具体的に何なのかわかりにくくない?
わかりにくいね っていうか何故か書いてないのが多い
そんなあなたにパイソンレシピオススメ
いいえ 結構です 間に合ってます
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 になってしまいます
Pythonでバイナリのかたまり同士の XORをとるのにもっとも早いと思われる方法はなんでしょうか? 10MB程度の同じサイズのバイト列のXORを取りたいと思っています。 こういうのはやっぱり拡張モジュールを書いてCとかSIMD命令を 使ってやるのが良いのでしょうか?
numpy使ってこんなのとか >>> import numpy >>> a = numpy.frombuffer("01234567", numpy.uint8) >>> b = numpy.frombuffer("abcdefgh", numpy.uint8) >>> (a ^ b).tostring() 'QSQWQSQ_'
>>729-730 exeはダブルクリックしてるの?
cmd.exeから実行してるの?
あるいはそれ以外?
バッチファイルに適当なファイルをドラッグアンドドロップしています。 ヒントありがとうございます。 なんとか読んでみます。
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘
ctrl+spaceでは出る?
>732の1つ目の画像下段、2つ目の画像下段のいずれも、 ctrl+spaceを押した所なのですが、駄目でした。 1つ目は、画像じゃわかりませんが、自動補完のリストが出るかわりに 半角スペースが入力されています。
>739 訂正、732じゃなくて737でした。
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ここからどうすれば??
な状態です。
だいぶ回りくどいので、まさにその為にあるような標準ライブラリや
出来合いのライブラリがあったりしませんでしょうか。
よろしくお願いいたします。
とりあえずCまでを繰り返して二次元配列を作って n = 2 hoge.sort(key=lambda x: x[n]) でnを適当に変える
最大何行あるんだろうな
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程度ですが、ここから一気に急増してもおかしくない状態です。
(その急増の仕方が単に末尾に追加されていくだけなので、
定期的にこのスクリプトでソートしようかと思いまして。)
400位なら問題ないかな
バージョン 3.1.3を使用しているのですが dbfファイルを読み書きするにはどうすれば良いでしょうか? ググってdbfpyというのは見つけましたが、2.X系でないと使えないようです。 超絶初心者なので、何が何だか分かっていない部分が多いのですが、 よろしくお願いします。
>>746 こういうのって上限っていくらぐらいなの?
749 :
【吉】 :2011/01/01(土) 00:05:44
あけおめことよろ
>>750 そうなのか。
10000とか100000とかその程度でPythonくんがあぼんしちゃったりするってこと!?
そんなことにはならないから安心しろ あるとしてもただのメモリ不足だ
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の文字を使うことは避けられないのですが、 その上でエラーをなんとか回避する方法はないでしょうか?
>>753 日本語EUCにローマ数字って含まれてたっけ?
>> 0xADB5 - 0xADBE
euc_jisx0213とeuc_jis_2004にはあるみたいだけど、これでいいんだろうか?
>>756 ありがとうございます、読めました
ところで、どこを探せばeuc_jisx0213/euc_jis_2004を見つけられるのか、
後学のために教えていただけませんか?
761 :
741 :2011/01/01(土) 18:18:49
あけましておめでとうございます。
>>742-
>>744 ありがとうございました。
ご教示いただいた方法で解決致しました!
753の便乗だけど、 # encoding: euc_jp x = "テスト" 「煤vはどのcodecを使っても絶対にパースできないよね pythonはスクリプト言語と思えないほど文字処理がクソだよな
'テスト'.decode('cp932') encoding.*見て自分でどうにかすりゃいいじゃん
>>762 euc_jpってことは、ひょっとしてJIS X 0212の語末のシグマがΣに化けた?
>>763 それ以前にソースのパースエラーで落ちるんじゃない?
# encoding: euc_jp ここがおかしい
>>766 ソースがEUCである以上、それを何に変えても動かないと思われ
codecが対応していないと言うことは、EUCのWebで狽含むページをopenした場合に それを情報を欠落させずにdecodeすることが不可能ということか。 どうしてもやりたかったらbyte処理で頑張る必要がある、と…
>>> u'Σ'.encode('euc_jp') '\xa6\xb2' >>> '\xa6\xb2'.decode('euc_jp') u'\u03a3' Python2.6だが、何の問題もないように見えるのだが 一体何を問題にしているのだ?
>>769 1.Σと狽ナちがう文字。Σなら動く
2.ソースコードがEUCの場合の話
コンソールじゃなくてEUCでファイル作ってやってみ
#
>>769 # encoding: euc_jis_2004
x = "テスト"
#これをEUCで保存して実行→Syntax Error
#Python2.6でも再現
Σ(Sigma/U+03A3)ではなく(Summation/U+2211)の方だな。 JIS X 0213では定義されてないからeuc_jis_2004でも無理だが、 cp51932組み込めればパース出来るんでねぇか。
python3でバイナリ列を標準出力に出す標準的な方法ってどんなものですか? とりあえず今は sys.stdout = open(sys.stdout.fileno(), "wb") sys.stdout.write(b"hello") と書いていますけど、pythonは初心者ですのでPython wayとして正しいのか自信がありません。 詳しい方是非教えてください
413のひとか
>>775 問題ないと思うけど、python wayかどうかといわれると自信がない
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になってしまいます。 どうしたらいいでしょうか?
AttributeErrorがなぜ出てるのか分かる? エラーメッセージを読んで自分の頭で考えてみましょう
>>782 わかんないですOTL
普通のファイルの時は
f=open("temp.txt","w")
f.write("------test--------")
の後に
f.close()
で行けますよね・・・
画像の場合はどうしたら・・・?
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() でもレイヤーごとに出力するには どうしたらいいのでしょうか?
もう少しPythonという言語自体を学ぼうという気がないとどうしようもないよ AttributeError:closeが出るのは、ありもしないメソッド(つまりclose())を 呼ぼうとしているから imにどんな属性があってどんな使い方ができるか調べたいときは 対話環境で dir(im) help(im) とかやってみるといいよ あとは、ドキュメントを読む ファイルが閉じないのは、開かれたファイルへの参照をimが握っているからで、 imへの参照がなくなれば、その時点でファイルは閉じられるはず 対話環境でやってるんなら、閉じたいときは明示的に del im とかするといいよ それと、PILのimageオブジェクトは、seek()でPSDのレイヤーやGIFアニメのフレームを 飛ばせるはず もっとも、俺がちょっと試したところでは、Photoshop CSについていた サンプルPSDのほとんどをPILでは開けなかったけどな
どんだけPDFが好きなんだよ
>>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
>>790 そのコードは「aaa.psd全体をPNGに変換したファイル」をレイヤの数だけこしらえてるように見えるが。
PSDファイルを持ってないから試してないが、ImageSequenceモジュールってのを使うとよさげな気配。
>>「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
>>792 エラーメッセージを省略するなよ。Tracebackから最後まで全部だ
お前は読む気がないから分からないだろうが
必要な情報がちゃんと書き出されているんだ
>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
もう使ってる。psdを開いたときのImageがそのファイルのPsdImageFile >>> im = Image.open('hoge.psd') >>> im <PIL.PsdImagePlugin.PsdImageFile image mode=RGB size=640x480 at 0x127C760> あと、PILはpsdの読み込みしかサポートしていないので注意
ありがとうございます! こんな情報も取得できるのですね import Image im = Image.open("aaa.psd") print repr(im) psdからPNGにするのに なにか関係があるかと思ったのですが・・・
池沼って本当に居るんだな
自己紹介乙
レイヤーごとじゃなくてなんか色ごと?になってしまいます どうしたら・・・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
>>803 単純にPILのPSD読み込みがバグってるんじゃないの?
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ってなんて発音するのですか
アドバイスありがとうございます。 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の事しか書いてない???様子です。
その16進の文字列はレイヤー名だろう 中身が知りたければ print '\x94w\x8ci'.decode('cp932') とでもやってみればわかる が、見たところ、壊れてるようだな cp932でデコードできそうにないバイト列が混じっているようだから ちゃんとPSD 3.0か確認したのか? そうでなければPILが正常にパースできなくとも文句は言えないぞ
アドバイスありがとうございます! PSD3.0かどうかは分からなかったですが aaa.psdのファイルをバイナリーエディタで開いてレイヤー名の部分を調べてみると print "\x83\x8c\x83C\x83\x84\x81[ 4".decode('cp932') で「レイヤー4」になりました。
ああ、壊れてるのかと思ったのが勘違いか、ごめん ならちゃんとレイヤー情報はパース出来てるっぽいな
>>811 どうしてもPythonでやりたいならPythonを真面目に勉強してみることをお勧めする
あとスレ違い
年末からうろうろしてるひとだな
>>812 まずはフォトショスレで今後の必要なデータは何か聞いてみます。
ごめんなさい、これでも真面目なつもりなんですが・・・。
>>813 そうです。
だいぶん、psdの中身がいじれるようになってきたんですが
行き詰ってきました。
815 :
814 :2011/01/04(火) 23:49:43
ところで、なんで超初心者用スレはくだスレっていうんですか? 最初 パイソン→蛇→管(くだ)っぽい って思っていましたが他の超初心者スレでも「くだすれ」って 名前になっています もしかして「くだらないスレ」ってことですかね???
>>815 みたいな「くだらない質問」をするスレだから
ちゃんと調べればそんなに難しくないだろ がんばれ
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
制御の中断と再開の方法が欲しいということかな greenletを使うといいよ
821 :
819 :2011/01/05(水) 17:21:41
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にするみたいな簡単に止める方法ないかなあああああ
例外が移植性もあって一番楽じゃないの?
>HTMLParserの内部のフラグか何かをFalseにするみたいな簡単に止める方法ないかなあああああ HTMLParser.pyをカレントディレクトリにコピーしてきて数行書き換えればできるんじゃね 気にくわない動作をする標準ライブラリーはいつも俺色に染めてるぜ
825 :
819 :2011/01/05(水) 18:14:17
>>822 > どんな処理でも途中で止めたりできるのかな?
コルーチンってのはそういうもんだよ
まあ、どうやら止めるだけでいいみたいだから、
単に例外投げるだけでいいんじゃないの
コルーチンが便利なのは、単に止めるだけじゃなくて、止めたところから
再開したい場合ね
826 :
デフォルトの名無しさん :2011/01/05(水) 18:22:23
datファイルのテキストを1行ごとに読み込むにはどうしたらいいんですか? 日本語ヘタですみません 1行毎に読み込んで、1行づつ内容を書き換えていきたいのですが
一行ずつ表示。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 と書いたらエラーが出てしまいました。
for i in range(10): exec 'x%d = %d' % (i, i) でもリストで代用できないか検討すべき
変数に文字列足してるじゃん
831 :
デフォルトの名無しさん :2011/01/05(水) 19:14:07
pythonの正規表現についてわからないのですが、噛み砕いて説明してください
やなこった
835 :
デフォルトの名無しさん :2011/01/05(水) 19:18:03
836 :
デフォルトの名無しさん :2011/01/05(水) 19:19:56
えと、改行毎に配列に格納するにはどうしたらよいでしょうか
var_nameって何?
>>837 いやそれを聞くなら vars() って何? だろう
教えてやらんけど
>>831 みんぱい読んだが俺も正規表現は訳じゃワカメだったよ
840 :
デフォルトの名無しさん :2011/01/05(水) 19:22:57
正規表現とかSQLとかHTTPプロトコルとかは知ってないとどうしようもない基礎知識じゃないか 時間をかけてでも勉強しておいたほうがいいとおもうぞ
843 :
デフォルトの名無しさん :2011/01/05(水) 19:28:48
要するに文字列の検索、置き換えでおk
reモジュールでできることならそれでもいいかもしれないが 正規表現とはなんぞやでその答えだとアウトだな
849 :
デフォルトの名無しさん :2011/01/05(水) 23:29:17
16進のアドレス表記をしたいけど "%X" %addで大文字の16進表記が出来るのはわかったけど 文字の先頭に0を付けて桁数を揃えて表示したい場合はどうすればいいですか? ↓こんな感じにしたいんです 001 002 003 ・ ・ ・ 00F 010 011
左に00000・・・・を連結して、右からバッサリ切る!
"%03X"
852 :
849 :2011/01/05(水) 23:43:52
>>850 意味が分からないwww
>>851 あたまに0が付いたカッコいい表記ができました!
ありがとうございます!
>>852 850の言いたいのは、例えば1Aという文字列があったとして
左に0をいっぱい繋げて0000001Aとする。そして必要な桁数右から切り取る。
例えば"%05d"%xと同等の処理は、xが5ケタ以下の整数だとして
("0" * 5 + str(x))[-5:]
と書くことが出来る
Pythonではprintf表記が使えるから関係ないけど、JavaScriptなどでは重宝するテクニック
質問です。 reduce関数と同じ処理を内包表現で書くことが出来ますか? for文を使わないと書けないような気がするのですが…
>>853 あまりにも初心者すぎる質問したから
からかわれてるのかと思ってた
解説ありがとう!
>>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行しか書き出されないのですが全行書き出すにはどうしたらいいですか?
>>853 ちょっと前にあった「CSVのソート」なんか、リストにダミーの要素を足してフィールドの数を揃えるのに
同じアルゴリズム(というと大げさだが)技が使えるな。
ループ回してリストにappend()するよかエレガントな感じだ。
>>857 print html のインデントを忘れてるとか
というか入力データと欲しい出力の例ぐらい書くべき
>>857 それだと、
1行ずつ読み込んではその行を置換した結果をhtmlという変数に代入する
ということを繰り返して
最後にhtmlという変数の中身を書きだしているのだから、
最後に格納された値(つまり、最後の行を置換した結果)しか書き出されないのは
当然だな
Pythonって最近は学校教育とかで教えてたりするの? 宿題聞いているような雰囲気がこのスレから伝わるんだけど
いやくだすれですし
>861 11月ぐらいからの お騒がせPSD、PIL、ImageMagick関係は全部自分だわ ごめんね あああ会社行きたくねぇぇぇ
864 :
デフォルトの名無しさん :2011/01/06(木) 06:33:10
同一人物なのは誰でも分かると思う
このスレで解答するに値する質問はほぼ皆無だよね こいつらドキュメントも読めない文盲なんじゃないかと思うときが多々ある
くだスレですから
Pythonの場合はそもそもドキュメントがないからなぁ
、ミ川川川彡 ,ィ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
ないわけじゃないだろw 公式のドキュメントの探しづらさはひどいけどな
会社行ったら今日休みだった・・・。 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
出力結果はこうです。 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
873 :
デフォルトの名無しさん :2011/01/06(木) 09:44:17
>>870 >会社行ったら今日休みだった・・・。
なんで無職はこういうわかりやすい嘘を書くかなぁ
え〜、もうちょっとヒントの範囲を狭めてよぉ〜 いま不況だから会社自体の休みが多いだけだよぉ はー分からんOTL
>>873 にちゃんではわりと多いよ。
他にも
* 仕事は午後から
* 有給を使った
* 彼女と約束がある
とか。
スレと関係ないのにこういう一文を挿入しちゃう奴は何かしら
コンプレックスがあるんだろうね。
すくなからず後ろめたいことがあるから 無意識にいらんことを書いちゃうんでしょ
まあ、質問してる時点でかなり後ろめたいってのはあるよ。 いつも駄目な質問ばかりしてるから・・・
>>870-871 ループの直前で"print len(add), adds"を実行して値を確かめろ
うあ、ありがとう!! len(add)と addsの値が違ってた!! 前の部分を調べてくるよ!!!! あと","で文字列繋げれたんだね 教えてくれて有難う!!!
まぁ今書き込んでる奴は全員ニートだけどな
大学生舐めんなよ
スレタイが 「ニートが会社員と大学生を装うスレ その9」 に変更になったようです
>>873 会社行ったら今日シャッター閉まってて
怒鳴ってる人がいっぱい集まってた
ならリアルなんだけどな
887 :
886 :2011/01/06(木) 11:12:57
ちなみに最終学歴は 北京カラオケ大学大学院 音痴矯正科 卒業 カラオケ博士 どうせお前らなんて良くてもハーバード卒だろ ニートが嫉妬するのも無理ないかw
さむい
PSDファイル・・・ついにImageData部分まで内容を取得できたんだけど 次はどうすればいいんだぁぁぁぁ Rle圧縮調べたら一杯情報出てきたさ もうね、わけわからん うごごぉぉx
オライリーの初めてのpythonを見ながら勉強してるがつまらん・・・なんか作りたい
Pythonで彼女作ったよ importし放題
>893 psd←→Png変換ソフトを作ってくださr(y
つまらんなら作ればいいじゃん 学校で無理矢理勉強させられてるわけじゃないんだろ 意味わかんね
俺のような初心者は何が作れるのか・何を作ったらいいかがわからないのだ(キリッ
* Python のソースコードの半角スペースと を相互変換するスクリプト * テキスト中のタブと半角スペースを相互変換するスクリプト * 2ch の dat ファイルと HTML を相互変換するスクリプト * ISBN-10 を指定すると Amazon の在庫状況を調べるスクリプト さあがんばれ
>>899 有難うございます。
最初はdatとhtmlの相互変換をチャレンジしてみます。
>>898 何か作りたい物があるから
その手段として
プログラムやり始めるんじゃないのか???
>>899 うっかりリストに入れちゃったけどそれが一番難しい
dat -> HTML の片道変換だけでもできればたいしたもの
>>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)
>>904 おお〜タートルグラフィック面白いですー
有難うございます。
>>893 Webプログラミングだったりオライリーのデータマイニング本とか言語解析本とか読みたい本とかないの?
厨二みたいなタイトルの方を言えよ
>>906 残念ながら持ってないです。
なにかおすすめの本ありますか?
それは自分の興味のある本にした方が良いと思うが・・・集合値プログラミングかな〜
>>909 集合値プログラミング・・・(´Д`)??
あ、そういえば最近猫でもわかるネットワークプログラミングを尼で買いました。(Cもやってるので)
buzztterみたいなのって集合知プログラミングのカテゴリですか?
とりあえず必要なモジュールは入れたんだよな?
>>913 必要なモジュールってなんですか?
そもそもモジュールってなんですか?
what it needs module? what's the 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? >what it needs module? www
>>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
ってなってダメだった
>>919 そんなの試さなくていいから初心者向けの本一冊買ってきて嫁
そんなレベルだっていうなら3系入れた可能性もありえるな
パイソンってオープンソース(?)だっけ?? 作ったスクリプトは公開しなきゃいけないとかいうやつ?? 別に公開したくないわけじゃなくて 公開するんならどこで公開するんだろうって思ったわけで。
くだらんレスをしたことを先に後悔しろよ
オープソンースってなに
先頭に数字があるファイルをimportできないのは仕様ですか?
仕様を確かめる気もしないから適当だけどたぶんそう 大抵のプログラミング言語で名前の先頭に数字を使うのはご法度
なるほど。ありがとうございます。
数字なのか区別が不可能だから 他言語も同様に宣言や命令文でやっても無理
O とか l を先頭に汁
それはちょっと
相互変換できました・・・ import urllib.request print('URLを入力してください。') url = input() print('保存場所を指定してください') path = input() urllib.request.urlretrieve('url', 'path') パスのファイル名の拡張子にdatを入力したらhtmlをdatに変換できます。 ・・・こういう意味じゃないですよね
No, off course.
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ファイルではありません。')
あれ?HTMLからDATに変換するときにelse文が出ちゃう。 DATからHTMLはうまくいくのに・・・?
困りました python3で辞書を作りました dict = {'hoge':huga,・・・} で、keyを文字列として取り出したいのですが dict.keys()
途中で書きこんでしまった失礼 以下続き dict.keys() #dict_keys(['hoge',・・・]) このdict_keysからいかようにすれば文字列が取り出せますか?
>>> x=dict.keys() >>> type(x) <type 'list'>
日記はちらうらで
941 :
937 :2011/01/08(土) 06:33:27
解決したっぽいです list(dict) #['hoge',・・・] list(dict)[0] #'hoge' 解せぬ・・・
>>> d = { 'hoge': 1 } >>> d.keys() dict_keys(['hoge']) >>> for key in d.keys(): print(key) hoge
あ〜それでよかったのか 実質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() これ実行してもコピーされないんですが、何故ですか?(´・ω・`)
エラーが出てないかコンソールから実行してみたら?
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
>>946 プログラムの一番最初に
# -*- coding: cp932 -*-
を入れとけ
948 :
デフォルトの名無しさん :2011/01/08(土) 15:35:35
>>947 おお、ありがとうございます
見事に実行できるようになりました
パスに日本語が含まれてたからエラーが出てたんですかね
949 :
デフォルトの名無しさん :2011/01/08(土) 17:09:37
いやそれbdist_wininstでくっつくインストーラーのバイナリに埋め込まれてる X:\Python2X\Lib\distutils\command\wininst-*.exe ね
ショートカット作るの面倒くさいんだな
953 :
デフォルトの名無しさん :2011/01/08(土) 22:23:07
pythonの標準のモジュールは全てスレッドセーフでしょうか? threadingとHTMLParserモジュールを一緒に使っているんですが、スレッドの数を増やすと 時々HTMLParserが処理するデーターが重複・混線してしまい、どうやらスレッドセーフじゃないように思える… 自分のプログラミングミスかもしれないのだけれども、一般的にどうなっているのだろう… python-2.5.2をLinux上で使っています。
pyGTKがPython 3に対応する予定はあるのですか?
> 2009 Go 瞬間風速でも競ってるのか
2回目受賞した言語ってpythonが初めてなのか
去年なんか変わった出来事ってあったっけ?
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
for i in o: print getattr(hoge, i)
テキストファイルに 「あ***お」という文字列を書いて保存しました。 このテキストファイル内の、「***」の部分を「いうえ」に 置き換える方法が分かりません。 f = open("aiueo.txt",r) r = f.read() s = r.find("***") s.replace("*****","いうえ") f.close ↑こんなのを試してみましたが、ダメでした・・・。 どうしたら出来ますか。
# -*- coding: cp932 -*- r = open('aiueo.txt', 'r').read() w = r.replace('***', 'いうえ') open('aiueo.txt', 'w').write(w)
>>963 ありがとうございます、出来ました。
最後writeしないとダメなんですね。
>>964 ありがとうございます、カウント引数知りませんでした。
datetimeをunixtimeに変えるにはどうしたらいいでしょうか?
おっさんにもわかるPYTHONの ”ウィンドウを表示するために--クラスを作成する” で >> self.wTree.add_from_file(os.path.dirname(os.path.abspath(__file__))+"/"+self.gladefile)にて glib.GError: root 要素が間違っています: 'glade-interface' が出るんですがどうしたらいいか助けてください
ぱいそんはおもしろいなあ
#!/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で入力した文字列が入るようにする仕組みを作って ボタンを押して実行すると、入力したファイルが作成されるようにしたいのですが どうしたら出来ますか?
e.get()で文字列が得られるようだから e = tk.Entry(f) def openTxt(): filename = e.get() でどうかな
Pythonの付属のモジュールの説明が羅列してある本ってない?
>>> 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を使っています。
980 :
978 :2011/01/12(水) 02:20:31
>>979 添付いただいたコード実行してみました。同じ結果…スレッド関係ないですね…ありがとう。
__init__の外で array = [] とするのと、__init__の中で self.array = [] と書くのは同じ意味と思っていたのだけど、違う操作なのかな?
__init__の外で初期化すると別のインスタンス間でも値が共有されうのかな?
クラスってこういうものなんでしょうか?
>>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
2.5ってことはGAE絡みかな? どうせHTMLParserだって正規表現使ってるんだから HTMLを処理するなら自分で書いたほうが早いし その方が堅牢
985 :
978 :2011/01/12(水) 02:47:07
>>981-983 threadingとHTMLParserの共用が悪いのかな?でも標準のモジュールだしな??とか考えてたんですが
もっと基本的なことでした。インスタンスごとに独立してない、クラス属性 なるものがあったんですね…
どんな場合に使うものなんだろ…とにかく解決して勉強になりました。理解できたと思います。
聞いてみて良かった。ありがとうございました。
>>984 使ってるLinuxのディストリビューションの安定版が配布してるpythonバイナリーが2.5なんです。
いつかパーサーを自分で書けるぐらいになりたーい…
Pythonプログラマになりたい高校生です。 僕にPythonのプの字も分からない人にお勧めの参考書籍を教えてください。
>>985 debianかな?
lennyは2.5だね
ちょっと前までは2.4だったし…
>>986 どうして素直に「みんなのPython 改訂版」柴田淳著 ソフトバンク 定価本体2800円を
教えてあげないのかな?
自信を持って勧められるほどの本が入門レベルにないからだろう
確かに。 初めてのPythonも今ひとつだし
他の言語の経験はあるのかな?
>>994 自演好きの著者だから一番に薦めるのは同意しないけど
ゴミは言いすぎ
>>991 「初めてのPython」はUNICODEっていうか日本語の扱い方についての記述が古いよね
>>998 古いっつーか間違ってるんじゃないかとさえ思える
>>986 今ならオンラインでチュートリアルを検索すれば大体間に合う
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。