1 :
デフォルトの名無しさん :
2014/01/02(木) 12:52:08.79
|....,,__ |_::;; ~"'ヽ | //^''ヽ,,) | i⌒" | ∀`) < 誰もいない きのこるならいまのうち |⊂ | ノ _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" |( ´∀`) < きのこ のこーのこ げんきのこ ♪ |(ノ |つ | | ⊂ _ ノ ""U _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" (´∀` )| < エリンギ まいたけ ブナシメジ ♪ ⊂| (ノ | | | ヽ _ ⊃ .U"" | | ミ | ミ サッ! | ミ |
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘
いちおつ。規制厳しいね
7 :
デフォルトの名無しさん :2014/01/02(木) 13:14:54.45
>>7 単語と接続詞が多すぎて全く意味不明だな
スタックのことだろうというのはIT畑の人なら雰囲気でわかるが…
もう少し短くスマートな文を書こうという気はないのだろうか英米人は
すでに2時間黙ってるけどどうしたの?癇に障った?ねえ黙ってないで答えてよ。黙らなくていいよ。黙る気ないでしょ?無理しなくていいんだよ。黙らなくていいんだよさあさあさあ
何やってんだかw
新年早々ね
スレが過疎なのは Pythonがあまりにも完璧・使いやすすぎて 語る必要もないということなのだろうな 良きことだ
それじゃあ質問 今居る関数の、関数オブジェクトを表している特殊変数ありませんか? 下記のような時 __self__ みたいな特殊変数があると this = hoge_hoge_fuga_fuga しなくて済むのだけど def hoge_hoge_fuga_fuga(): this = hoge_hoge_fuga_fuga if 'x' not in this.__dict__: this.__dict__['x'] = 100 this.x += 1 print(this.x) hoge_hoge_fuga_fuga() hoge_hoge_fuga_fuga()
>>13 特殊変数はない。スタックフレームから参照する方法はあるけど、いろいろな状況での利用を考えると面倒なのでお勧めしない。
目的によって異なるけど、考えられる代案はこんなとこ
関数定義時に関数オブジェクトを参照し属性を設定する -> デコレータが使える
値を持つ、呼び出し可能なオブジェクトを作りたいなら __call__ を調べてみよう
クロージャ的な用法(関数内にデータを内包したい)なら、ジェネレータにするといい。@see also itertools.count
ideone.com/mFBFqg
すみません、初心者なんですが以下の日本語部分がすべて文字化けしてしまいます。 .pyファイルを秀丸などでutf-8nで保存しても次開くとSJISになってしまっているのでそれが原因でしょうか? 解決方法を教えてください。。 # -*- coding: utf-8 -* import urllib2 from BeautifulSoup import BeautifulSoup url = "YahooTOPのURL" soup = BeautifulSoup(urllib2.urlopen(url).read(), fromEncoding='utf-8') print soup
>>14 ありがと。無いなら諦めるw
使用目的は、単に関数内スタティック変数として使うため。
入力と結果が1対1で対応してる処理が重たい関数で、
結果を辞書にキャッシュさせるのにスタティック変数は良く使うので
>>15 そのurlって実在するの?
日本語を含むurlなんて聞いたことがないんだが
>>15 文字列前にuをつけてみて
str型ではなくunicode型じゃないとうまくいかない
>>16 横からだけど、そういうことならグローバル直下に辞書をおくといいよ
python3だったらfunctools.lru_cacheをつかうのもいいよ
>>15 >.pyファイルを秀丸などでutf-8nで保存しても次開くとSJISになってしまっているのでそれが原因でしょうか?
ファイルに日本語がなくてASCIIだけだったら、エディタの文字コード判別がデフォルトのSJISとみなしているんじゃないかな。ソースに日本語のコメント入れて保存してみそ。
それでこれは問題の文字化けとは多分関係ない。
yahooトップページって文字コードutf-8だっけ?その辺が怪しそうな気がする
>>17 URL規制で書けなかったので日本語にしてました
>>18 soup = unicode(soup.prettify(), soup.originalEncoding)
すみません、色々調べてこれ入れたらできました!
>>19 あーSJISのままなのはそういう意味だったんですね。。スッキリしました。yahooはutf-8でした!
皆さんありがとうございました
>>15 print soup.decode('utf-8')
こうかな?
>>21 それだとエラーでました。
TypeError: 'NoneType' object is not callable
>>16 そういった用途なら functools.lru_cacheに+1
スタティック変数について、他の代案も紹介しておくと、
グローバルの代わりにデフォルト引数に辞書を入れて、スタティックな領域として使う方法もある
注意点として、Pythonではデフォルト引数の評価タイミングが関数定義時なので、
他の言語からの人がコードを読んだ時、解りにくくなるという懸念はあるけど、
キャッシュに使う辞書を引数に与えられるので、関数の単体テストはしやすくなります
b'2966'を整数型の2966に直すにはどうしたらいいのでしょうか
25 :
24 :2014/01/03(金) 02:18:58.97
>>24 int(b'2966'.decode('utf-8'))
かなあ?
27 :
24 :2014/01/03(金) 02:33:54.86
int(b'2966')だけじゃだめなのか
29 :
24 :2014/01/03(金) 02:42:01.88
30 :
デフォルトの名無しさん :2014/01/03(金) 07:52:37.85
pythonを2.6から2.7へバージョンアップしたら インストールしたモジュール使えなくなったんですけど これは参照している場所が違うからでしょうか OSはMACです
>>18 >>23 ありがと
標準ライブラリにキャッシュ機能を提供してくれるものがあったとはPythonすげー
デフォルト引数に辞書の方法は、簡単で便利ですね
ja.wikipedia.org/wiki/Flask 軽量ウェブアプリフレームワーク Flask の解説で、 以下のサンプルコードは、ルートパスにアクセスすると "Hello World!" を表示するだけのアプリケーション from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run() ↑こんなのがあります。この appオブジェクトはどうして hello() の存在を認識できているんでしょうか? どうか解説をお願いします。 @〜 は関数アノテーション?、これもよく分かっていません。
34 :
32 :2014/01/03(金) 18:54:01.59
class App: def __init__(self): self.dic = {} def route(self,key): def proc(fun): self.dic[key] = fun return proc myapp = App() @myapp.route("/") def foo(): return "Welcome!" @myapp.route("/menu") def foo(): return "Sorry, Japanese Only!" myapp.dic["/"]() => "Welcome!" myapp.dic["/menu"]() => "Sorry, Japanese Only!" ありがとうございます。ほぼ理解できました。
そんな彼に忍び寄る恐ろしい罠
>>30 まずそのモジュールの2.7用が出てないかじゃないでしょうか。
num = 10 self.board = [[0]*num]*num for i in board: for j in i: j = 1 こんな風にやっても案の定書き換えられてないんですけど! リストを書き換えるスマートな方法を教えて欲しいんですけど! 盤面のオブジェクトを作って色んな書き換えるメソッドを呼び出して何度も書き換える予定なんですけど! とりあえずライフゲーム作るんですけど!
40 :
デフォルトの名無しさん :2014/01/08(水) 15:25:06.10
http://pastebin.com/Cba1PTZg こういうのとか
>>> import test
>>> f = test.Foo(3)
>>> f.update_list(3)
>>> print(f.get_list())
[[3, 3, 3], [3, 3, 3], [3, 3, 3]]
41 :
39 :2014/01/08(水) 16:09:58.94
>>40 ありがとうございます
map関数の使い方を勉強してきます
a = [[0]*3]*3 print(a) a[1][1] = 1 print(a) の実行結果が [[0, 0, 0], [0, 0, 0], [0, 0, 0]] [[0, 1, 0], [0, 1, 0], [0, 1, 0]] になります 期待してる結果は [[0, 0, 0], [0, 1, 0], [0, 0, 0]] です これは一体何が起こっているのでしょうか 助けてください Version : 3.3.3 Version tuple: ('3', '3', '3') Compiler : MSC v.1600 32 bit (Intel) Build : ('v3.3.3:c3896275c0f6', 'Nov 18 2013 21:18:40')
43 :
デフォルトの名無しさん :2014/01/08(水) 17:35:05.69
ちなみに、python2と3でmap関数の返り値違う python2はリスト型 >>> type(map(add, a)) <type 'list'> python3はmap型 >>> type(map(add, a)) <class 'map'> map型のイテレータは一度処理終わったら、もどってくれないから注意 >>> b = map(add, a) >>> list(b) [2, 3, 4] >>> list(b) []
>>42 参照だから
>>> id(a[0][1])
139713178044032
>>> id(a[1][1])
139713178044032
>>> id(a[2][1])
139713178044032
[0]*3
最後の行は無視して
>>42 あなたの希望は以下で満たせるはず。
後は自分で頑張って勉強して、それでも分からなければまた聞きに来て。
>>> a = [[0] * 3] * 3
>>> print(a)
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> for x in a:
... print("id(x) =", id(x))
...
id(x) = 140290763245184
id(x) = 140290763245184
id(x) = 140290763245184
>>> a[1][1] = 1
>>> print(a)
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
>>> a = [None] * 3
>>> for i, x in enumerate(a):
... a[i] = [0] * 3
...
>>> print(a)
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> for x in a:
... print("id(x) =", id(x))
...
id(x) = 140290763245544
id(x) = 140290763244464
id(x) = 140290763245184
>>> a[0][0] = 1
>>> a[1][1] = 1
>>> a[2][2] = 1
>>> print(a)
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
47 :
42 :2014/01/08(水) 18:13:05.04
48 :
42 :2014/01/08(水) 18:17:03.24
リストの初期化の仕方で参照するところが変わるんですね 完全に嵌ってました
あとはリスト内包表記使うとか >>> a = [[0 for row in range(3)] for row in range(3)] >>> a[1][1]=1 >>> a [[0, 0, 0], [0, 1, 0], [0, 0, 0]]
ライフゲームってDemoに有ったような気がして、探してみたけど、 ソースから入れないと入らないのかな。./Tools/demo/life.py 替わりにこんなの見つけた # タートルのデモ > python3 -mturtledemo # tkのデモをpythonから実行 from tkinter import Tk tk = Tk() tk.eval("source c:/Python33/tcl/tk8.5/demos/widget") tk.mainloop()
>>> a=[1,2,3,4,5,0] >>> [(i, x) for i, x in enumerate([x for x in a if x >= 3], start=1)] [(1, 3), (2, 4), (3, 5)] こういう風に、リストから条件を満たす要素だけ抜き出して 連番を付与してタプルのリストを作る目的がある しかし、入力がリストではなく以下のようなテキストファイルの場合 1 2 3 4 5 0 enumerateの行にファイル読み込み処理をぶち込んでコードを短い ままで済ますことは可能だろうか? 調べてみたのだが、ワンライナーでファイル処理を行う例が見つからなかった
>>52 自分も初心者だけど
f = open('data.txt')
[(i, x) for i, x in enumerate([x for x in map(lambda s:int(s.rstrip('\r\n')), f) if x >= 3], start=1)]
>>53 そう
スクリプト言語の用途として
テキストフィルタ的なものはよく出会うので
ファイル処理を短く済ます定番句があると
楽だなあと思う次第
>>54 おおっと書いたとたんにレスが
サンクス
そのopenも一行にまとめてしまえないだろうかという話
じゃあ… [(i, x) for i, x in enumerate([x for x in map(lambda s:int(s.rstrip('\r\n')), open('data.txt')) if x >= 3], start=1)]
>>55 with open('data.txt') as f: l = []
で一行にはなるけど,短くはむりぽ
>>57 カッコだらけなんだけど、インデントで書けないものか....
>>59 1行で書きたいのか複数行で書きたいのどっちなんだよw
61 :
デフォルトの名無しさん :2014/01/11(土) 23:15:42.68
リストの値をそれぞれ総当たりで含まれるかどうかをチェックして、含まれていれば削除したいんですがどうやればいいでしょうか? list['abc','abcd','bcd','bbt','yyf','zat']を list['abcd','bbt','yyf','zat']にしたい for s in range(len(list)): x = list.pop() for k in list: if not x in k: list.append(x) これだとうまくいきませんでした
>>62 リストの中の要素が重複してないならset使ったほうが楽かも
l = ['abc','abcd','bcd','bbt','yyf','zat']
k = ['abc','bcd']
egg = list(set(l) - set(k))
あ,どうせ消すんだから重複関係ないか・・・
65 :
デフォルトの名無しさん :2014/01/12(日) 00:15:57.50
PythonってRubyのRakeみたいなビルドとか自動化に使えるスクリプト ツールってあるの?
GYP
Sons
x Sons o SCons
awkみたいな行に対して処理をする起動オプションはない。 よくあるファイル処理のスクリプトはfileinputモジュール使う sedのようなinplaceなファイルの書き換えも支援してくれる。 ワンライナ自体python向きではないけど、一応短くしてみると ファイルから数列を読み込むのは、 intは前後の空白文字取り除いて変換してくれるので map(int, open("data.txt")) で済むよ。 [(i,x) for i,x in enumerate(...)] は list(enumerate(...)) 用途によってはlist()も不要。
Pythonでコーディングされてるオープンソースのソフトってどんなのがあるの?
全くありません ゼロです
ゴミコードがいくら沢山集まっても、それはゴミの山である ―カーニハン―
>>62 pythontutor.com/visualize.html
ここにコード書いてステップ実行すると、
1ステップ毎に変数やリストのデータがどのように変化するか表示してくれるので解りやすいよ。
同じリスト内の重複を取り除くのか、2つのリストから差分を除くのか
題意が読み取れなかったけど。リストで順序を保つなら collections.OrderedDict.fromkeys(xs).keys()
>>62 import __builtin__
list = ['abc','abcd','bcd','bbt','yyf','zat']
gomi = []
for i in range(len(list)):
for j in range(len(list)):
if i != j:
if list[i] in list[j]:
gomi.append(list[i])
break
print __builtin__.list(set(list) - set(gomi))
>>62 L = ['abc','abcd','bcd','bbt','yyf','zat']
k = ['abc','bcd']
for i in range(len(L)-1, -1, -1):
if L[i] in k:
del L[i]
print(L)
含まれるって文字列中にって事だったのか.これで合ってる? src = ["abc", "abcd", "bcd", "bbt", "yyf", "zat"] dst = [x for x in src if all(not x in y for y in src if x != y)] print(dst)
not any にした方が効率よかったかも dst = [x for x in src if not any(x in y for y in src if x != y)]
>MozillaのNathan Froyd氏は、Szorc氏の主張はソフトウェアを他の人々に提供する側の視点が欠けていることを指摘している。 >ユーザーがアップグレードを自由に行えるとは限らず、新しいバージョンで削除されたAPIを必要としていることもあるし、 >新しいバージョンで動作するようにコードを修正してテストするのは手間がかかる。 これ何の冗談だよ クソいラピッドリリースをFireFoxに導入しくさってくださりやがりましたMozillaお前がその発言すんのかよ コブラに噛まれて死ね 5回死ね
ワロタ
>>82 src = ['abc','abcd','abcd','abcd','bcd','bbt','yyf','zat']
↑こんな風に重複したものがあると残るからインデックスで比較するのがよさげ
dst = [x for i,x in enumerate(src) if not any(x in y for j,y in enumerate(src) if i!=j)]
多重ループ出来るの今日初めて知ったthx
87 :
85 :2014/01/12(日) 19:25:20.62
ごめん間違い、インデックスだけじゃ無理か
dst = [x for i,x in enumerate(src) if not any(x in y for y in src if x!=y) and x not in src[i+1:]]
>>88 自分のプログラミングレベルだと、その内包表記の詰め込み具合はきつい
>>85 リスト要素の重複は、予め取り除いてから篩いに掛けた方がいいかな。
ループの回数も抑えられるし。
92 :
82 :2014/01/12(日) 20:44:55.26
展開するとこんな感じ dst = [] for x in src: for y in src: if x in y and x != y: break else: dst.append(x) ここのelseは、ifではなく、内側のforに対応するelse。breakで抜けなかった時に実行されます。 結果から重複を取り除く場合は、for y の前に if x in dst: continue で対応。
ttp://ideone.com/lRddti os.path.isfileとos.path.existsがうまく行きません
存在しているのにFalseになったり
存在しないのにTrueになったりします
なにか勘違いしているところありますでしょうか?
python33です
94 :
93 :2014/01/12(日) 22:41:32.79
すいません なんでもなかったです・・・
#set(src)の要素のうち、他のどの要素の一部(部分文字列)になっていないもののリスト(順番が変わっちゃうけど) #src = ['abc', 'abcd', 'abcd', 'abcd', 'bcd', 'bbt', 'yyf', 'zat'] #なら dst = ['abcd', 'yyf', 'zat', 'bbt'] dst = [x for x in set(src) if all(x not in y for y in set(src)-set([x]))] 内包表現は書いた本人ですら後で分んなくなることがあるから困るけど好き。
>>93 パス(fpath)じゃなく数値(a)を渡してる
>>92 オリジナル(
>>82 )が関数型の内包表記で書かれているんだから、
わざわざ手続き型で書き直すでのはなく、
まず最初は以下のように展開するのがPythonらしいと思ふ
dst = [
x for x in src
if not any(
x in y for y in src
if x != y
)
]
繰り返し中での一時オブジェクト生成は、極力排除した方が実行効率良いよ。
#
>>62 from collections import OrderedDict
unique = lambda xs: OrderedDict.fromkeys(xs).keys()
src = unique(['abc', 'abcd', 'abcd', 'abcd', 'bcd', 'bbt', 'yyf', 'zat'])
dst = [x for x in src if not any(x in y for y in src if x != y)]
99 :
62 :2014/01/13(月) 03:07:06.89
>>62 です
うわこんなにレスをいただいてしまってなんかすみません・・・
質問の後にmapや再帰?でやってみてたんですが上手く行かず困っていました
いただいたレスを一つずつ試して見ます
ありがとうございました!
特定のフォルダを五分おきくらいに見て、新たに作成されたファイル名を 把握するっていうサーバー的アプリを作りたいが、監視でCPU100%になるのを 防ぐためには、スレッドという機能を使えばよいのかな? 何をしたいかというと、クライアントPCからサーバーのフォルダにファイルを コピーすることで仕事のトリガーとするシステムを妄想しているのだ WEB系の技術でやるべきものだろうけど、そっち系の知識がゼロなので
>特定のフォルダを五分おきくらいに見て、新たに作成されたファイル名を
>把握するっていうサーバー的アプリを作りたい
で運用に支障がでるほど、負荷がかかるとは思えない
サーバ的ってあるけどクライアント的な部分はどいういうものなの
>>100 が作ろうとしてるものと、答えようとする人間の想像するものが違ってるくるかもしれないから
ディレクトリ内のファイル数とかも含めてもうちょい詳しく書いたほうがいい
102 :
デフォルトの名無しさん :2014/01/13(月) 10:05:06.45
すぐ作れるんだし作ってから色々と試してみる方がいいような
>>100 time.sleep で大丈夫だと思うけど
そういったシステムなら、ファイルシステムのイベント通知が使える。
watchdogというクロス・プラットフォームなライブラリがあるよ。
104 :
100 :2014/01/13(月) 10:14:21.71
101読んで、再考 もしサーバってのがサーバ・プログラムのプロセスを指してるんだったら、 シングル・プロセスなサーバのプロセス内でsleepしちゃまずいか。 バックグラウンド・ジョブを想定してた。 でも、トリガにwatchdogは使えるので、後は適当なプロセス間通信の方法調べてがんばって。
番号間違えた。104の名前欄訂正 100>103
>>101 妄想を書いてみる
これらを全部PythonとWindowsのバッチファイルでやろうという試み
Web系って覚えることが多すぎて自分には無理
(ちなみに自分はただの事務員。金がないからお前が作れと言われた)
クライアントPCの仕様
・リクエスト内容を示すテキストファイルを作る
・Windowsのネットワークドライブ経由、バッチファイルで
サーバーのリクエスト受付フォルダに上記ファイルをCOPYする
ファイル数など
・クライアントPCは20台くらい、PCごとに一日10リクエストくらい、計200個のファイルを処理
・リクエストタイミングは不定
サーバーの処理内容
・データベースを持ち、リクエストに応じ検索・加工をした結果をCSVファイルに吐き出す
サーバーで処理した結果の返し方
・サーバー上にあるクライアントPCごとの返信専用フォルダに結果ファイルを格納
・クライアントPC操作者は頃合いを見て上記フォルダをエクスプローラで覗き持って行く
妄想ならチラシの裏にでも書いてろ
a = 0xd b = 13 を区別する方法ってありますか? 0xdを評価するときに,13になるのでしょうか?
ないよ 16進数を理解できてないの?
pyDevを使ってます 変数名の候補が出てこないんですが どうしたら出るようになりますか? 例えば name = "a" na ↑ここで name が出てほしいんですけど何も出ません
113 :
111 :2014/01/14(火) 14:53:31.32
自己解決しました すみません
とりあえずはいろんなデータを分析・解析したり、 必要なデータをすぐにアウトプットできるようなプログラムを作ってみたい とりあえず入門としてPythonスタートブックっていうのを読んでみたんだけど、 次の参考書としておすすめの本ってありますか?
PythonじゃなくてRの本にすればいい
Pythonの勉強しておけばあとあといろんな応用がきくかなと…
NumPyのマニュアルを読めばいいよ
118 :
デフォルトの名無しさん :2014/01/15(水) 22:57:01.19
オレンジ色の本(本の名前失念)
O'ReillyのPythonによるデータ分析入門
全くの初心者で申し訳ないのですが __init__のクラスの初期化って一体何のために必要なんですか?
インスタンス生成時にそのクラスを使う上で必要なオブジェクトを受け取るため そのクラスを使うほうからしたら、あとになってからこれ要るよって言われるより 最初に言われたほうが書きやすい >>> rq = urllib.request.Request() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: __init__() missing 1 required positional argument: 'url'
import sqlite3 con = sqlite3.connect('a.db') with con: ここでロールバックしてwithを抜けるスマートな方法って何かない? 例外を投げてwithの外側で捕捉する方法だと インデントが深くなるからそれ以外でお願いします。
124 :
123 :2014/01/17(金) 01:02:20.10
書き忘れましたがバージョンは2.6でお願いします
自分でrollback呼んで抜ければいいだろ・・・ 頭固いぞ
ロールバックがどうのといってるけど、たぶん質問の本質はそっちじゃないんだと思う Q. withブロックを途中で抜けたい こうでしょ? A. 今のところbreakのような安直な方法はないので 自分でwhileやdefみたいなブロックを作ってください
あ、当然インデントが深くなります インデントが深くなるのが嫌ならPythonは使わないことです
インデントが深くなるのを抑制する用途にも with は使えるよ。 2.6だと contextlib.nestedが必要かも知れないけど、with に複数のcontext managerを列挙できる。 >with を途中で抜ける 例外を使う。withの外に例外を伝えたくなければ、特定の例外を捕捉するcontext managerを併用する。 @contextlib.contextmanager def pass_exc(*exc_types): try: yield except exc_types: pass class BreakContext(Exception): pass with pass_exc(BreakContext), con: raise BreakContext
129 :
128 :2014/01/17(金) 12:46:21.22
sqlite3.Connectionの__exit__では、例外があったら rollback なければ commit を呼ぶので、 上の例では con を先にするか後にするかで、例外が伝わるかどうかが変わってくる点に注意が必要。 その辺の制御の流れは、少し判り辛いので、 望みの振る舞いをするトランザクションのcontext managerを書き下す方が良いかもしれない。 2.6のwhat's new や PEP343 にトランザクションのcontext managerの実装例が載ってます。
関数はwith の外に置けばインデント深くならないけど、 この場合、例外を使わずrollbackするには明示的に呼ぶ必要があり def do_something(con): return con.rollback() with con: do_something(con) スマートさに欠ける点は、これだとwith抜けるときにcommit()も呼び出される。 rollback直後でinTransactionフラグがfalseになってるから、 データベースにCOMMITは発行されないけど。ここは commitメソッドの実装依存。
すみません。教えて下さい。 以下のように3つ関数があって、test1⇒test2⇒test3の順に処理を流したいのですが、 test1でえられたitemをtest2で使えるようにして、test2でえられたlistをtest3の処理の中で使用したいのですが どういう風に記述したらいいでしょうか?初歩的ですみません.. def test1() ... return item def test2() ... return list def test3() # #実行 test1() test2() test3()
>>131 def test1()
...
return item
def test2(i)
...
return list
def test3(l)
i = test1()
l = test2(i)
test3(l)
関数型っぽいの def add(n): return n+1 def multiply(n): return n*10 def divide(n): return n/2 num_list = [1,2,3] added = map(add, num_list) multiplied = map(multiply, added) divided = map(divide, multiplied)
>>135 プロファイル取ってみればわかると思うけど、
Pythonで関数型っぽいコードは大抵、実行効率が良くないよ。
関数型の概念等はとても有用だけど。関数型の言語に比べると処理系の実装が適してない。
python流(?)に書いた方が保守もしやすく(Pythonでは)効率良い
[(x+1)*10/2 for x in [1,2,3]]
mapとかfilterを上手く使えるとちょっと世界が広がる感じがするよねw いまだにreduceはピンとくる使いどころがわからないけど
>>137 reduce使った関数合成と、無理やり使ってみた感のある応用例書いてみた。興味あったら、どぞ。
ideone.com/vN8PuJ
reduceはリストを順に処理して、最終的にひとつの要素に収束するような処理に用いるのだけど、
Pythonでreduceを使う局面は、普通にforループの手続きで書いた方が良いよ。
Pythonでもreduceの結果は一つの要素に限らないんじゃないの? 原始帰納関数はすべてfold(reduce)で再実装できるというのがミソ
>>139 (Pythonの)reduce関数の実装を指してのことならyes
初期値を取れるから、foldのようにも使える。
141 :
デフォルトの名無しさん :2014/01/19(日) 02:50:12.78
今日の0時のdatetimeを取得したいのですがどうすればいいでしょうか?
スクリプト実行中に発生したエラー・例外をloggingでファイルに書き出したいです 検索するとだいたい以下のようなサンプルが出てきます try: ここでエラー発生 except: logging.error(~~) これだとtryでキャッチしている箇所でないとファイルに書き出せません そうではなく、どこでエラーが起きても全てファイルに書き出すにはどうすればいいのでしょうか
全部tryにいれればいいじゃん(いいじゃん)
>>141 midnight = datetime.fromordinal(datetime.date.today().toordinal())
>>142 logging用途なら sys.excepthook はどう?
145 :
144 :2014/01/19(日) 05:10:30.55
訂正 モジュール名忘れてた datetime.fromordianl -> datetime.datetime.fromordinal
>>145 ありがとうございました。そのような便利メソッドがあることを知りませんでした。
ドキュメントを読みなおしてみます。
147 :
デフォルトの名無しさん :2014/01/19(日) 13:41:26.28
twitterのAPIを叩くためにpython-twitterを使ってみたんだけど、なぜかエラーが出まくりで、仕様変更で使えなくなってるメソッド がいくつかある模様。 tweepyの方は使いやすいですか?
148 :
デフォルトの名無しさん :2014/01/19(日) 15:03:05.45
自分はGitHubからDLしたtweepy使ってbot作りました。
twython 使ってる
150 :
デフォルトの名無しさん :2014/01/19(日) 16:55:29.79
python-twitterをちゃんとドキュメントに載ってるように書いてるのにエラーが出るとかわけわからんw
解決する気ないんなら自分の日記に書いてくれ
152 :
デフォルトの名無しさん :2014/01/19(日) 19:47:59.94
コード晒せるだけ晒せよって言わないのはなんかお約束でもあるんだろうか
unicodeとutf-8は違うよ
原因がはっきりしたようでめでたい
馬鹿には無理
157 :
デフォルトの名無しさん :2014/01/19(日) 22:10:15.58
2chはしょせん便所の落書き 自分の日記にも書けないようなことを書くとこだよ
158 :
デフォルトの名無しさん :2014/01/20(月) 00:00:05.16
自分には標準ストリームとかそのあたりの理解が足りないんだけど そのあたりの知識ってどういうところで学んでるの? 書籍とか?
「ふつうのLinuxプログラミング入門」で覚えたけど、 Web上のLinuxやプログラミング言語のマニュアル読めば十分じゃないの
>>158 標準入出力(stdin,stdout)等の事?プロセスの開始や環境変数の伝播等
カテゴリ的には「システム・プログラミング」
「POSIX」という共通の規格があるけど、細かい部分ではOS依存になるので、
より深い所に関心があるなら、各OS毎の情報を調べる事になります。
Linuxだとman、WindowsだったらMSDNとかになるのかな。
この辺の情報は、書籍でも大抵はC言語になると思う。
161 :
デフォルトの名無しさん :2014/01/20(月) 17:35:18.99
あ”あ”あ”!! Pythonの正規表現苛つく... 何なんだよ、コレ!? ワケが分からん
無理しないで分相応なツール使ってればいいのに 背伸びしても疲れるだけだぜ
Pythonでテキストブラウザ作ってみようと思ったんだけど、 そもそもああいうのはHTMLを一旦読み取ってタグやらを除去してるのか?
いや宇宙のどこかからデータを引っ張ってきて表示するだけだよ
Pythonの正規表現は引数の順番が他の言語と違ってて時々間違えるけど ワケ分からなくはないだろ
166 :
デフォルトの名無しさん :2014/01/20(月) 18:15:45.70
いや、俺の持ってるPythonの本とか全然詳しく書いてないから、 後方一致だとか、大文字小文字の無視とか訳が分からんかった PHPのpreg_matchみたいな簡単なのあればいいのに 文法が気に喰わん re.compile()した後にsearch()してgroup()して...とか めんどくさい
>>163 パーサを作って、タグや属性等はイベント・ドリブンで処理してる。
168 :
デフォルトの名無しさん :2014/01/20(月) 18:19:12.38
>>163 mechanizeってライブラリで簡単にできる例えば
<div>あ</div> ← こういう文字列から"あ"だけを取り出すのとか
自分で正規表現かく必要すらない
でもPythonからmechanizeを扱うには日本語資料少なすぎて難しいかもしれない
rubyからmechanizeを扱うなら資料沢山あるのだけど
>>166 正規表現よく使うなら正規表現リテラルのある Ruby のほうが向いてるかも
あと Python は re.compile() するのが面倒なら re.search() とかモジュールメソッド呼んでも構わない
Pythonのreモジュールでデリミタ変更したいんだけど、どうすればいい? シングルクォート、ダブルクォート以外にしたいんだけど 例えば、 pattern = r"正規表現" r = re.compile(pattern) m = r.search(str) が一般的だと思う
r"..." は raw 文字列って言って文字列の一種 r"\n" は バックスラッシュと n の二文字に解釈される 正規表現のデリミタではないよ
r"\"" がめんどいから r|"| みたいに書けないかって話だと思う perlやrubyの悪臭がするけど
三連クオートのRAW文字列使えばいいだろ pattern = r"""aaa"bbb""" 日本語ドキュメントあるんだし読めよ
PHP じゃないかなあと
>>172 そう、そういうこと
説明の仕方が悪かったね、ごめん
その文字列に、 〇〇以外の文字列が含まれているかどうかってのはどうやって判断すればいいの? 俺が馬鹿なのか全く思いつかない
〇〇の文字列を置換で除去した後に、何か残ってるか調べるのはどう
頭がいいと難しく考えすぎることがある。 アホは、○○を検索して見つからなかったら含まれていないと考えるw
単語単位なのか文字単位なのか、 重複する文字を許すかどうかで変わってくると思う。 "lolol".replace("lol", "") # 'ol' re.sub(r"lol", "lolol", "") # '' not re.match(r"^(AAA|BBB|CCC)+$", "CCCBBBAAAd") # True
180 :
179 :2014/01/21(火) 00:33:53.50
ごめん、re.subの引数の順番間違えた re.sub(r"lol", "", "lolol") # '' でした
Pythonの正規表現を本やWeb上で調べると、だいたい e = re.compile(pattern) r = e.search(str) if r is None: print("fuck you") else: i = 0 while i >= -: m = e.search(str, i) if m: print m.group(1) i = m.start() +1 と書いてる(後半は自分のやり方)
でも、あるサイトで r = re.search(pattern, str, flags) と書いてたんだけど、これでいけるの? 実際実行してみて上手くいったような気がするんだけど、 compileしなくてもいいのなら、連続で正規表現適用させる場合なんか、わざわざ冗長な上の書き方しなくて済むから楽だよね? この下のやり方で問題のある時、デメリットってあるの?
>>180 >>> re.sub(r"lol", "", "lolol")
'ol'
>>182 コンパイル済み正規表現オブジェクトは、Python2では100個、Python3では512個キャッシュされるので
re.search使ったとしても、毎回コンパイルされるわけではない
詳しくは /Lib/re.py のソースコード参照
ループ中で同じ正規表現を何百万回も使う場合など・・・
キャッシュから取り出す処理時間すらも削りたい状況ではcompileを使うべき
速度を気にしないなら可読性の良いre.searchでおk
ただしre.searchには、検索範囲を指定する引数はない
ディクショナリの順番って何順になるの?
>>185 Pythonの実装依存
順番をそろえたいなら for k in sorted(dic.keys())
188 :
デフォルトの名無しさん :2014/01/21(火) 15:26:29.05
py2.7 beautifulsoupでパースできなかった場合、 lに値が入らず下記エラーになります。 if (l == None): といった風に例外処理を書く事は出来るんでしょうか? エラーで処理を止めずに、エラーが出た事を取得したいのですが・・ 分かる方いらっしゃいましたら、お願い致します! f = open("test.html") s = BeautifulSoup(f) l = s.find("a")["href"] TypeError: 'NoneType' object has no attribute '__getitem__'
ごめん、また質問させて欲しいんだけど...
正規表現使用して、該当部分を表示するのではなく、
逆に削除して、その部分を抜いて表示したい場合どうすればいい?
>>181 で言えば、m.start()やm.end()で該当部分が出てくるけど(例えば123-184)、
その部分を抜いて表示するというやり方しかないのかな?
190 :
181 :2014/01/21(火) 16:30:30.41
訂正しとく i = m.start()+1じゃダメだね i = m.end()+1じゃないと じゃないと重複が大量に出てきてしまうし、処理速度が極めて遅くなってきそう
>>189 置換したいのかな?
s = "ab2c45d67e8fg"
print(re.sub(r'\d+', '', s))
192 :
181 :2014/01/21(火) 16:49:41.71
>>191 あ、そうか
俺バカだなぁ
str = str[0:m.start()-1] + str[result.end()+1:]
とかめんどくさいことしてた
ま、これでも出来ることは出来るんだけどね
どっちが処理速度が早いかは分からんけど
なんかPython触ってから他の言語で出来ることを複雑に考えすぎてるのか、混乱してるっぽい
とりあえず教えてくれてありがと
>>188 たぶんfindで見つからないときNoneが返るんでしょ?
a = s.find("a")
if a is None:
print 'エラーです'
else:
l = a["href"]
>>193 あー思い通りにいきました。ありがとうございます。
>>183 指摘thx 今度からtypoなくす為に、コピペにします
>>185 順序付辞書なら、collections モジュールに OrderedDict もあるよ。こちらは挿入順。
197 :
忍法帖【Lv=3,xxxP】(2+0:5) :2014/01/22(水) 17:58:01.18
直リン貼れなかったので、ちょっと自分の忍法帖確認してみます すみません
>>196-197 再現可能なサンプルデータぐらい用意したら?
URLじゃなくてそのまま食わせられるHTMLね
あと、ソース貼るならpastebin.com、codepad.org、ideone.comとかにしてくれ
>>196 チラっと見た感じだけど、正規表現パターンが原因でしょ
最初の pattern_url はいいが、残り2つは前後に .+ .* が付いてるから
1回で文字列全体にマッチして終了してしまうよ
他の言語ができるならテストを書きなされ
変に複雑な事してるけど、こんな感じでいいと思うけどなあ results = [] for m in re.finditer(r'''\bhref=['"]?([^"<>\s]+)''', html, flags = re.I): results.append(m.group(1)) if uniq: results = list(set(results))
>>196 tagRemoveのre.subを繰り返し呼ぶようなコードだけど、
一度で全て置換されるのでループは不要。
re.subn使えば置換個数を確認できます。
>>196 です
皆さん、色々とアドバイスありがとうございました
204 :
デフォルトの名無しさん :2014/01/23(木) 00:17:18.66
直リンク禁止されてるのでscheme部を省いてリンクします コード : pastebin.com/7YqtR23Q 空白行が除去できないのですが、これは自分の正規表現の書き方が悪いからでしょうか? それとも、pythonのコーディングが間違っているからでしょうか? 自分の結果では最初の20行は空白行が続き、21行目に" / "と言う文字が出てきます その後はまた暫く空白行が続きます これらの空白行を全部取り除きたいのですが... もしかしたらこのような面倒くさいやり方ではなく、関数などの利用で一気に除去できるかもしれませんが 検索しても見当たりませんでした アドバイス頂けないでしょうか?
Pythonの実行速度、たとえばfor文で何百万回も ループを回すような処理が遅くて困っています。 リスト内包表記とかmap関数とかjoin関数とかで 極力高速化しているものの、Pure Pythonでは 頭打ちの状態です。 CPythonやCython、PyPyなど、実装側で高速化する 方法を検討していますが、これといった決め手に 欠けています。 主な用途はNumPyを併用した科学計算や データの整形など、数値計算寄りです。 サーバアプリのような規模の大きいものではなく、 単一のスクリプトファイルを必要な時に叩くといった やり方がほとんどです。 sys、os、subprocess、numpyは必須。 できればscipyやmultiprocessingも使いたいです。 Mac/Win/Linuxいずれの環境でも実行できる必要が あります。 そして互換性や可読性の都合上、各実装に特化した コーディングは極力避けたいです。 各実装の得手不得手など、ざっくりとした内容で 結構ですのでご意見いただけませんでしょうか?
206 :
デフォルトの名無しさん :2014/01/23(木) 01:14:19.47
そこまでやるなら素直にRubyへ移行したほうが良いです。 そのままゴリ押ししても良いことないです。
>>204 正規表現を勉強する
検索ではなく公式のチュートリアルと標準ライブラリにざっと目を通す
2 タブをやめる
>>205 Cythonで十分だろう
なにが不満なんだ
>>205 つanaconda accelerate
>>205 PyPyは確かにCPythonより計算とか速いこともあるけど一長一短でそれだけな感が
Cythonは型指定でC/C++に迫れるけどそもそもCに変換してコンパイルしてるので
C/C++で書いたらいいじゃない感、PurePythonコーディングでなければ互換性がないのも…
numpy前提なら小手先のマルチプロセスより
pyopenclでも使ったほうが次元の違うレベルになるんじゃないかな
>>204 空白行を取り除く
print("\n".join(x for x in html.splitlines() if x))
PyPyは注意書きにあるようにPurePythonじゃないとエミュレーションで遅くなるし 俺は速度が必要な時はCython/Cだね Cで書いてCythonでGILを開放しつつ糊付け あとはスレッド作って回す
期待通りに動かないときはまず問題の切り分けをしようね。
>>204 このプログラムはURLを抽出するだけ?
import urllib.request
from bs4 import BeautifulSoup
url = "
http://hoge.com/hoge.html "
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html, from_encoding='cp932')
url_list = [link.get('href') for link in soup.find_all('a')]
print(url_list)
219 :
204 :2014/01/23(木) 13:29:44.81
皆さん、アドバイスありがとうございます
今から色々と試してみますが、前もって感謝の意を述べておきます
>>212 いえ、そうではなくて、自分の書いたスクリプトが正規表現が問題ではなく、
そもそもpython自体が問題だったかもしれないのでそこを確かめたかったのです
>>213 ありがとうございます
正規表現でなく、組み込み関数を利用して出来れば遥かに良いのでそういうやり方を教えていただけるとありがたいです
今ざっとやってみたところ、最初の部分の空白行は除去されていましたが、後ろの方はまだ残っているようです
暫く試行錯誤してみます
>>217 以前PHPを使ってDOMを利用してたときも同様の経験をしたのですが、
BeautifulSoupは補完してくれる事もあるようですが完璧ではなく、
HTMLのパースエラーが出ることがあり、汎用的じゃないとの決断を下しました
なので、自分でどんな構文でも処理できるようにしようと思いまして
おまえには無理
>そもそもpython自体が問題だったかもしれない すげえなコイツw
>>219 > いえ、そうではなくて、自分の書いたスクリプトが正規表現が問題ではなく、
> そもそもpython自体が問題だったかもしれないのでそこを確かめたかったのです
えっ?
頓珍漢な正規表現書いておきながら処理系のバグを疑うとかあまりにもひどい
とはいえその心情、理解できないわけではない。 技術途上の目覚ましい、比較的初段回においてそういった考えがめぐるのは分かる。 しかしそれを公然と言い仰せるとはいやはや大物の予感。
python本体のことじゃなくて、自分で書いたpythonの事だろ
>自分で書いたpython 大物が続々と現れますな
凄いな・・・ 用意されてるpythonをインストールして使うぐらいしか出来ないわ
全然面白くないぞ
処理系の言語の前に会話言語
何かこいつ嫌なことでもあったんだろうか?
>>219 スペースやタブのみの行も取り除くなら、これでどうかな。
print("\n".join(x for x in html.splitlines() if x.strip()))
全角スペース等があれば、別途対応が必要かもしれない。x.strip(" \t ") のように
後、HTMLを正規表現で処理するのは、例外的な状況への対応で面倒が多い。
ネストした要素や行儀の悪いHTML、正しいHTMLでも、閉じタグのない要素を取り除くとか。
タグの抽出等は、
HTML Tidyのようなフィルターを通してから、HTML/XMLパーサに渡して、XPATHで扱うのが手軽。
import lxml.html
url_list = lxml.html.parse(URL).xpath(r"//a/@href")
”超初心者”用のスレだから!スレだから!
>>232 た、たしかに、正直すまんかった
いかなる妄言も甘んじて生暖かい目で見守らねばならん
>>205 ツール選択の前に、示されてる高速化の手法に疑問があるのだけど、
組み込みのリスト使ってるのかな?
numpyの配列を扱ってるのなら、Pythonでforループや内包表記/mapで回したりせず、
速度を求めるなら、極力numpyの関数内で処理するようにコードを組み立てる事になります。
皆どのテストツール使ってる? 俺unittestしか使ったこと無かったけど、noseやpy.testのようなサードパーティ製も気になってきた unittestめんどくさいんだよな
ここは紳士的な人が一人か二人いることによって救われているなw
237 :
デフォルトの名無しさん :2014/01/23(木) 21:46:15.03
変態紳士しかいないけどな
初心者ならpython選んでも仕方ない
テストツールは...
>>235 旧unittest もしくは、各フレームワーク標準のもの使ってる。(twisted.trial)
機能的な利点があるわけではないけど、保守的な理由で。
ファイル一個で完結する場合は assertとdoctest
乗り換えるなら py.test かな。unittest/nose どちらでも移行が簡単そうだし。
241 :
デフォルトの名無しさん :2014/01/25(土) 13:51:51.24
PythonでPHPの@みたいにエラー制御するにはどうすればいいんでしょうか? PHPの@を付けるだけというようなものはないのでしょうか?
>>241 PHPの@演算子ってエラー制御というよりエラー抑制をしたいの?
Pythonだとtry使ってexceptでpassするしか無いんじゃないかな
言葉がまずかった...です、エラー抑制です なるほど、passしかないんですね
他にもあるよ
オブジェクト指向を最初に学ぶのに最適な言語はPythonだと友人に言われたのですが、実際どうなんでしょう? プログラミングの経験はJavaで電卓作った程度です
>>243 そういえばエラー抑制しか考えずにレスしちゃったけど
もし事前に検証可能ならPythonの論理演算子は短絡で最後に評価した値を返すから
result = validate and expression
のように簡潔に書け、高コストな例外発生をさせずに済む
あるいはdictのgetのようなそもそも例外を出さない方法があればそうするとか
or die的なものならexcept節でsys.exitやquit/exitを呼ぶとか
やっぱり例外処理になるのかな(quit/exitは標準入力も閉じる
>>245 入門言語という点なら悪くない選択だと思います…が
Pythonのオブジェクト指向は純粋な実装ではないので
Javaを触ったことがあるのならC#という選択も良いんじゃないかな?
興味本位ならsmalltalkかな
てかJavaやればいいだろうがよォ
>>245 Pythonを今後使っていきたいという明確な目的があるなら
Pythonでオブジェクト指向プログラミングを勉強するのは
悪くないだろう。
ただ、Javaの経験があるならJavaでもいいんじゃないかと
いうのが大多数の意見だと思う。
ここはPythonスレだし、Pythonistaが増えることは
大歓迎だけどね。
>>243 with文 で
>>128 のような contextmanager を使う。
例外のコストは、C++やJava等とは事情が違い、
事前にチェックするよりも、例外捕まえる方が効率よいケースがあったりするよ。
実際に例外が投げられるのは高価だけど、try/except ブロック自体はそれ程高くない。
pythonで多重継承って あんまりみたことがないけど 一般的に流行ってないのか python的に分かりにくいのかどっちなんだろ
一般的に流行ってないと思う
ある関数を30分毎に永遠に実行するみたいな処理はどういう風に書けばいいんでしょうか? メモリリークするからタスクスケジューラ等を使用するのがいいのでしょうか? 理想はコンパイルしたexeファイルを起動したまま間隔をあけて繰り返す、です。 初心者のためアドバイス頂けると嬉しいです!
それで目的が達成できるならタスクスケジューラでいいと思うがな
コードで書いても大した量じゃない
http://ideone.com/nhhhNN ところで、上のコードでは
while thread.is_alive(): time.sleep(1)
で待機してる
これをThread.joinでやろうとするとKeyboardInterruptが来ない
何でだよ
スレッドの中のtime.sleep(60*30)を for n in range(60*30) time.sleep(1) にすれば割り込みを拾えるようになると思います なんかそういう仕様らしいです
>>254 調べてもどういう事をやってるか全然わからないですが(time.sleep(1)とか)
subprocess.call('nslookup google.com')の部分に処理をいれたらいいんですね。ありがとうございます!
>>251 標準ライブラリとか例外クラスで普通につかわれてる
os.walk()を使って、あるディレクトリ(target/)以下に存在する「ファイル・ディレクトリ」の辞書を含んだリストを得たいです。 バージョンはPython2.7です。よろしくお願いします。┏○ ペコリ ・ディレクトリツリー target/ folder1/ folder11/ file111 file11 file12 folder2/ file21 file22 file1 file2 ・得たいリスト [ {’name’ : ’folder1’, ‘child’ : f1}, {’name’ : ’folder2, ‘child’ : f2}, {’name’ : ’file1’}, {’name’ : ’file2’} ] f1 = [ {’name’ : ’folder11’, ‘child’ : f11}, {’name’ : ’file11’}, {’name’ : ’file12’} ] f11 = [ {’name’ : ’folder1’, ‘child’ : f1}, {’name’ : ’file111’} ] f2 = [ {’name’ : ’file21’}, {’name’ : ’file22’} ] ※ 見やすくするために、f1, f11, f2 を変数で分離していますが、実際は辞書の中で展開されています。
>>205 亀だけどscipyにもweaveというインラインC/C++があるみたい
でもわざわざライブラリ使ったり組んだりするまでもない規模なら
ctypesが関数プロトタイプにアドレス指定できるということは
標準ライブラリだけでマシンコード実行できるじゃんと思い至ったんだ
ttp://ideone.com/l6QivM Hand Assembly Data Execution in Script略してHADES
デスマーチを彷彿とさせるね!というくだらない事を言いたかっただけですはい
ぐぐってみたら案の定同じような変態が居て笑った
>>258 叩き台書いてみた。
(※ あまりテストしてません。os.walkの走査する順序に依存してるかもしれない)
ideone.com/PHnCTP
こういった再帰で書くような処理をループで処理する時は、
データ構造のスタックの利用を考えるとうまくいくよ。
>>258 import os
def f258(path):
root, dirs, files = os.walk(path).next()
a = [{'name':name, 'child':f258(os.path.join(path,name))} for name in dirs]
b = [{'name':name} for name in files]
return a+b
def f258view(tree,level=0, space=" "):
for x in tree:
name = x['name']
if x.has_key('child'): name += "/"
print space*level + name
if x.has_key('child'):f258view(x['child'], level+1)
tree = f258("target")
f258view(tree)
>>258 辞書でなくてもいいなら、
3.4 で標準ライブラリに入る pathlib が、インストールすれば 2.7 でも使える。
def view_path_tree(root, level=1, indent=" "*4, _format="{}{}".format):
print(_format(indent*(level-1), root.name+"/"))
for path in root.iterdir():
if path.is_dir():
view_path_tree(path, level+1, indent, _format)
else:
print(_format(indent*level, path.name))
from pathlib import Path
view_path_tree(Path("."))
簡易expandコマンドを作りたいのですが、 'taro\ttanaka' この文字列中のTabをリスト内包表記でSpaceに変換できないでしょうか
[' ' if i == '\t' else i for i in s] 解決しました。ありがとうございました
Tkinterってどう発音するの?
L = [1, 2, 3] def odd(n): if n % 2: return n [i for i in L if odd(i)] Pythonで高階関数を実装すると、こんな感じ?
ティキンター
てぃーけいいんたーって読んでる 高階関数って fold とか map とかあのへんじゃないの
270 :
デフォルトの名無しさん :2014/01/27(月) 19:33:50.41
質問させていただきます。もしスレ違いでしたらごめんなさい PythonでOrangeをインポートして分析を行いたいのです。 データのtxtファイルやcsvファイルを読み込んでいる例を見たのですが txtファイルがどのように書かれているかご存知の方教えてください。 txtファイルがどのように書かれているかが分かれば分析できそうなのですが…
>>270 そのテキストファイルを開いてみたら書き方がわかるんじゃ・・・
273 :
デフォルトの名無しさん :2014/01/28(火) 00:26:41.01
>>270 です。
>>271 >>272 レスありがとうございます。Orangeはこれです!
このサイトの中にファイルの例が見当たらなくて困っています。
>>273 >>271 のページに lenses.tab って CSV (TSV) ファイルへのリンクがあるけどそれとは違うの?
>>273 ファイルへのリンク張ってると思うけど
Tutorial等のデータは、Orangeインストールしたら Orange/datasets に入ってるよ
Orange Canvasからファイルを読み込む場合は、
ファイル選択の所で "Browse documentation data sets..." 選択すると一覧を開いてくれる。
orange.biolab.si/start-using/ ここから始めよう
276 :
デフォルトの名無しさん :2014/01/28(火) 01:26:42.21
>>274 ありがとうございます。
拡張子がtabの場合ってcsvとして扱える、ということでいいですか?
初歩的な質問ですみません。
>>275 Orangeのdatasets確認しました。ありがとうございます!
すみません、「orange.biolab.si/start-using/」はどういうことですか?初歩的な質問ばっかりですみません。
277 :
「ガスライティング 集団ストーカー カルト」で検索を! :2014/01/28(火) 01:31:40.21
★マインドコントロールの手法★ ・沢山の人が偏った意見を一貫して支持する 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法 ・不利な質問をさせなくしたり、不利な質問には答えない、スルーする 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法 ↑マスコミや、カルトのネット工作員がやっていること TVなどが、偏った思想や考え方に染まっているフリや常識が通じないフリをする人間をよく出演させるのは、 カルトよりキチガイに見える人たちを作ることで批判の矛先をカルトから逸らすことが目的。 リアルでもネットでも、偽装左翼は自分たちの主張に理がないことをわかっているのでまともに議論をしようとしないのが特徴。 ,..,
>>276 Orange Canvas -> Help -> Welcome -> Get Start で開くページ
URLです。リンク貼れなかったので頭の h t t p : / / 省いてます
ブラウザによっては、そのまま貼り付けてもok
279 :
デフォルトの名無しさん :2014/01/28(火) 03:26:13.91
>>278 ご丁寧にありがとうございます!がんばってみますー
280 :
258 :2014/01/28(火) 17:53:45.29
>>260 , 261
お二方、ありがとうございます。
ループで書く方法と、再帰的に書く方法、どちらも大変参考になりました。
おかげさまで、ファイル・ディレクトリ操作をする自作Scriptの作成が捗りそうです。
>>262 こんなライブラリがあるとは。
3.xでますます便利になりそうですね。
皆、クラスを書いたファイル名どういう風に付けてる? PHPや他の言語の頃はclass.hoge.phpとか、class.hoge.jsとか書いてたんだけど、 Pythonでは不正というような警告がEclipseに出るんだけど 何かPythonのディレクトリ構造内のファイル名の付け方とか、指南の書かれているサイトとかない?
公式チュートリアル嫁
頑固者が作ったJavaじゃあるまいし
ドットは名前空間の階層を表すのに使われているから、ファイル名に含めたらマズイだろ 標準ライブラリのフォルダを覘けば参考になるよ
>>281 "PEP8" の Package and Module Names
変数がboolean型かどうか調べる方法教えて a = Trueとした場合、どういう風に書けばいいのか分かりません
>>286 isinstance(a, bool)
>>287 あれ?
自分それでやったんだけどエラーでたんだよね
でも今もう一度変数名変えたら出来た
答えてくれてありがとう
>>276 追記です
>拡張子がtabの場合ってcsvとして扱える、ということでいいですか?
Orange.data.Tableで読み込む場合は、拡張子を見て書式を判別してる部分があるので、
例えば、拡張子 .tab なカンマ区切りのデータは NG です。拡張子 .csv でカンマ区切りなら OK
291 :
デフォルトの名無しさん :2014/01/28(火) 23:28:09.32
質問させてください PHPにはmethod_exists()のように、指定する関数が存在するかを確認できる関数があります Pythonにて同じような挙動をさせるにはどのようにすればいいのでしょうか? ググってみたのですが、分かりませんでした
但し、エラーなく読み込めていても、正しく読み込めているとは限りません。 ファイル先頭にカラム名や型・フラグ等の情報がないと、 数値を期待したのにデータが文字列、等という事が起こりえます。 ファイルの書式は、チュートリアルの一番最初 The Data や リファレンスの Orange.data.formats に詳しく書かれてます。
vars()
>>289 存在しないと思っていい。
アンダースコア2個のは、
Pythonでは、"private" って用語は使わず、"name mangling" って呼ばれます。
>>291 obj.method を調べるなら getattr(obj, "method")
295 :
294 :2014/01/28(火) 23:45:45.47
method_exists 相当なら hasattr の方が適切だった。
hasattr して callable でチェック
config = {"a":"あ", "b":"い"} a = hoge() a.init(config) #以下はクラス class hoge(o): def __init__(self): self.a = "foo" self.b = "bar" def init(self, config={}): self._clear() for key, item in config.iteritems(): try: if self.key: <-ココでエラーが出ます 自分はクラス内のメンバ変数が存在するか(例えばself.a)を調べるために、self.keyとしたのですが、 これではself.aを調べるのではなく、文字通りself.keyを調べに行ってしまいエラーが出ます どのようにすれば最後のif文にてself.aとself.bの存在を調べられますでしょうか?
>>295-296 ありがとうございます
つまり、
hasattr(Hide, 'method') and callable(getattr(Hide, 'method'))
クラス内であれば
hasattr(self, 'method') and callable(getattr(self, 'method'))
という事でしょうか?
>>289 Pythonに限らず、他の言語でも
リフレクションが使えれば、privateなメンバへアクセス可能だったりする。
重要なのは、アクセスの完璧な隠蔽ではなく、クラス作成者の意図されない使われ方、
不用意に子クラスや外部から参照されるのを防ぐ、コンパイル時にこれを検出する事。
一応、非公開を意図するなら、名前の頭に アンダースコア 一個付ける慣習があって、
外部から非公開属性の参照は、pylint 等で検査すると警告出してくれます。
>>297 self.aとself.bの存在を調るなら
if hasattr(self, 'a') and hasattr(self, 'b'):
configに"a"と"b"のキーが存在するか調べるなら
if "a" in config and "b" in config:
>>298 hasattrは、実際にはあまり使わなくて、
getattr の第三引数使ったり、実際にアクセスしてみて例外捕まえたりします。
この場合は、これでいいかな
callable(getattr(obj, "method", None))
クラスの場合は、 __getattr__ (PHPで言う __get()) の判定は、出来ないかもしれない。
>>300 ありがとうございます
ちょうど
>>298 を見てそのようにし、出来ました
しかし、
>>297 の関数init()内にて
self.key = item
を行わなければいけない部分があります
self.keyのkeyをPythonに"変数"と認識させるにはどのように記述すれば宜しいのでしょうか?
調べても出てこないので参っています
>>302 "変数" の辞書を操作する方法もあるけど、(vars, locals, globals)
状況的に欲してるのは、オブジェクトの属性に設定する方法かな?
setattr(self, key, item)
>>302 インスタンスの属性を動的に設定したいということで良いかな?
代入する属性を動的にしたいということで良いかな?
基本はsetattr()だが、インスタンスには__dict__という属性を保持する辞書がある
代入元が辞書ならself.__dict__.update()に突っ込んだり
既存の属性が必要なければself.__dict__にコピーを代入するという手もある
ちなみにメソッド定義には**kwdsなどと**を付けることで
キーワード引数全てを辞書で取得するという文法もあったりする
>>> config = {"a": 10} >>> class A: pass ... # 属性の場合 >>> obj = A() >>> vars(obj).update(config) >>> obj.a 10 # 変数の場合 >>> vars().update(config) >>> a 10
コードの静的解析でチェック出来なくなるので、あまりお勧めしない方法だけど、 注意点 __dict__は、__slots__を持つクラスのインスタンスにはない。 vars(obj) は obj.__dict__ を返すので同様。 変数を動的に作る場合は、予めスコープ内で変数を宣言しておかないと、 存在しない変数の参照は、グローバルを参照するようになるので、 グローバルに同名の変数がなければ、エラーになります。 vars() は、locals() ローカルの変数の辞書を返します。
>>303-306 本当にありがとうございます
今家に帰って布団に入った所なので、また明日試してみます
丁寧に教えていただきましてありがとうございました
308 :
デフォルトの名無しさん :2014/01/29(水) 16:16:23.98
>>297 内に、
if method in dir(self.__class__): # 関数が存在するか
self.method(item)
という部分があるのですが、これまた変数methodに動的に値が割り当てられないため、
「self.methodというメソッドは存在しません」のようなエラーが出てしまいます
@classmethodを使い、
def m(self, method, **arg):
self.method(arg)
などとし、動的にmethod()を行おうとしたのですが、意味が無いと思いました
何度も申し訳ないのですが、どのようにコードを書けば宜しいでしょうか?
関数のコードです
http://codepad.org/6YDM6gHZ
self.__class__.__dict__[method](self, item)
getattr(self.__class__, method)(self, item) この方がいいな
getattr(self, method)(item) でいいはず
インスタンスメソッドじゃなくてクラスメソッドの話じゃないのか
オブジェクト指向めんどくせえ シンプルを旨とするPythonの精神に合わない
PHPではクソ簡単だけどな 上に書いてあるような質問も、$this->$keyで済む 誰も迷うことないんじゃないかな JSはPythonより分かりにくい と言うか、JSは欠陥言語だろ 今では有志たちが頑張ってくれた遺産があるから何とかなっているが ま、Pythonは簡単に...の思想のおかげで逆にやりたいことにたどり着くのに時間かかる時がある
>>313 309. 310 は、第一引数にインスタンスを渡してる所から、インスタンス・メソッドとしての呼び出し。
クラス・メソッドは、通常、第一引数にクラスのオブジェクトを渡します。
インスタンス経由でもクラスの属性にアクセス出来る為、
クラス・メソッドにインスタンスを与えても、大抵の場合は動作はしますが、
クラスとインスタンスの区別がついてないので、修正すべき状況です。
312 は、インスタンスからメソッドを得ていて、
対象のメソッドが、クラスメソッド、インスタンスメソッド どちらでも呼べます。
簡素に書きたければ __getitem__ = object.__getattribute__ でもしたら良い、インスタンスメソッド以外はメタクラスで。
>クラスとインスタンスの区別がついてないので、修正すべき状況です。
コレはどこの事を言ってるの?
>>310 のこと?
>>318 そこは未束縛の関数を想定してたけど、(Class.method.im_func)
310,311 の場合では杞憂のようでした。
310,311 で、対象がもしクラスメ・ソッドだった場合は、
それぞれ、呼び出し不可・引数が異なる事になりますね。
pyptとかpygtkで実装されたソフトはたまにあるけど、tkinterはなにかある?
特にない
turtleって実践で何か役に立つことあるんですか?
入門レベルですらないのですが・・・。 OSはWindows7でpython2.7.6をインストールして ブログなどを読みながら導入を行っているのですが pathを通す、という所でつまずいています。 環境変数→"path"を編集して、pythonのディレクトリパスを追加し、 コマンドラインで">>> python"と打つと、 pathが正しく設定されていれば、ヴァージョン情報が表示される、 という認識で合ってるのでしょうか。 確かに編集できていると思うのですが、 コマンドで">>> python"と打っても、 NameError: name `python` is not defined と返されてしまいます。 何か勘違いをしているのでしょうか。
>>326 やっぱりそんなもんですか
軽くguiプログラミングを学ぶのにはいいと思うんだけど
>>325 Windowsのコマンドプロンプトで"python"と入力すると、
確かにヴァージョン情報などが表示され、起動できていました。
pythonのコマンドラインと勘違いしていました。精進します。
ありがとうございます。
projectの下に、libs、classes、testsと3つのディレクトリがあります projectを除くそれぞれのディレクトリ内には空白の__init__.pyを置いています 今、tests内のfoo.pyというファイル内に from libs.bar import bar と書いてlibs内のbar.pyファイルを読み込もうとした際、 ImportError: No module named libs.bar と出てしまいます しかし、classes内のhoge.pyファイルから同じように from libs.bar import bar と書くとちゃんと読み込んでくれます どのようにすれば、tests内のfoo.pyがlibs.barを読み込んでくれるのでしょうか? パーミッションはいずれも664となっています Python2.6です
sys.path.append('.')
>>329 ライブラリで副作用のあるコードを含みたくないなら、環境変数 PYTHONPATH
だけど、パッケージにしてるなら classes と同じで読み込めるはず。
各スクリプトを実行してる場所と実行方法は?
./project から python ./tests/foo.py と実行してる?
332 :
デフォルトの名無しさん :2014/01/30(木) 23:13:31.89
>>330 ありがとうございます
一応、動作は確認できました
ただし、何故libs内、classes内は
from libs.bar import bar
のような方法で読み込めるのに、tests内はエラーが出るのか謎です
>>331 はい
$ cd $HOME/project
$ python ./tests/foo.py
のような感じでもエラーが出てしまいます
./tests/内のファイルから、./libs/内や./classes/内のファイル、モジュールが読み込めません
./libs/内から./classes/内、またその逆は可能なのですが
>>332 目的がテストの実行という事であれば、setup.py から実行する方法や
(2.7のunittest2以降?) python -m unittest tests で実行する方法もあります、
ImportErrorは、
とりあえず思いつくデバッグ方法。 python -i 付で実行してみて、実行後
>>> import sys
>>> for path in sys.path: print(path)
...
読み込めた時・読み込めなかった時の sys.path を比べてみる。
./classes/foo.py と ./tests/foo.py は、同じ内容をコピーして試してみる。
参考までに、プロジェクトのルートから $ PYTHONPATH=. python ./tests/foo.py $ python -mtests.foo で正常に import 出来るのを確認。 2.6/2.7/3.3/3.4 @ linux $ python ./tests/foo.py では ImportError。 ./classes/foo.py でも同様の結果になりました。
先輩、モジュール読み込む度に 僕の名前は...マー坊 って入力させるのやめて下さいッ!
__init__.pyが無いという
は?
何のこと?
>>329 のこと?
それなら__init__.pyはあるって書いてあるように見えるけど?
そもそもモジュールの独立性を高めるための分割化なのに モジュール同士の依存関係強めてどうすんのよ 設計を見直した方が良いレベル
同じことやったことあるから、わからんでもない 他のモジュールでも使う→別モジュールとして独立させる 他のモジュールから使うことは無い→インポート先のモジュールに組み込む
インスタンスメソッド、クラスメソッド、スタティックメソッドの違いが分からないんだけど インスタンスメソッドは簡単 foo = Foo()でインスタンスを作成して、Foo.method()で実行 で、残りの静的メソッド2つ スタティックメソッドは他の言語にもあるように、インスタンスを作成せずに呼び出すんでしょ? 例えばスタティックメソッドであればFoo.method()、PHPの書き方が視覚的に分かりやすいのでPHPであればFOO::method() でもマニュアルにはFoo().method()でもFoo.method()でもいいと書いてる...(何で?) じゃぁクラスメソッドって何だってことになるんだけど、第一引数にclsを与えてるってことは、継承時に関係してくるのかなと selfはそのクラス自体(Foo内であればFoo) clsは読み込まれた時のクラス(Bar子クラスからFoo親クラスのクラスメソッドを呼び出した場合はcls=Bar) ってことになるのかな? 混乱してきた..... どういう時に使い分けるのがいいの? インスタンスメソッドはガッツリとそのクラスを使いたい時、 スタティックメソッドはどうせそのメソッドだけしか使うこともなく、クラスの呼び出しすらオーバーヘッドを気にしたい時、 クラスメソッドは親クラスのメンバ変数の値を変更したくない時とか? メリットなど教えてくれない?
ごめん、3行目はFoo.method()じゃなくてfoo.method()の書き間違い
344 :
デフォルトの名無しさん :2014/02/01(土) 00:29:56.70
class Point def plus(addend) return self.class.new(5, 5) <-ココ end Rubyで上のようなコードがありますが、Pythonではどのように書けばいいでしょうか? self.__class__(5, 5)のように考えたのですが、ダメでした
あっ、上を何気なく眺めていたら、setattr()を見つけました これで代用できるんじゃないかと試してみます
連投すみません setAttr()ではダメでした クラス内部変数などを変更するには良さそうでしたが、 インスタンス時に渡すという用途ではダメっぽいです
その説明だけでは何やってダメだったのか分からない ://codepad.org/ にでもソースの一部を貼りなよ
>>340 他の言語では、(Pythonの)クラス・メソッド相当のものを宣言するのに static キーワードを使うので、
"static" を他の言語のものに当てはめて考えていると混乱するかもしれない。
Pythonのスタティック・メソッドは、クラスに所属してるだけの普通の関数です。
使い分けの基準は、インスタンス変数/クラス変数 へのアクセスの有無にのみ着目して考えてみるといいよ。
>>343 nose では、TestCaseを継承するようなコードは書かず、pythonの assert文を使うのだけど、
一応、assertX 系のメソッドは nose.tools 下にあるよ。
関数のように扱う事になるので、pep8に従い assert_regexp_matches みたいに名前は変わってます。
実際に unittest.TestCaseからメソッドを動的に取り込んでるので、命名規則以外は全く同じ。
代替の方法があるものもあります e.g) assert_raises -> nose.tools.raisesデコレータ
>>344 メソッド内でインスタンスを作成自体は、self.__class__(5, 5) で合ってる。
値を返すのに return を忘れたとか、ESPしてみるけど、どうだろう。
多分やりたい事は、こんな感じの immutable な Point型
ideone.com/4atjqo
ずっと TestCase から派生してやってたけど yield を使った複数テストは objectから派生させないと動かない ことにはめられたわ... setUp が効かなくなるし デコレータ嫌いだしはめられたわ...
>>351 見てみたけど、マルチじゃないじゃないか
質問内容が違う
こっちはクラスの話、むこうは関数の事聞いてる
なにその微妙に変えてますよアピールw
.NET FrameworkのSystem.Drawing.Drawing2D.Matrixに相当するクラスってありますか? (3x3のアフィン変換行列をカプセル化したもの)
356 :
355 :2014/02/01(土) 15:29:49.46
自己レス matplotlib.transforms.Affine2D で良さそう
class ABC(object): def __init__(self, x): self.x = x def back(self, x): return self.x abc = ABC(50) if abc == ABC(50) # ABC(50) == ABC(50)でも同じ結果 print"same" else: print"diff" で"diff"となるけど、Pythonでは新規作成オブジェクト(インスタンス)は別物だとみなされるんだね?
__eq__オーバーライドしてなければね
__eq__や__cmp__をオーバーライドしないならベースクラスの実装に依る それがイミュータブルならアイデンティティさえ処理系に依る
def __eq__(self, other): return isinstance(other, type(self)) and self.x == other.x
362 :
デフォルトの名無しさん :2014/02/01(土) 19:22:37.33
既存エクセル(チャート付き)を編集できるモジュールってあります?
x,yのループの定番の書き方は? for x, y in ((x, y) for x in range(10) for y in range(10)): pass これだと1行ですむけど、forが2回も出てきて美しくない気がする
>>> list(itertools.product(range(5), repeat=2))
itertools使ったことないな…
itertools面白いよね こんなの何に使うんだって思うものでも サンプルを見るとヘーっていうのがある combinationsとか、dropwhileとかは 実務に使わせてもらっている
for (x, y) in zip( range(10), range(10) ): pass
>>369 それはこれと同じ
for x in range(10):
y = x
pass
子クラス内で親クラスの呼び出し方は、 class b(a): def __init__(self): papa = super(b, self) papa.method("mama") # mamaに浮気がバレた でいいんですよね? でも、例えば from a import a などしてれば、 class b(a): #または(object) def __init__(self): papa = a() でも大丈夫だと思います その場合はa()とsuper(b, self)は同じものなのでしょうか?
>>371 状況が良く解らないけど、何か変な事してるような気がする
親クラスのメソッド呼び出しも、self.method()
子クラスでオーバーライドした場合に、親クラスのメソッドを呼び出すには
(クラス大文字で書くけど B > A > object と継承してるとして)
super(B, self).method() もしくは、親を明示する場合は A.method(self)
> a()とsuper(b, self)は同じものなのでしょうか?
superが返すのは、親クラスのメソッドを順に呼び出すための
プロキシ・オブジェクトでインスタンスとは異なります。
教えてください。↓からまとめサイトのURLとジャンルだけうまく抜き出す方法ないでしょうか。
Beautifulsoupでトライしてるのですが、Beautifulsoupが高機能すぎて全然使いこなせてないです。。。
http://dic.nicovideo.jp/a/2ch髢 「騾」縺セ縺ィ繧√し繧、繝医?ョ荳隕ァ
馬鹿には無理
URL書いとけば誰かが作ってくれる
377 :
デフォルトの名無しさん :2014/02/02(日) 11:41:48.69
おお、アンテナサイト作ろうとしてたからこれは便利だわ ちょっとスクレイプってくる
URL 書いてるのでずが、日本語URLだからリンクが途切れちゃうんですよね。
「
http://dic.nicovideo.jp/a/2ch関連まとめサイトの一覧 」
です。
>>376 コードを書いて欲しいのではなく、ここにいるような有識者がどんな方法で
アプローチするのか知りたかったというのが正直なところです。
最悪1文字づつ処理すれば、まぁなんとかなるので。
>>377 回答ありがとうございます。
やっぱスクレイプでググって考えろってことだと思うのですが、
スクレイプでググった結果、Beautifulsoup にたどり着いて、
今まさにそこでつまづいてます。。。。
379 :
デフォルトの名無しさん :2014/02/02(日) 13:21:14.73
>>378 HTML理解してれば難しいことは何もないと思うんだけどw
データが入ってるタグを抽出して、そこから分割してとれば簡単なような
まぁ、一回だけのデータ抽出なら手動の方が早いかとw
>>378 BeautifulSoup 自体は 要素のリスト・属性・テキストをそれぞれ得る方法3点だけ抑えれば ok
面倒なのは HTML の解析で、空欄やリンクのない項目、htmlタグが混ざった(?)ジャンル名等の例外があるので、
このような適切に意味付けされてない文書では、個別に対処するような泥臭いコードを書くことになります。
# そして、更新があった際も、コードも変更に追従しないといけなくなる可能性が高い。。
皆はさ、TDD,BDD使って開発してるの? Unittest,pyspecとか使って
書いてみた。データのチェックはしてません。叩き台程度にどぉぞ。 * table/tr/td の順に走査 * table は style が border で始まっていなければスキップ * tr は td の要素数が 2 でなければスキップ * title ... td[0] を / で split ※ 空の項もある * url ... 末尾の a 要素の href ※ リンクがない項もある * genre ... td[1] を / で split 後は、文字コード変換の際に面倒な文字があったり、 ジャンル名に変なタグ紛れてたりする等、細かい点の修正が必要。 codepad.org/1tATXFdI
384 :
373 :2014/02/02(日) 14:22:03.60
>>373 その形式で貼ったら文字化けしたんですよね。使ってる専ブラの問題かもしれません。
あの後、もう少し調べてみたら、↓で取れそうな気がしてきました。がんばってみます。
100 のとこは 適当に値を入れてあるだけです。。。
url = '
http://dic.nicovideo.jp/a/2ch髢 「騾」縺セ縺ィ繧√し繧、繝医?ョ荳隕ァ'
soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url).read())
soup.findAll('tr')[100].findAll('a')[1] # サイトのURL
soup.findAll('tr')[100].findAll('a')[2] # ジャンル
385 :
373 :2014/02/02(日) 14:25:49.08
384のミスです。やっぱり化けた
BeautifulSoupみたいな完璧じゃない物使うからだ
387 :
373 :2014/02/02(日) 14:37:25.94
>>386 なんかおすすめあったら教えてください。。。お願いします。
soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url).read().encode('utf-8'))
>>387 今携帯からだから該当ページのHTMLが読めない
390 :
373 :2014/02/02(日) 16:02:18.95
>>388 これは文字コードしっかり処理しろってことですかね?
391 :
373 :2014/02/02(日) 16:35:57.84
>>389 ありがとうございます。今
>>383 さんがくれたやつを使って考えています。
また、分かんなかったら書き込みますので、その時はどうぞお願いします。
392 :
373 :2014/02/02(日) 16:37:35.63
>>383 すみません。codepad のリンク全然気づいてませんでした。
本当にありがとうございます。
393 :
デフォルトの名無しさん :2014/02/02(日) 16:37:48.72
クラウドソーシングで3,400円で頼めばすぐに作ってくれそうな人がいそうだなw
394 :
373 :2014/02/02(日) 16:41:57.84
>>393 仕事じゃなくて、最近プログラミングに興味をもってやり始めただけなので。
BeautifulSoupが暗黙的にstrをunicodeに変換して、
しかも変換時のエラーを無視するから
>>384 になる
ちょっとよくない設計だよね
テキストが肝心要なんだから変換に失敗したらエラーでユーザーに気づかせるべきだろうに
お前らPyPy使えよ
3.3に対応したら使うから教えてくれよ ぜんぜん期待してないけどね
398 :
373 :2014/02/02(日) 17:16:14.13
>>395 すみません。そうではないです。
単に2chへの書き込みでURLが文字化け
してるだけです。
実際に処理では文字化けとかはしてないです。
PyPy早いぞ
Python3使ってる奴いるんだな
list・set・dict・tupleみたいな抽象的なコンテナ型を使うのは、中身を気にせず操作できるからでしょ 文字列も、ShiftJIS・EUC-JP・中国語・アラビア語・・・言語やエンコードを気にせず操作したい そんな時にこそ、抽象的な文字列として機能するユニコード文字列の出番なのです テキスト重視ならユニコード文字列にすべきで、データ重視ならバイト列にすればいい Python2のstrは、どっちつかずで中途半端な存在だ
402 :
373 :2014/02/02(日) 18:34:47.23
結果報告ですが、
>>383 の書いてくれた
コードで解決しました。本当にありがとう
ございました。
最初から他人に作らせる気だったくせに
404 :
373 :2014/02/02(日) 19:21:54.59
>>401 そう思われても仕方がないですが、そのつもりはなかったです。
というか
>>395 さんの作ってくれたやつをいじろうと思ったんですが、
自分の他の処理の方がイケてなさすぎたので、そっちを改修しています。
>>395 さんのコードを見て思ったのですが、↓の処理をあの短時間で思いついてすごいな思っています。
自分が欲しいブロックじゃないとこに style が入ってて、そこを避ければいいなんて、気づきませんでした。
----
if not table.get("style", "").startswith("border"):
----
405 :
373 :2014/02/02(日) 19:27:27.58
406 :
デフォルトの名無しさん :2014/02/02(日) 19:36:24.72
いちいち一言多いな
メール本文に含まれてる URL のホスト部分を逆引きして, 特定の IP アドレスにマッチしてたらなにがしかの動作を するとかメール捨てるとかの, フィルター的なものって ありませんか?
ありますね
--a.py-- class a(object): def method(self): return True にてUnittestを適用する際、多言語(例えばRuby)でassert(a.method())に対応する書き方を教えて下さい --TestA.py-- self.assertTrue(a.method())でも、 self.assertEqual(a.method(), True)でも、 TypeError: "bool" object is not callable. と出てしまいます ちなみにバージョンの関係上assertIs()は使えません
self.assertTrue(a.method)
ありがと 何で()抜いたのなら動くのかは分からないけれど、Fake Itの時などの利用時に使えるので助かりました
ArgumentException/ErrorってPythonにはないけど、 正数の引数を想定していて、負数が来た時などにraiseした場合、 どんなException/Errorを入れれば良いんですかね?
ValueError
なるほど、ありがとうございます
UnittestのassertRaises()の使い方に困っています 自分のPythonのバージョンが2.7ではないため、コンテキストマネージャとして利用できません with self.assertRaises(myException) as ex: class.method("number", -1) self.assertEqual("negative quantity", ex.message) のようにしたいのです self.assertRaises(myException, class.method("number", -1))では、 File "/usr/lib64/python2.6/unittest.py", line 335, in failUnlessRaises callableObj(*args, **kwargs) TypeError: 'NoneType' object is not callable とエラーが出てしまいます また、self.assertRaises(myException, class.method)では、 TypeError: method() takes exactly 3 arguments (1 given)と出てしまいます 例外を発生させてエラーメッセージを取得し、assertEqual()にてエラーメッセージやエラーコードを比較するというやり方はどのようにすればいいのでしょうか? また、assertRaises()の第3引数はいったい何のためにあるのでしょうか? 無くても問題ないのでしょうが、マニュアルにも詳しく書かれていないので、 仕様がよく分かりません
Pythonでarr = new Array(2)のようにするにはどうすればいい?
>>417 2.7の unittest2 (2.7では標準の unittest) はバックポートされてるので
インストールさえすれば 2.6 でも利用可能です。
第3引数以降は、関数形式で利用する際の第2引数のcallableに渡す引数
self.assertRaises(RuntimeError, lambda: func(1, 2, n=3))
self.assertRaises(RuntimeError, func, 1, 2, n=3) と同じ。
> 例外を発生させてエラーメッセージを取得し、
> assertEqual()にてエラーメッセージやエラーコードを比較
恐らく try/except 内で assert するという事だろうけど、
テスト内にその様なロジックを書くのは悪手で、
期待する例外が来なければ、未到達のコードになってしまう可能性が出てきます。
assertRaisesRegexp を使うとエラーメッセージのテストが出来ます。@ unittest2
それから、assertTrue は廃止予定のエイリアスなので気をつけて。
>>418 リストでいいのかな?型付Arrayだったら array モジュールがあるけど。
immmurable な値で初期化するなら
arr = [None] * 2
>>419 色々とお答えいただきましてありがとうございました
unittest2をpipからインストールしたら、unittest2をimportしても、PyDevにて使えなくなりアンインストールした事があります
やろうとしている事が出来る関数などがpython2.7から追加とかあり、色々と悩んでおりました
>>421 > assertTrue は廃止予定のエイリアスなので気をつけて。
ごめん、これだけ勘違い。
>>411 は、assertTrue が () なしの関数を受け取るわけではなく
.method が呼び出し可能な関数/メソッドではなく、既に bool 値になってるんじゃないかな?
# プロパティとして宣言していたりすると () なしで呼び出される。
>>411 そのクラスの実装 (クラス名が小文字の a) で a.method() だとしたら
表記はクラス・メソッドとしての呼び出しになるんじゃない?
assertTrue(a.method) -> メソッドがbool値として評価されて True になってる可能性もあるので、
テストでは、まず失敗するテストを書いて、期待通りに失敗するのを確認しよう。
>>421 PyDevだったら py.test って選択肢も在
py.test.raises を関数として呼び出した時に、
例外情報を返してくれるので、ここから例外オブジェクトにアクセス可能。
nose もサポートされてるけど、nose.tools.raises はデコレータ用で例外検出のみ。
nose.tools.assert_xxx は unittest 依存。
みんなWindowsで普段Python使って処理したりしてる?
してる
428 :
デフォルトの名無しさん :2014/02/04(火) 00:24:34.57
今回の仕事場じゃpython使って問題ないから凄い楽しい
Windowsで開発は全くしないな 俺にはデメリットの方が多いと思ってるから 完全Linux派だな
python2と3の混在とかなるとめっちゃ面倒だからなWindowsは。
馬鹿には無理
windows のみ py ってコマンドが追加されて、起動スクリプトのshe-bang に #!/usr/bin/env python3.3 とシェル・スクリプトの様に、version指定しておけば、 そのversionの python で起動してくれるようになってる。(PEP 397)
WinでもgVim使ってるからPython使ってるといえば使ってる
PHPでは慣習的にindex.phpがメイン、最初に呼び出されるファイルになるけど、 Pythonの場合って何になる? main.pyとか? でもmercurial見てると無いから、どれが最初のファイルなのかなと
最初に呼ばれたファイルが実行されます
いつもはPyDevでプロジェクト作成して、ディレクトリやファイルを手動で作成してたんですが、 新規 -> PyDevモジュール -> パッケージと名前を入力してファイルを作ったら、 import MySQLdb がPyDev上で赤いバッテンが付きUnresolved import MySQLdbとなったり、 except MySQLdb.Errorがundfined variableになります ただし、実行してみるとデータベース接続は出来ているようです これ何とかならないでしょうか? sys.pathもしてみましたが、パスは通ってるみたいです PyDevのモジュール用の設定がおかしいのかもしれません Eclipseスレの質問かもしれませんが
eggって何ですか? 例えばsu -> pip install abcをした場合、スーパーユーザーでは $ python >>> import abc なんかでは通っても、一般ユーザーでは通らない場合があります 自分はこのeggファイルのパーミッションが問題なのかなと思うのですが $ ll ./site-packages drwx--x--x root root pyabclib-xx.egg-info drwx--x--x root root abclib となっています xで実行が認められてるんで大丈夫じゃないかなと思うんですが
egg開いてみ あとモジュールにxつけても直接実行することが想定されたモジュール以外ほぼ意味ない
BeautifulSoupについて教えてください html = """<div id ="hoge"> <div id="foo"><p>埼玉</p></div> <p>広島</p> <p>青森</p> </div>""" とあった場合、 BeautifulSoup(html).find(id='hoge').p.stringでは埼玉しか取れません find(id='hoge').findAll('p').stringではErrorです 埼玉、広島、青森を取る方法、また、もし可能であれば埼玉を除いた、広島、青森だけを取得する方法がありましたら教えていただきたいのですが
>>439 hoge使っといて他人に教えろとか馬鹿なの?
早く回線切れば?
そんなことよりまずfindAllが何を返してるかでも確認しとけ
(^p^)
>>434 慣習は知らないけど、.zip アーカイブを直接実行する仕組みでは__main__.py が呼ばれる というのはある。
通常の起動するスクリプトはパッケージ製作者が setup.py に記述するので、そこから辿れます。
後、.eggで実行可能なスクリプトやプラグインだったらegg-infoのentry_points.txtに書かれてる。
>>436 パスの確認はどうやってる? importのチェックは静的解析みたいなので、
もし実行時に sys.path 設定してたら、そのような症状になるかもしれない(推測)。PyDev側で設定が必要。
文字コードの判定をする関数やモジュールで、今まで使っててこれはお勧め、とかいうのない? サイトの紹介でもいいんだけど Webで調べるといくつか出てくるけど、どれが本当に汎用性があるのか分からない 自分で関数紹介していながら、ちゃんと動作するか分からないとか、python-chardet使うのがいいとかあるけど 文字コードって他言語でも昔から悩まされてる
ここは敢えて 強いて言えば明示的に指定するのがお勧めだ と身も蓋もない発言を
バッドノウハウ集なのか? グッドノウハウ集を紹介してやらんと
グッドノウハウは無いよ Pythonは糞
ウハウハωに見えた
nkfちゃんにお願いしてる。
データの文字コードってあらかじめ決まっているもので 後から判定するものじゃないよな? おかしなことに労力を割くなよ
Matzもそう言ってたぬ
http://pastebin.com/KvGc8ZMm 元のURI:
http://www.atmarkit.co.jp/fdotnet/dotnettips/585regexreplace/regexreplace.html 上のようなHTMLがあった場合に、BeautifulSoupにて本文のみを抜き出すのはどのようにすればよろしいのでしょうか?
a = self.soup.find(text=re.compile("contents"))にて唯一分かりやすい目印のコメント部は取得できます
しかし、本文が、<p>の下にあったり、<td>の下にあったりめちゃくちゃです
a.nextSiblingsにてなんとかなるかなと思ったのですが、エラーが出ました
もしそれが出来れば、b = a.nextSibrings.findAll('p') <-findAll(['p', 'td'])のように2つ条件を入れられるのか分かりませんが...for c in b:c.textでいけるのではないかと思いました
ちょっと分かりにくい文章ですが、
1. このように、あるタグ内の処理ではなく、近くのタグ内の処理をする方法
2. find()などで複数の条件を指定する方法
3. find('div')で<div><p>こんにちは</p></div>の<p>を飛び越えてテキスト部分を取得する方法
を教えていただけないでしょうか?
3.はsoup.find('div').textで"こんにちは"だけ取得できたので複数のネストを越えて大丈夫だと思うのですが、
2.はhtml ="<div><p>こんにちは</p></div><b>こんばんは</b>"
for line in soup.findAll(['div', 'b']): print line.text
で"こんにちは"しか取得できませんでした
1.はダメでした
お前が一番駄目だよ 相手した奴も昨日みたいに無視するんだろ 死ぬまで一人で作業やってろ
馬鹿には無理
BeautifulSoupってxpath使えないから嫌いーw
確かに自分がダメです 色々試してみるんですが、中々上手くいきませんでした
で、作れと
お前達ってさ、どういう用途でPython使ってるの? ソフトウェア開発、サーバー管理に便利なスクリプト、Webのサーバサイドとしてなどあるけど
データ解析ソフトに投げるための下処理
cStringってたまに見かけるけど使ったこと無い 一般的な文字列くらいなら使うこと無いんじゃないかと思うんだけど 実際、ある程度長い文字列使って単純な方法でイテレータで回してみたら、呼ばない方が自分の場合早かったんだけど 使うことってある?
466 :
デフォルトの名無しさん :2014/02/06(木) 07:23:21.08
位置から書き直した方が良い
>>465 StringIO と解釈するけど
用途は、ファイル・オブジェクトを要求する関数のテストに使ったり、
sys.stdout = StringIO() して、出力をキャプチャとか。
今(2.7以降)だと io.StringIO (for unicode) io.BytesIO (for bytes) があるので、
旧 cStringIO/StringIO は、もう使わないかな。
>>463 楽譜解析とDAWのスクリプト
音楽関係に使ってる人もいるんだな そういうの聞いたこともなかったから興味あるわ 面白い
python使えるdawってあるの?
DTMとか3DCGをやるやつは Pythonを普通に書くイメージだけど
それらのアプリケーションへ組みこまれたスクリプト言語がPythonだったって 言う結果論だろうけどな。
ゴミはそんなことで優越感を持ってるのか
CGはblenderとかmayaとかよく聞くね DAWはパッと思い浮かばないな。何だろう
PyPy大好き
477 :
デフォルトの名無しさん :2014/02/08(土) 08:02:36.76
FizzBuzz
インデントの追加、削除がめんどくさいんだけど、皆どうやって対処してる? 例えば、スクリプト書いてて、「しまった、try-exceptにするべきだった」となったら、一気にインデント変更しなきゃいけんくなる
それPython関係なくてエディタの便利機能ない?って質問でしょ まあ適当にやってるよVimなら矩形選択とか 一行ずつインデントするようなことはしてない
Vim使ってるの? なるほど 自分はPyDevなんだけど、他の言語と違って綺麗にフォーマットしてくれないし、 インデントが重要な意味を持つから 一気にインデント調整出来たらいいんだけど...
vim ならある程度までは visual mode で \= で行ける.ある程度までだけど
インデントに大きな意味を持たせたせいで、無駄にエディタに負担を強いてるよなPythonは。 制御文が入れ子になってるところとかに新たにインデントが必要なコードを追加しようとすると、ものすごく神経を使う。 {} とかでくくる代わりに制御文のケツにコロン必須&ブロックはインデント必須で得られるメリットとデメリット、どっちが大きいのか。
if文とかclass文とかで長くなればなるほどインデント調整型のPythonは厳しくなってくる インデント数スペース2つにしてる自分は特に 80文字で改行が身体に染み付いている自分は、インデントが空文字4文字や8文字では厳しい
別にインデントに意味がない言語でも、ちゃんと見やすいようにネスト変えたら 整形するでしょ。 面倒だからやらない、みたいなズボラを許さないのが逆におまえら向きなんだと 思うよ。 あとインデントを変えるのがめんどくさいとか、最初からロジックや作り方が悪い わけだから、言語への不平より、そっちを直すのが大切。
Eclipseならショートカットで一気にフォーマットしてくれるがな... Pythonはインデントが意味があるからフォーマットしてくれない Eclipseがインデントの意味を理解出来ないから
>>484 それを強制されるかされないかで状況は大きく異なる。
そしてPythonはそれを強制する。
> あとインデントを変えるのがめんどくさいとか、最初からロジックや作り方が悪い
> わけだから、言語への不平より、そっちを直すのが大切。
そんなコーダーのコーディングスタイルに敏感に影響されるのがPython。
pydevならCtrl+1でtry: exceptで囲んでインデントできたけど。
やっぱpyscripterよねー
俺Windows使わんから...
このスレ482みたいなのがよく湧いてくるけど スレタイにふさわしい内容だと思ってんのか? やるならアンチ専用Pythonスレでも立てて そっちでやれよ。もしくはどっかでツイっとれ。
いつもvimだからインデントがめんどくさいと思ったことないけど 普通のWindows的なエディターだとたしかに面倒かもな
eclipseでプログラミングしてる人を見るとアチャーって感じてしまう
>>478 Visual Studio で書いてるから、複数行選択して Tab とか Shift+Tab でインデント上げ下げしてる。
地味に便利だわ。
Vim便利よねー 自分でTABキーを押すことなんて滅多にないもの Python始めるならまずVimを覚えなさいってくらいのもの
お前が何を思ってブロックインデントを持ち出したのかは知らんよ? 死ぬまでインデント上げ下げしててくれ
オートフォーマットの話だと理解できなかったのね・・・。 「死ぬまでインデント上げ下げしてろ」はいい表現だなw 今後Pythonistaを煽る時に使おう。
>>497 アンカーすら追えないアホだったのか... (w
この流れで質問するのもなんだけど... lxmlってlxml.etree.fromstring()とlxml.html.fromstring()使う方法があるけど 何が違うの? 英文とかでも見てみたけど良く分からなかった etreeの場合はxmlもhtmlも扱えるけど、htmlに特化したlxml.htmlの方がhtmlの場合はいいという感じなのかな?
>>500 文書を読み込む時のデフォルトのパーサが違うのと、
HTMLに特化した機能が幾つか追加されてます。iterlinksやcssselector等。
> etreeの場合はxmlもhtmlも扱えるけど
XMLの場合は、書式がきちんとしてないとパース出来ないので、
XHTMLだったら扱えるけど、HTMLはwell-formedな場合でなければ普通は扱えません。
looseなHTMLを読み込む場合は lxml.html を使います。
503 :
デフォルトの名無しさん :2014/02/09(日) 15:38:18.37
あるサイトのページから「
http:// ・・・」のURLだけを取得してファイルに書き込むスクリプトを書きたいんですけど、
全部で1000くらいあるんですが、膨大なせいか100くらいしか取得してくれません。全部取得するには
どうしたらいいですか?
>>503 まずあるサイトにアクセスしてhtmlをそのまま保存しよう
そしたらそれを読み込んで正規表現で抽出していけばいい
そもそも膨大なせいって意味分からんけどね どうせチャンクきちんと処理してないんじゃないの? HTTPの解説ならしてやらんぞ
parse(urlopen(url).read()) よくありがちなコード。 かつreadは応答を全て返すと保証していない点をガン無視した書き方。
スクロール時に動的にリンクを作ってる可能性もあるし、 どんなHTMLをどう処理しようとしてるのか解らないと、推測でしか答えようがない。
>>503 > どうしたらいいですか?
ソース貼れよ
いつもの日曜日君だろ?
こいつリアクションしないから嫌い
512 :
デフォルトの名無しさん :2014/02/09(日) 18:45:49.46
100個とったら勝手に破棄するプログラムかっこいい
毎回構ってる奴も楽しいのか? それとも1週間ごとにこのスレの人間全員入れ替わってるわけ?
514 :
デフォルトの名無しさん :2014/02/09(日) 19:56:27.07
日曜日君は労働階級なので、平日は趣味ができないのです。 つまり、我々の仲間。 仲良くしたってください。 !!! ここム板だった! 貴族の皆さん、お騒がせしました。 ペコリソコ
こいつのは質問というより、ただの作ってクレクレ君だしな
労働者階級だけど23時〜3時は趣味してるよ 時間がない、は甘え
517 :
デフォルトの名無しさん :2014/02/09(日) 21:42:01.13
どう見ても貴族です。 労働者を馬鹿にしないでください。 労働階級でも貴族くらい見ればわかります!
労働者として馬鹿にされてるんじゃない 人間として(ry
>>490 論破できなくてアンチスレに追いやろうとしてる時点で負けですよ?
おまいらオススメの、または気に入っているモジュールは? 俺は逆にオススメしないのを言うけど、Ahocorasic これCore Dumpのエラーが出て使えない
osかな
ronpythonかな 自動で相手を論破するすごいやつだよ
論敗損
栄和放銃牌損
別に気に入ってないけどrequestsとlxmlがないとマジで死んじゃう
NumPyとmultiprocessingが無いと死んじゃう
527 :
デフォルトの名無しさん :2014/02/10(月) 18:43:58.17
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
音楽関係の人は? 君はどんなモジュール使ってるの?
他人のモジュールに頼るのは怠慢 そんなことではどんどん力が落ちていく プログラマーならimport使わずに作れ
ヒューッ
そういうこと 標準ライブラリもいつ何があるか分からないからな 全部自分で作るんだよ
GoとかDartとか皆笑ったけどあれが生き残りの戦略、そして本質だよ
他人が作った言語なんか使うから右往左往する プログラマーなら自分で作れ
いやむしろ計算機なんか使うな。筆算で。
でたな電卓ジジイ お前は算盤やってろ
Goはくるでぇ〜もう来てるけど、ビックウェーブが来るでぇ〜 動的言語はPython、静的言語はGoで決まりだ 一生懸命ステマしてたRubyは消え去るのみ、やっぱ本物しか残らないよねー
enumarateってよく使うんだけどさ 日本人にはなじみのない英単語だし つづりが長すぎて覚えられないんだよね enumとか短く定義し直して使うことってできないかな?
enumが3.4に入ったことを知った上での冗談に聞こえますが
def enum(x): return enumarate(x) これでできたっす 質問にストレートに答えてくれない人には幻滅するっす
君はこんな所に頼るべきではないよ 頑張ってくれ
>>537 >つづりが長すぎて覚えられないんだよね
X: enumarate
O: enumerate
>>537 補完してくれないの?
pycharm使ってるけど"e"だけで出てくるよ
以下の例のような連想複合配列を実装するにはどうすれば良いのでしょうか? a1 = ["aa", "ab", "ac"] a2 = ["ba", "bb", "bc"] ...... で、リストary内に、 ary = ["n1" : ["aa", "ab", "ac"], "n2" : ["ba", "bb", "bc"], .......] のようにしたいのですが ary('n1').append(a1)や ary('h1') = a1 などではエラーが出ました
ごめんなさい、書きまちがえました リストじゃなく、辞書でした
何がわからないのかよくわかんにゃい a = {} b = [1,2,3,4] c = [5,6,7,8] a['b'] = b a['c'] = c print(a)
>>539 enum = enumerate でもいいっすよ
>>543 >ary('n1').append(a1)や
ary['n1'].append(a1)
でももともと列挙はできるわけだしインデックスつけるのに何でenumerateなんだろう indexingとかじゃ駄目だったの
>>545 ,
>>547 ごめんなさい、出来ました
何故エラーになったのか分からなかったのですが、d['n1'] = a1の形で出来ました
お答えいただきましてありがとうございました
indexっていうありがちな変数名に被ることを避けたんじゃないの そう思ったからあなたもindexって動詞形じゃなくindexingって名詞形にしたんでそ
解決したならいいが art = {...} 中括弧にするか ary = dict([...]) この関数の引数にリストを与える
>>546 おおすげえ…組込関数を丸ごと別名に代入できるとは
こんなアクロバットなことできる言語が他にあるのか?
mapとかもそうなのだが、関数というものはカッコとペア
で使うものと思うタイプの人間には全く思いつかない応用だ
これなら引数にstart=があるパターンにも対応できる
ありがとうっす
関数が第一級オブジェクトの言語なら何でもできるだろ
むしろできない方がおかしいと思うのだが
Rubyのことだね
557 :
468 :2014/02/11(火) 19:58:38.33
>>528 MIDIやOSCは、他の言語でも大抵ライブラリあるんだけど、
楽譜では、LilyPond という綺麗な楽譜を作れるシステムがあって、
それを使った周辺ツールが秀逸 (music21, abjad, mingus 辺り)
DAW では、アプリ側で提供されてるAPI以外特に何も使ってない。強いてあげるなら ctypes
ソフト側で組込スクリプトのサポートがあってもなくても
外からマクロ・ツール等でオートメーションするTipsが横行してたりします。
> おおすげえ…組込関数を丸ごと別名に代入できるとは 関数系では, 古の Lisp の頃から, 当たり前
559 :
468 :2014/02/11(火) 20:07:20.78
〜続き オーディオ・信号処理方面では、主に C++使ってるけど Pythonでは、Guido が Audio File Format FAQ の著者だったりして 標準ライブラリにも名残があるね。waveとarray モジュールはよく使う。 scipy.signal辺りは、習得したいと思ってる。
>>558 C言語も関数を変数に代入できるから関数系である
そういうことなんですね
とてもよくわかりました
今まで使ったことがある言語でできないものは無かった。 割とメジャーな言語で、できないものってあるの?
>>561 そのできた言語を全て上げてみな
そんなにメジャーじゃないだろう
まず最初が日本語です
少なくともマイクロソフトBASICとCOBOLとVBAはできない Cもできないでしょ printfを変数に代入できるか?
>>561 できる:Python, JavaScipt, PHP, C, C++
できない:Ruby, Smalltalk, Java, C#
はっきり言って、メジャーな言語でも「できない」ものは多い
もちろん、できない言語もメソッドに値を適用(apply)できないだけであって、
クロージャや関数オブジェクトを使うことで同等の機能(=高階関数)は実現できる
ただし、
>>546 みたいに素直なコードが書けない、ってこと
>>564 >printfを変数に代入できるか?
できる
標準ライブラリの関数 sort が典型例
Cにできないのは無名関数(ラムダ式)だよ
JavaScriptで馬鹿みたいなコードが罷り通ってる一員でもある
ちんこがかゆいってやつと同じだな
Pythonのラムダで複文が書けなくて良かったと思ってる奴の数
無名セックスなら得意なんだけどな
lxmlって内部でunicode変換してるんだよね? EUC-JPの文章を渡す場合、文字化けしないためにはどういう風にすればいいの? 先に文字列をdecode('euc-jp')して渡して、出力時に文字化けはしなくなったけど、<xml>部分にencode宣言あった場合エラーが出るようになって... 文字化け対策するにはどうしたらいいの? lxmlに渡す前と後に処理する方法教えてもらえたらありがたいんだけど
>>564 ネタだろうけど
#include <stdio.h>
int main()
{
int (*va)(char *, ...) = printf;
fprintf(stdout, "%08x\n", va);
fprintf(stdout, "%08x\n", printf);
return 0;
}
>>571 <?xml の encoding という事であれば、
parser = lxml.etree.XMLParser(encoding="euc-jp")
root = lxml.etree.parse(io.open("test.xml", encoding="euc-jp"), parse=parse)
但し、バージョンが古いと非utf-8のXML読み込みでクラッシュする事もあったりした。
>>573 答えてくれてほんとありがとう
もしそれがlxml.htmlの場合はどうなるの?
parse()の引数にencodingがないからエラーが出るけど
基本的にlxmlの文字化け問題って、lxmlに渡す前にdecode('EUC-JP').encode('utf-8')を行った方がいいんだよね?
自分はそれやってるんだけど上手くいってないけど...('A`)
ごめん、自己解決した lxmlの問題じゃなくて 、その前に噛んでたモジュールの問題だった
>>566 >Cにできないのは無名関数(ラムダ式)だよ
C標準仕様には含まれていない(Appleが提案中)けど、
Blocks という仕掛けがクロージャに相当するから、
無名関数を値として引数やリターンで渡せるね
また Blocks はC言語拡張だから、C++/Obj-Cでも利用できる
詳しくは「ブロックプログラミングトピック pdf」でググルと、
Appleによる解説文書(日本語)が読める
objective-C!!!
IDEの話題ってあんまりでてこないね。 PyCharmってやつが使いやすかったのでおすすめしておく。 UIはモダン&シンプルな感じでゴテゴテしてなくてかっこいい。 動作もeclipseほど重くない。DjangoやFlaskも使える。 クラスとクラスの間は2行開けろ、みたいな コーディングスタイル(PEP8)のWarningも出してくれるとは思わなかった…。
解決したようだけど、まとめ書いておくと lxml.html の場合は、デフォルトのパーサ(lxml.html.HTMLParser)では unicode へデコードするだけでいい。 encode utf-8 は不要。 lxml.html でも XHTMLとして扱いたい(xpathで名前空間を使う)場合は、unicodeへデコードして、 parser = lxml.html.XHTMLParser(encoding="euc-jp") とXML同様にパーサを指定。
スクリーンショットを連続で撮りつつそれを表示する(合わせ鏡状態になる)ソフトを作りたいんですが、マルチスレッドにしないとダメですよね 交互にスレッドを機能させるようにするにはどうすればいいんでしょう?
>>578 俺もpycharm使ってるけど
やたらメソッドをstaticにしろって薦めてくるのはうざい
お前もstaticにしてやろうか
わかりにくいボケだなあ(誉め言葉)
selfって書かないですむから、staticにできるものはstaticにした方がいいんじゃないの?
他のメソッド呼び出したりインスタンス変数参照してないなら static にした方がいい IDEだったら自動でリファクタリングしてくれる機能とか付いてない?
>>582 ちょっと分かる なんかカーチャンに部屋掃除しろと言われてる気分になる
>>581 純粋にスレッド間通信の話だとすると、メッセージ・キューを使うのが定番。
自分で実装するなら、こんな感じ
* 同期キュー (標準ライブラリのqueue) を用意
* スレッドA: キャプチャーを取りその画像の情報をキューに入れる
* スレッドB: キューから画像の情報を取り出して描画
実際は、何かGUIツールキット使ってれば、
大抵はイベント通知の仕組みが提供されてるはずなので、
スレッドを作るのはキャプチャーを取る方だけでいい。
正直「交互に」動くならスレッドの意味ねーだろ
交互にお互いを呼べば済むよな
pythonでGUIを使うのに一般的に使われるライブラリってなんなの? pygameはjpgを読み込んでくれなくて諦めたんだが。
print "%04d" % 1 で 0001 と出力できますが、出力させるのではなく 変数 str に格納するにはどうすればいいですか?
設定値やパラメータを呼び出そうとした場合、 MySQLなどデータベースに接続するのと、ConfigParserにてファイルに接続するのとどっちが早い? 各件のパラメータもたかだか2つ位なんだけど、 それが1000件くらいあると思う ファイルだとそのコンピューター内に入れてられるからやっぱ早いよね? DBサーバにわざわざ毎回接続しなくていいし ファイルが更新されたらイベントドリブンでPythonを実行するサーバに送って上書きするだけだし タイムラグはあるかもしれないけど
ソケットでチャットシステムをつくってるんですが、画像とかファイルはどうやって送信するんでしょうか? バイナリで文字列として送るんですか?
>>595 ファイルベースのデータベースとして
sqlite3が有るけどこれではダメかな?
>>597 SQLiteって、確かにファイルベースだけど、
それを他のコンピューターに送った場合でも同じように挙動するの?
SQLiteってNoSQL並みに早いようだし、
それならLIKE文などで一致したものを
簡単に検索できるからありがたいんだけど
自分のやろうとしてた事のイメージとしては、
ファイルに各件のパラメータを記述し、
全コンピューターに送信
そしてmemcachedでもなんでもNoSQL系にイベントドリブンで登録
それをTrieなどで総当り検索...
とか思ってたんだけど、SQLiteからすると面倒だよね?
あと、ファイルサイズはやっぱSQLITEの場合結構大きくなるのかな? 圧縮出来れば送信時に問題ないかもしれないけれど
大学の実習か?
Python for Windows extensionsみたいにexeで配布されているライブラリを virtualenvの環境に入れる方法ってありますか? setup.pyがあるものもありますが、エラーがでてしまうのでexeでやりたのですが
ちょっとSQLiteスレ行ってきます
宿題を他人にやらせるような奴は良いプログラマになれないが良い経営者になれるかもしれない
PyCharmで if a == 0: continue みたいに1行で書くと怒られるんだが、みんな改行してるの?
ary = ("abc", "DEF", "xYz") r = "xyz" print r in ary でTrueを出したいんですが、どうすればいいですか? ary.lower()ではFalseとなってしまいます。
611 :
デフォルトの名無しさん :2014/02/15(土) 00:56:07.05
urllib2からhtmlファイル取得したあとに その中のjqueryで反応するボタン押した後のレスポンスデータ欲しいんですけど 可能ですか?
無理です
614 :
デフォルトの名無しさん :2014/02/15(土) 12:07:09.37
>>604 知り合いは、皆、そこそこの上場企業の社員になったよ
自力でやったヤツらは、大体が学者か技術者かニートになった
俺はたこ焼き屋の屋台主になったけどな
re.matchとre.searchの違いは何ですか? マニュアル読んでもよく分からないのですが
>>> bool(re.match('a', 'ab')) True >>> bool(re.match('b', 'ab')) False >>> bool(re.search('b', 'ab')) True >>> matchは探索対象文字列の先頭にパターンがないとマッチしない searchはどこにパターンがあってもマッチする
Falseの判定入れるのが面倒なので for p in re.findall(): でループするのが一番楽と気づいてから matchもsearchもめったに使わなくなった
公式のマニュアルに search() vs. match()って項目があったはず
例えば、ターミナルからpythonスクリプトを実行して、 $ python sample.py エラーが発生するとターミナル上にエラー内容が出てくるよね コレをファイル上に書き込みたいんだけど何かいい方法ある? スクリプト最初にtry-catchを書いて、Exceptionを書き込めば出来るとは思うけど、もっとスマートなやり方が無いかなぁと
import sys sys.stdout = open("result.txt","w")
python sample.py 2> error.log
あっ、ありがと
自分としては自分でスクリプト実行するより自動起動させたいと思ってたから、
>>623 の方法試してみる
>>624 もありがとね
例外なら標準出力ではなく標準エラー、 すなわちsys.stderrに書き込まれると思うけど あとsys.excepthookにデフォルトハンドラを設定したりもできるよ
itertools.takewhile について教えてください。 from itertools import takewhile a = (1,4,5,8,10) for i in takewhile(lambda x: x in a, range(1,10)): print(i) の出力は 1 となるんですが、これは↓と等価ではないのでしょうか? for i in range(1,10): if i in a: print(i) 1 4 5 8 takewhile に限らず、どこか間違っていますか?
>>628 読んでるんですけど、
>>627 で書いてるのと等価じゃないんですかそれ?
あと、
>>627 はほんとは
for i in takewhile(lambda x: x not in a, range(1,10)):
とやりたかったのでしたすんません。
>>629 else: breakが目に入ってれば等価だと思えるはずがない
結論:読んでるつもりなだけで読んでない
条件が成立している「かぎり」シーケンスを取り出す のと 条件が成立しているシーケンスを取り出す のは全然違うだろ
>>630 ,631
すいません、読んでるつもりになってました。
理解しましたありがとうございました。
loggingってどういう用途で使用するのが便利なんですか? DEBUG:root:でばっぐ INFO:root:いんふぉ WARNING:root:わーにんぐ みたいな情報出しても、殆ど意味が無いように思うんですが 皆さんはどのように活用されているのでしょうか?
>>581 からインスピレーションを得て同じLAN内にある別のPCの画面のスクリーンショットを撮り続け
それをサーバー(自機)に送信して動画っぽく見せる監視ソフトを作ってみたんだが、遅くて話にならなかった
こういうのはC#で書くべきだと改めて認識できたのは良かったが……
Dive into Python3 がめちゃくちゃ面白くてハマってるんですが こういう読み物としても面白い解説サイト、他にないですかね。おしえてくだはい。 Pythonに関係なくてもいいので…。
PEP8
>>633 小さなプログラムで使ってるとたぶんメリットないよ
規模が大きくなってくるとモジュールごとにフィルターしたりしたくなってくる
linux使ってるならsshdのログとかsyslog見てみ
あとは出力を切り替えたり複製したり コンソールにはinfoレベルで、ファイルにはdebugレベルで、errorレベルはメールするとか そういうのが必要ないなら全く無用の長物
639 :
デフォルトの名無しさん :2014/02/16(日) 13:18:29.35
四捨五入したくて round(0.25, 1) としたら、浮動小数点が原因?で0.2になったので round(25, -1) としてみたら、20になりました。 これは関数内で*10^-1して、計算してるのですか? 0.3が得られる方法を教えてください。
640 :
デフォルトの名無しさん :2014/02/16(日) 13:20:55.50
>>639 python3.3.3 でやってます!
今のところ自分で書くのみです 頑張ってください
decimal使えよ あれはあれでウンコ仕様だけどね decimalではroundじゃなくてquantizeメソッドで丸めを行う
decimalはなんか使いづらくて敬遠してしまう 普通の整数演算を完全10進演算にすりゃいいと思うんだが もうメモリの多寡やCPUの性能を気にする時代でもないだろ
例えばこのようになる >>> from decimal import * >>> d = Decimal('0.25') >>> d.quantize(Decimal('.1')) Decimal('0.2') >>> d.quantize(Decimal('.1'), rounding=ROUND_HALF_UP) Decimal('0.3') >>> な、一目でウンコだろ? こんなのroundのオプションでやらせろよ くど過ぎて眩暈がする
645 :
デフォルトの名無しさん :2014/02/16(日) 14:52:27.29
自分で四捨五入の関数作ればええやん
統合で比較する香具師は馬鹿
オススメのValidatorってありませんか? フォームだけに特化したものだけでなく、 HTTPの型だとか、ありがちな引数の型とかを検証してくれたりするものがあれば助かるのですが
649 :
デフォルトの名無しさん :2014/02/16(日) 16:22:10.05
re
あ、なんかmoduleとかオープンソースのとか既成のバリデーター教えてもらえるとありがたいです
たぶん、誰も
>>648 の質問理解できてないから、もうちょっとやりたいことはっきり書いた方がええよ
Pythonとは無関係でXMLに関する質問ならば、 Relax NG(RNG) や XML Schema(XSD) みたいな「XMLスキーマ定義言語」と それらの Validator を調べたらいいんジャマイカと 探せば、きっとPythionバインディングもあるはず....
"HTTPの型" が何を指してるのか解らないけど、anntools みたいなの?
Email,URI以外に何があるっけ? 日本語のコード番号\uXXとかを判定するとか 後はヌルバイトや特殊文字を除去、javascriptやHTMLタグを除去したりとセキュリティ面でのバリデート セキュリティ面でのバリデートは絶対に必要だね
俺はHTTPの型ってのが何なのか知りたい 夜も眠れない
resp.code == 404 的な話じゃないか
POSTとGETの判定か?と思ったけど、さすがにそこまでくると頭おかしいよな そんなもんVerb == 'GET'でいいんだから
みんなエスパー志望なのね ゆとりは放置でいいのに
でも
>>654 みたいなバリデーターあれば知りたい
PHPの方でnullバイト対策とかやってたけど、未だにセキュリティ面での確証が持てない
外部の人間だけでなくて、内部の人間のミスやいたずら等も管理したいからなぁ
何かそういうのでいいのある?
どっか他で聞いたほうがいいかな?
うん このスレ PHP の三文字だけでもう勘弁してくれ状態になってる
>>>year = 1868 >>>if year == 1868 ... print u"明治元年" ... 明治元年 というプログラムが本に書いてあったんですが このプログラムで、u"明治元年"のuはどういう意味ですか?
Unicode 文字列リテラル
>>662 みんなのPythonの第2版(あるいはもっと前?)を
ご覧のことと思いますが、第3版も目を通しておくとよいかと。
オブジェクトのリストから、特定のプロパティのリストを取得するには、 forで回して作るしかないのでしょうか? matlabのように p_list = [ obj_list.('name') ] という感じで、スマートに書くことはできませんか?
>>667 解答感謝です。
以下のようにして、実現できました。
p_list = map((lambda x: x.name), obj_list)
>>668 関数形式の標準演算子があるoperatorモジュールも併せてどうぞ
>>662 コードのインデントが投稿に反映されなかったんですが困った...
iPhoneブラウザBB2Cから半角スペース入力したんですが...
二文字以上連続半角スペースは無効なのか。
全角スペースは何故か日本語でも打てない。
Pythonなのではっきりさせておきたいです
>>664 本よくわかりましたねw
初版第三刷(2010年)です
誤植という事ですか?
二版になっても直ってなかったというのはちょっとアレですね。
↓全角スペース
↓全角スペースx4
クリップボードに入れておくと捗る
んで
>>662 は、if year == 1868: ←コロンが抜けているね
>>671 全角スペースありがとうございます!
辞書登録しておいたので次からできそうです
コロン忘れてました...注意しなくては
673 :
664 :2014/02/17(月) 01:38:26.21
>>670 言葉が足らずにて失礼しました。
第3版は2012年に発行され、
今後主流になると思われる
Python3系列に基づいた記事が書かれています。
旧版が対象とするPython2系列とは
結構な差異があって、
今回のように参考書を読むときなど注意が必要です。
674 :
デフォルトの名無しさん :2014/02/17(月) 13:38:20.77
pyenvはどこに置くのが適切なのでしょうか 一般ユーザの~/.pyenvにインストールしたのですが、rootから見えなくて困っています rootで入れなおすべきでしょうか
エラーハンドラの捕獲について聞きたいんですが、 try: print"エラー前" raise(Exception) #エラー発生 print"エラー後" raise(Exception) print"あなたエラー多すぎ" except Exception as e: func_for_error() #これをエラー発生の度に呼び出したい 上記のようなことはできないのでしょうか? 自分としては、エラー発生後、func_for_error()を実行し、またtryの中に戻る、 そしてprint"エラー後"などを実行させて、エラー後、またfunc_for_error()を実行 と繰り返していきたいのですが つまり、エラー発生しても上記のprintの内容を全部表示させたいのです try-catch文でなくとも、何か他の方法でも実現できないでしょうか?
>>674 起動するだけなら
/home/ユーザ/.pyenv/versions/バージョン/bin/python hoge.py
で出来るよ
rootで見えないのがわからんし、そもそもrootでアクセスしないといけないような環境構築しようとしてるのが不安です
>>675 3回try-exceptするんじゃだめなのか
それが嫌なら、エラー回数を引数に持つ関数か状態に持つクラスをつくる
>>675 例外を使う理由は?
そのコードだと raise Exception() する代わりに func_for_error() 呼ぶだけていい。
>>677-678 上のコードは例えの話でして
一つのファイル上にtry-exceptを何度も入れてもいいんですが、
それだとめんどくさいのと、汎用性がない、
また、予期しないエラーが発生した時に補足できない、
エラー時に処理が止まるというデメリットがあります
それを、その中で発生したエラーは補足しながら別ファイルに書き込みながら、
上から下まで一気にスクリプトを動作させたいと思いまして
全体を
def main():
でくくってしまい、
if __name__=='__main__':
try:
main()
except Exception as e:
func_for_errors()
などで出来ないかなとか考えていました
本当に例外的な状態なのか疑わしい
>エラー回数を引数に持つ関数か状態に持つクラスをつくる じゃあ、これでいいでしょ。だめなの? 正直、 何でtryの中でraise(Exception)してるのかがわからん
まあ下手の何とやらな気がするし深くは追求しない 勝手に好きなようにやってくれ
要するに on error resume next が欲しいってことじゃね
>>681 いや、それはわざと例外発生させて、その後でもprint文を実行させるように出来ないかということでraise()してます
>>676 今はそうしているのですが、それが普通なのですか?
他にrootでパスを通す、rootで入れなおすなどの方法がありますが(実際にやってないです)
どうするのが適切なのですか?
連投すみません。
>>677 rootになる目的はbottleでhttpのポート(80)で通信するためです
>>673 どうもです
自分も感じましたが初版は2系列中心に3系列も補って説明という形式になってて、ごっちゃになっててやりづらいです。
最新の仕様の勉強さえできればいい自分には三版が良さそうです。
import sqlite3 t = 'hanako' db.execute('SELECT * FROM dbname where name = ?', (t, )) は通るのですが、 s = 'dbname' db.execute('SELECT * FROM ?', (s, )) はエラーが出て通りません いわゆるプリペアドステートメントを実装したいのですが、どのようにすればいいのでしょうか?
>>690 s = 'dbname'
db.execute('SELECT * FROM {}'.format(s))
fromのあとってtable名やろ
ヒヒーン
python3でsqlite3を使ってるんですが、 commit()を実行すると、ごく稀に予期せぬ 「sqlite3.OperationalError: database is locked」というエラーが発生してcommit()に失敗します。 どういった原因が考えられるでしょうか? ソースコード中のいろいろなクラスからdb(xxx.sqliteという1つのファイル)にアクセスしていますが、execute('UPDATE or INSERT or DELETE うんたら') の後は必ずcommit() を行っています。dbがlockされているということに心当たりがありません。 どのオブジェクトがdbをlockしているのかを知る方法などないものでしょうか。d=(^o^)=b ちなみに、dbへの接続はオプションなしでやってます。 conn = sqlite3.connect('xxx.sqlite')
695 :
694 :2014/02/18(火) 21:18:06.91
694の続きです。 DBアクセスを行う複数のクラスのインスタンスが、 それぞれDBへのコネクション【self.conn = sqlite3.connect('xxx.sqlite3')】を持っています。 具体的には以下のようなコードになってます。 class A: def __init__(self): self.conn = sqlite3.connect('xxx.sqlite3') class B: def __init__(self): self.conn = sqlite3.connect('xxx.sqlite3') class C: def __init__(self): self.conn = sqlite3.connect('xxx.sqlite3') よろしくお願いします。
>>695 答えじゃないけど、1個のDBにConnectionオブジェクトいくつも作らないほうが安全そうに思えてならないけど。
class A:
def __init__(self, conn):
self.conn = conn
def main():
conn = sqlite3.connect('xxx.sqlite3')
複数接続とSQLiteのBEGIN DEFERRED問題かねぇ? 接続を一つにして各インスタンスにはカーソルを与えるとか isolation_levelをIMMEDIATEとかにするとか トランザクションをwithステートメントで制御するとか?
>>694 マルチスレッドだったりするのかな?
直接的な解決策ではないけど、接続はひとつにして複数カーソルを扱う方法に +1
アプリケーション内での使い方によっては自分で排他制御が必要
>どのオブジェクトがdbをlockしているのかを知る方法
lockのオーナーまでは解らないけど、
3.2以降なら connectionオブジェクトの in_transaction 属性がある
699 :
694 :2014/02/20(木) 02:30:11.92
皆さんレスありがとうございます。 接続(Connectionオブジェクト)を1つにして、 それをクラス間で共有する形に書き換えてみました。 一見問題なく動いたのですが、とある箇所でlockとは別のエラーが発生します。 というのも、複数のスレッド間でConnectioオブジェクトを 共有しようとすると怒られてしまいます。 「sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread.」 具体的に言いますと、 今、以下の2つのクラスから成るWebサービスプログラム作っています。 - クラスA:定期的に裏で動作してWeb上のデータを収集しDBに保存する - クラスB:ユーザーのリクエストに応じて、DBから情報を取り出し提供する A、B2つのクラスが同時に動作(マルチスレッド?)する際に、 複数スレッド間でConnectionオブジェクトの共有が発生してsqlite3エラーとなってしまいます。 ちなみに、Connectionオブジェクトの共有方法ですが、以下のようにやってます。 config.pyの中で、 CONN = sqlite3.connect('xxx.sqlite3') app.py(クラスA、Bが含まれるモジュール)の中で、 import config conn = config.CONN
700 :
694 :2014/02/20(木) 02:31:43.24
699の続きです。 >アプリケーション内での使い方によっては自分で排他制御が必要 この排他制御ですが、自分には実装方法の検討がつかずちょっと厳しそうです。 となると、こういう場合 SQLiteを使うのはあきらめて、MySQLなどの本格的な(?)DBを使ったほうが賢明ですかね…? >in_transaction 属性がある おお、これを使えば問題の切り分けが捗りそうですね。
馬鹿には無理
702 :
デフォルトの名無しさん :2014/02/20(木) 11:36:54.38
for i in sorted(dic.values()): print(i) 値でソートした辞書のkeyを順番にとりだしたいのですが、 上のように書くと値しかでず、.items にすると、キーでソートされます。 いい方法ありませんか?
sorted(dic.items(), key=operator.itemgetter(1)) # key=lambda item: item[1]
sorted(dic.items(), key=lambda x: x[1])
import MySQLdbで使える、python-mysqlってプレースホルダー存在しないの? cur.executemany('INSERT INTO books(title, price) VALUES(%s, %s)', [('Book A', 1000), # プレースホルダーは%s固定でかつクォーテーション不要('%s'とはしない) ('Book B', 2000), # INSERTは即時反映 (commit不要) ('Book C', 3000)]) 上はWeb上で見つけたんだけど、こんなやり方しかないの? sqlite3みたいに:placeとか?で置き返れたり これ、SQLインジェクション大丈夫なのかな? sqlite3モジュールの方ではこのやり方はSQLインジェクションの危険があるとか書かれていたけど >この時、クエリーを Python の文字列操作を使って構築することは、安全とは言えないので、すべきではありません。 >そのようなことをするとプログラムが SQL インジェクション攻撃に対し脆弱になりかねません。
String constant stating the type of parameter marker formatting expected by the interface. Set to 'format' = ANSI C printf format codes, e.g. '...WHERE name=%s'. If a mapping object is used for conn.execute(), then the interface actually uses 'pyformat' = Python extended format codes, e.g. '...WHERE name=%(name)s'. However, the API does not presently allow the specification of more than one style in paramstyle. だ、そうです。 残念でした。
>>699 スケーラビリティではなく、マルチスレッドとロックに関する問題なので、
データベースの変更は根本的な解決にならないと思う。アプリケーションの設計の問題。
可能なら、バックグラウンド処理は別プログラム/別プロセスに別けた方が楽じゃないかな。
書き込み専用の接続は isolation_level='IMMEDIATE' で作る。
読み取り専用の接続は 従来通りに。
====
マルチスレッドで作る場合、
データベース専用のスレッドをひとつ用意、その**スレッド内で**接続を作り
他のスレッドからは同期Queueを通じてスレッドとデータをやりとりするような仕組みを作る
標準ライブラリの queueが使えます。仕組み的には "task queue", "message queue" 辺り。
自分も今sqlite3触ってるとこなので、時間あったらサンプル書いてみる。
20〜24時の間だけ動いて、他の時間は何もしないアプリを作りたいんですが 現在時刻を一定間隔で取得して20〜24時以外の時はpassでよいのでしょうか?
何で? 色々とやり方あるけど、最も簡単なやり方としては、sleep()すればいいじゃん
>>705-707 えっ、escape_stringでいいんじゃないの?
ただ、最新版はそんなこともすることが無いと思うんだけど
皆はどうやってるの?
712 :
デフォルトの名無しさん :2014/02/21(金) 11:26:21.54
>>709 OSのスケジューリング機能を使った方がよくね?
>>711 アプリケーション層では、なるべく自分でescapeみたいなコードは書かない。
ORMやプレースホルダ任せ。ライブラリがきちんとしてるかはテストで確認。
715 :
デフォルトの名無しさん :2014/02/21(金) 22:07:05.31
ぼくオブジェクトDB派なんで
PHPこそ全部PDO任せで済んだ気がするが
>>714 みたいなのが通例で確実じゃないか?
馬鹿には無理
721 :
699 :2014/02/22(土) 02:21:01.23
>>708 前者の方法で書きなおしてみます。
皆さんいろいろとご丁寧にありがとうございました。
すんげー勉強になりました。
PHPからって時点でお察し
ぺちぱー
この2つの違いってなんですか?
どっちもwithの中を実行した後に、pageを閉じるっていう動作をするみたいだけど。
with closing(urlopen('
http://www.python.org ')) as page:
for line in page:
print(line)
with urlopen('
http://www.python.org ')) as page:
for line in page:
print(line)
725 :
デフォルトの名無しさん :2014/02/22(土) 12:06:32.71
なんでおれにきくの?
closing って普通にやっても通らないんだけどなにを import してるんだろう
>>724 Python3.xなら特に違いはない
2.xだとurlopenで戻されるオブジェクトはwith構文に対応していないから
下は__exit__が見つからなくて実行時エラーを起こす
>>726 contextlib.closingだよ
>>717 危険だと思うコードがあるなら、実際にテストを書いて試してみよう。
何か誤解してるけど、escapeしてない値を直接クエリに組み込んでる訳ではないよ。
>>715 の一番下のリンクに書いてある
Pythonの Database API execute(query, parameters) の項では
プレースホルダは、paramstyleの何れかが使える。値のエスケープについては、
注釈[5] によると、(parametersで渡す値には)エスケープを要求すべきでないと書かれてる。
> The client should not be required to "escape" the value so that it can be used
> - the value should be equal to the actual database value.
プレースホルダ内でのエスケープの扱いについては明言された文は見つけられなかったけど、
何れにしても実装が規格に準じてるかどうかは別の話なので、テストは必須。
733 :
デフォルトの名無しさん :2014/02/22(土) 19:34:25.60
ぺちぱー
>>721 不要に成ったかもしれないけど、マルチスレッドでSqlite3 database を扱うサンプル
ideone.com/GDlzCR
質問させて頂きます。 同一ネットワーク上にあるpcやスマホのipアドレス、macアドレスを取得したいのですがどのような方法があるのでしょうか? バージョンは2.7です またこのような処理は一般的にどのような名称なのでしょうか?トポロジー?
ARPをブロードキャストするだけじゃねーの 使うならsocketだろう トポロジー?学がないから知らね
default gateway に対して proxy arp だな
739 :
デフォルトの名無しさん :2014/02/23(日) 18:02:59.97
def hoge(*args): みたいな関数定義を見かけるんですが、 この「*args」ってなんなんでしょ?
(defun hoge (x &rest y) )だな
上に出てきたスレッドって全然わかんないんだけど テキストファイルを読んで加工してまたテキストファイルに 吐き出すような用途でPythonを使う限りは 知らなくても構わんですか?
ぜぇ?んぜん構いません
>>734 ありがとうございます!
こういう実用的なサンプルコード、ありがたいです。
Perlの'a'..'z'のようなa〜zまでの文字列を生成することは出来ますか?
考えたことなかった rangeで...無理か
「a〜zまでの文字列を生成する」ってどういう時に使うの?
for i in range(ord('A'), ord('Z')+1) でいけるみたいよ
範囲生成なら range 小文字の集合が必要なら string.ascii_lowercase
パスワード生成みたいなところでしか使ったことないな
私女だけど、python2.5のfloorの挙動について質問です。 例えば下記を実行すると、 import math i = 4481.4*430 print i print int(math.floor(i)) ↓ 1927002.0 1927001 という風に、1の位が変わってしまいます。。。どうすればよいでしょう? 本当に困っているので助けてください><;
>752 >>> 4481.4*430 1927001.9999999998 >>> math.floor(4481.4*430) 1927001 0.9999999998の差を許容できるなら、1も許してやれよ 0.0000000002の拘りは何の為に必要なんだ
>752 科学技術の計算だったら 有効数字とか有効桁数とかでググれ 浮動小数点数の掛け算の後の 丸めかたについて定石がある
>>752 まじれすすると
1927002.0 も
1927001 も
どちらも間違いです
python難しいです><; とりあえず、floatだとアレなんですね><; decimal使って解決しました><;
Decimalがあるとはいえ、まるで「使うな」とでも言うかのような使いにくさ 金融などのクリティカルな分野にはPythonは恐くて使えないねえ
最近のフレームワークはどれがいいの? Django、TurboGearなど 人気度、知名度ではDjangoだろうけど ライブラリ代わりではTurboがいいだろうし 他に何かいいの出てきてない?
そもそも金融、しかも金勘定に OSS って相当チャレンジャーだろ うちだとまず無理だわ
挑戦なき成功、存在せず
COBOL!! COBOL!!
プログラミング言語以前に計算機がどんな原理で動作してるのか理解してないんだろう
知らなくてもプログラム書けるし
こうやって原理を知らなくても何とかなると思ってるゴミが猫を電子レンジで乾かそうとするんだろうな
>>765 すごいバカ
レジスタなんたらフォンノイマンなんたら知らなくてもプログラムできるし、
「そういう人は電子レンジで猫なんたら」
ってなんて馬鹿な飛躍。
きみ、専門学校出のおばかさん?
767 :
デフォルトの名無しさん :2014/02/25(火) 07:17:51.65
>>766 みたいに何一つ知らないのが一番幸せなんだろうな。
>>765 君は言語空間の原理と実装の実際の区別がついていないおばかさんなんだよ
だから専門学校レベルか、三流大学ベルだね
例えばLispの関数carを
ドシロウト向けの嘘の解説として
「関数carはリストの一番目の要素を得る関数」
なんていう。
(car ’(1 2 3 )) → 1
しかし、、言語の原理から言うとそれは「S式操作上ではそう言える」だけであって、じつは
「関数carはCellのCAR部のポインターが指すものを示す関数」
となる。
プログラムリストとして表れるS式は
アトムまたはリストであるが、言語の原理としては実はリストなどそんざいせず、あくまでアトムと(コンス)セルがあるのみである云々云々。
そこまでで良いのであって、それ以上ポインターのフォンノイマン型コンピュータにおける実装の実際など知らなくてよろしい。
土方制御プログラムをアッセンブリー言語で組むのとは違うからな
>>766 お前も中学生くらいになったら分かるよ。
お前が結局「知らなくてもプログラミングできる」の一点張りなこともな。
電子レンジの仕組みなんから知らなくても調理はできるからな。
>>769 隠蔽もしらなそうだな
馬鹿丸出し
あ、パイソンスレか
じゃ、バカ多くてもしかたない
わはは
>>768 内容は肯定も否定もしないけど、Python超初心者スレなので
例はlispじゃなくて超初心者向けのPythonで書いて欲しい……
『Py厨はドカタの中の最底辺だから 標準レベルの知識を要求される場面に遭遇するこはない。 またドカタから脱出する機会めない。 よって計算機の仕組みを知る必要はない。』 これが一番説得力あるしケイサンキノシクミガーを論破できるだろ。
小学校の運動会のプログラムか?
いや トルネード(tornado)
776 :
772 :2014/02/25(火) 07:49:57.22
計算機の仕組みがどうのとほざいてたボンクラはどこいった? ほら、反論してみろや。
777 :
772 :2014/02/25(火) 08:14:06.52
反論できないから逃げたのか?
ほっとこう Lisp使いには、Emacs・Vim使いと同様に 変な特権意識持ってる香具師がいるんで 初心者スレで暴れることが快感なんだろう
フレックスもない底辺遠距離通勤ドカタだから出勤したんですよ
780 :
デフォルトの名無しさん :2014/02/25(火) 09:07:45.23
一方pythonは毎日会社で椅子を並べて寝るデスマドカタのため通勤の必要がないのであった
床で寝てる漏れは勝ち組
>>776 おやおや知的大衆層まるだしの表現だな
低偏差値層の興奮は恥ずかしいぞ
わはは
ヴァカの相手するわけ無いだろ
一人で踊ってなさい
負け犬の遠吠えにしか聞こえないけど
何で急にレス伸びたのかと思ったら 案の定...
785 :
デフォルトの名無しさん :2014/02/25(火) 15:32:04.97
言語を1つしか憶えられない低脳が 他の言語を嫌悪する*\(^o^)/* それぞれ使い道があるでしょ デスクトップアプリはJavaには不向きで 起動時に大量のクラス読み込むので遅くてイライラ、でもサーバアプリにすればずっと立ち上がってるし快適 何十年も運用するなら昔なら軍用のAda、今どきならHaskell? Pythonは正直大規模開発やサーバには向かんと思う。 でもIPythonみたいに簡単にノート使えて小さなモジュール単位で結果みながら便利に使える自分の道具には最適*\(^o^)/**\(^o^)/* Sage Mathとか色々な言語で作られた数字ツールをPythonでまとめた傑作だと思うよ
Pythonで変数が設定されているか調べるにはどのようにすればいいですか? PHPでいう、if(isset($var)){}のような事をしたいのですが
>>786 if "value" in vars(): # @see also builtin-in locals(), globals(), hasattr()
value = 0
のような事は出来るけど、このようなコードは、
静的検査で困る事が多いので、なるべく避けた方がいい。
value = None
if value is not None:
...
と未設定値としてNoneを利用するとか、関数のデフォルト引数を使って工夫したり、
状況によっては、辞書の利用の方が適切かもしれない。
本当に未定義な名前を参照する可能性がある状況なら、NameErrorを捕まえる。
例)
try: # for 2.x/3.x compatibility
range = xrange
except NameError:
pass
has_attr()
hasattr()は2つの引数必要とするじゃん もう一個はどうするの?
>>> a = 5 >>> b = 6 >>> hasattr(__import__('__main__'), 'a') True >>> hasattr(__import__('__main__'), 'b') True >>> hasattr(__import__('__main__'), 'c') False
>>789 同じような用途でよく使われるので、
参考に調べてみてはと思って書き流しただけ。
モジュール内のグローバル変数が想定だけど、
一応、import __main__ で、自分自身をモジュールとして参照できる。
用例) ./Lib/smtpd.py
わろす
笑いの沸点低いね
794 :
デフォルトの名無しさん :2014/02/25(火) 21:41:15.31
ぺちぱー
オススメのテンプレートエンジン教えて Apacheとかと簡単に連携できて、レンダリングも簡単なのがいいんだけど
Pythonやるとsublime text好きにできるからいいな
>>795 pystache
テンプレートエンジンはApacheとは関係ないと思う
jinja2じゃないの?
tenjin
tenjinは糞
皆はサーバサイドでPython動かす時ってどうやってる? 自分で、Apacheとmod_wsgi使って書いてる? それともDjangoなどフレームワークを利用してる?
tempita
temjinは俺の友達だ 俺に逆らうとおまえら 市ぬぞ
本気出して作るなら今の定番構成は Apache/nginx-gunicorn/uWSGI-flask+jinja2/django でしょうね。 アプリケーションサーバーを切り離さないとスケールしにくいので。 個人的なものは手軽さが大事なので ・bottleのみ ・nginx-bottle+flup で作ります。 手狭になったら最初の構成で書き直します。
>>801 Apache/mod_wsgi/Python3
nginxってよく見かけるんだけど何なの?
りばーすぷろきしとえいちていていぴーさーばがいっしょになったもの
ありがと
乱数作る時って、Cでやるように、時間をseedに与えてから作るよな?
>>809 randomモジュールでは、Randomインスタンスの初期化時に呼ばれてるので、
明示的にseedを設定する必要がある用途でなければ、自分でseedを呼ぶ必要はない。
811 :
デフォルトの名無しさん :2014/02/28(金) 12:28:21.02
pyvenvで仮想環境作るとき、プロジェクトディレクトリに作るのっておかしいですか? ~/projects/hoge というディレクトリがあったとして ~/projects/hoge$ pyvenv pyvenv とやってます。プロジェクトディレクトリ外に適当なディレクトリ作ったほうがいいんでしょうか? たとえば mkdir ~/pyvenv として ~/pyvenv$ pyvenv プロジェクト名 みたいな。
>>811 virtualenvwrapper使ってると後者になるけど、
プロジェクト単位の環境構築では zc.buildout の併用が適してるかも。
プロジェクト下にvenv環境を構築すると、
* プロジェクトのバージョン管理
環境を管理対象に含めないような設定をする事になると思うが、
その部分はユーザの環境依存な設定になるので、レポジトリ公開する場合は好ましくない。
* プロジェクトを別環境でテストする (tox)
* 複数プロジェクトで同じ環境を使いたい
のような場面で、困ったり手間だったりする事があります。
そのうちパイソンやるかな おっぱい好きだし
>>811 みたいなヴァカは本当にプログラムに向いてないな。
816 :
デフォルトの名無しさん :2014/03/01(土) 10:10:27.73
PythonのModuleを読み込むパスが、/usr/lib/python2.6/site-packages/は通っているのですが、 /usr/lib64/python2.6/site-packages/は通っていません これはsys.path.append('/usr/lib64/python2.6/site-packages/')をスクリプト内で毎回記述する方法以外はないのでしょうか? /usr/lib64/python2.6/site-packages/内も読み込んでデフォルトで欲しいのですが、何か他の方法があれば教えていただけないでしょうか? Pythonはデフォルトで入っていたか分かりませんが、yum install pythonは行いました
817 :
デフォルトの名無しさん :2014/03/01(土) 10:16:26.90
ごめんなさい、勘違いでした /usr/lib64/python2.6/site-packages/も読み込まれていました
>>812 ありがとうございます!
プロジェクトディレクトリに含めるのはやめることにしました。
820 :
デフォルトの名無しさん :2014/03/02(日) 02:17:22.00
python3.3.1 tkinter8.5 Entryに英数の入力はできるのですが、日本語入力ができません。 何か方法ってあるんでしょうか?
>>820 特に何も。最近は、普通に出来てる(win32,linux)けど、環境によって違ったりするのかな…
考えられる原因は、組み込まれてるTcl/Tkのバージョンが古いとか
俺今大阪にいるんだけど、なんにも面白くない 京都は昔からクソだし 時間の無駄だ 家でプログラミングしてる方がずっとマシだ
>>822 みさき公園で海見ながらプログラミングすると癒されるよ
浜寺公園でもおk 南海に乗って出掛けるのおすすめ
ぴちぴちビーチもいいぞ
なんとなく昭和のセンスを感じる相性ですね
python CGI Aでsubprocessモジュールを用いて別のCGI Bをコールしたいと考えています。 BはAで出力したcsvデータをreadしcsvとしてダウンロードさせるものです。 ("Content-Type: application/download") proc =subprocess.Popen("python ./download.cgi",shell = False).communicate() 上記のようなコードを書いたのですがcsvとしてダウンロードされません。
試しに同様のコードのテストプログラムを書いたところ 標準出力の形で出力されたため、Bの読み込みはできているようです。 ただ、csv形式でダウンロードされないと意味がありません。 subprocess.Popenでcgiとしての動作をするよう呼び出すにはどうしたら良いのでしょうか。 普通にform actionでコールした場合はcsvで出力されます。
830 :
デフォルトの名無しさん :2014/03/03(月) 00:20:48.67
pythonはviewvc以外では触ったことすらないから知らないけど Aでファイルにcsvの中身出力してるなら Bではhttpヘッダの後にそのファイルの中身読んで送ればいいんじゃねーの
>>830 ご回答ありがとございます。
まさしく仰るとおりB側ではContent-Typeをapplication/downloadとして
ファイルを読み込みし、ダウンロードさせています。
BをCGI Aのform actionで呼び出した時はcsvのダウンロードが始まるのに
subprocessで呼び出した時はcsvダウンロードではなく標準出力?
での処理が始まっているようで困っています。
>>831 サブ・プロセスのstdoutに出力されてしまってるからかな
* そのままstdoutに流してもいいなら Popen の引数に stdout=sys.stdout を追加。
* communicateの戻り値でcgiの出力するデータを受け取りたいなら stdout=subprocess,PIPE を指定
>>831 別言語なのかなと思ったけど、よく読むと両方Python
わざわざ別プロセスにして呼び出さなくても、
両方から使う部分を関数にし、モジュールに纏めて、importして使おう。
Pythonプログラムをエディタのginnieでつくろうと思っているのですが、 tkで作ったGUIプログラムの方はginnieのツールにPythonw.exeを登録して ツールの実行で一発起動できるのですが、CUIのプログラムを同じように python.exeで登録しても、一瞬起動するだけで、落ちてしまいます。 どうしたら、コマンドラインが実行しても落ちないようにできますか? よろしくお願いいたします。
落ちて? コマンドプロンプトが開いて実行して終了してコマンドプロンプトが閉じてるだけじゃなくて?
>>834 CUI用スクリプトにAny keyに準じた処理を書くとウインドウが閉じない
2.xでは
raw_input('Press enter to continue...')
3.xなら
input('Press enter to continue...')
>>834 pythonのオプションに -i を付ける
(スクリプト実行した後にインタラクティブ・モードになってプロンプトが維持される)
>>835-
>>837 みなさんの言っている通りの状況です。
>>837 そのやり方で試してみると、python立ち上げてウインドウが落ちない
のですが、-iのあとに-i%f%nなどとパラメータを設定すると落ちてしまいます。
どんなコードでも実行後、処理が終わってウィンドウが閉じないようにしたい
のですが、どうしたらよいですか?
それはginnieのツール設定でできることなのでしょうか?
pythonの問題じゃなくね?ginnieの作者に聞けよ
馬鹿には無理
841 :
デフォルトの名無しさん :2014/03/04(火) 12:10:41.18
pause
>>838 試してみた。パラメータの所に -i %f で出来たよ。
パス内のフォルダ名にスペースとか含まれてない?
ginnie側のコマンド呼び出しで、パス等が適切にエスケープされてない可能性がある。
print u"Hello World".encode('utf8')
>>843 エディタの文字コードと全角で Hello World 入力しちゃってないか確認
テキストファイルの先頭にBOMがついてる
>>842 >パラメータの所に -i %f で出来たよ。
試してみたら、見事出来ました!!
2ちゃんで聞いても、馬鹿にされるだけで、きちんと教えてくださる方は
少ないので、大変感謝しています。ぶっちゃけ、\1000位ならお金を
払ってでも教えてほしいと思ってたぐらいです。本当に有難うございます。
わざわざ試してくださったようで、本当にお手間を取らせました。
有難うございますm(_ _)m
さあて、今日も気持ちよくバカにするかな なんでも聞いていいよ! 柔しい俺
849 :
847 :2014/03/04(火) 21:57:07.02
>>848 お言葉に甘えて。
入出力をコマンドラインにした場合についてなのですが、
raw_input()で取得した文字列は、一体どういう状態で取得されているので
しょうか?
コマンドラインで使用している入出力がcp932なら取得した文字列もcp932に
なるのでしょうか?また、cp932とShift-JISやUTF-8とはどう違うのでしょうか?
私の環境では
#coding:Shift-JIS
としてファイルをShift-JISで保存し、
X=raw_input()
if X== "てすと":
print u"おっけ"
などとすれば上手く想定通りの動作をするのですが、
Shift-JISをUTF-8に全て書き換えて保存しても、同じことができません。
これはコマンドラインで使用している文字がShift-JISになっているということでしょうか?
どうも日本語の処理がいまいち理解できません。
長いですが、宜しくです。
な、調子に乗るだろ?
cp932の文字列などというものは存在しない それどころかshift_jisもutf_8も存在しない エンコーディングはstrをどう解釈するかの指定子だから raw_inputで得られる物は単なるstr
>>849 raw_input()は実行環境に依存する
"てすと"は#coding:Shift-JISに依存する
でも、Python3使えば文字コードに悩まされることないよ
マジか? 何で?
>>851 それは違う
ターミナルの文字コードが CP932 なら raw_input() して読みとったバイト文字列も
CP932 でエンコードされている。print repr(raw_input()) とかすればわかる
また#coding:はソースコードのencodingをインタプリタに伝えるだけの役割 ソースコードのエンコーディングが変化すれば極当たり前にstrリテラルも変化するが それは#coding指定子がやってることではない
>>853 input()の返り値も"テスト"も特定の文字コードに依存しないから
>>854 その「エンコードされて」どうなってるのか言わない物言いはわざと?
正確にはcp932でエンコードされたunicodeね。
Pythonで文字列の話をする時はstrなのかunicodeなのかはっきり喋ってね。
>>857 CP932 でエンコードされているって書いてあるじゃん
str と unicode の区別も「バイト文字列」と書くことで区別つけたつもりだけど
てか初心者にPython2勧めるバカがこの手の質問引き受けろよ
862 :
デフォルトの名無しさん :2014/03/05(水) 12:24:55.12
class Base: class Meta: hoge = true class Custom( Base): class Meta: foo = false こうするとBaseクラス内のMetaクラスのhogeをCustomでは引き継げないようです。継承したクラス内のクラスを継承する方法はないでしょうか?
当たり前だろ 参考書でも買ってきて読めよ 普通にやり方書いてるだろ
864 :
デフォルトの名無しさん :2014/03/05(水) 13:49:49.48
英語で十分です
最近のオラの翻訳速度だと2年
>>862 突っ込みどころが多すぎてどう答えようか迷うけど、敢えて言うとしたら
>class Custom( Base):
の(の後のスペースは無くした方がいい
pathlibよく見るとUNCパス使えるようになってんじゃん すげえな 100%使わないけどw
pathlibよく見るとglobで**が使えるようになってんじゃん これ地味に欲しかったんだよね
これでglobがエスケープできればパーフェクトなんだが やはりそうは問屋が卸さなかった しゃーない、ここだけは書き換えて使おう
871 :
デフォルトの名無しさん :2014/03/06(木) 02:04:51.76
>>866 オライリーがPythonの本を日本で発売しないのは売れないからなの?
web関係の本なら需要があると思うんだけど。
pythonに精通した翻訳家がいないんじゃね
Ruby関係者による無言の圧力
幾ら貰えるんだろうか? 翻訳してやってもいいけど どうせPythonユーザは日本では少ないから印税が何%くるのか知らんが、殆どもらえないだろうな 俺が70か80位になった時には社会貢献のために色々と翻訳してやるよ あと50年位後の話だがw
875 :
デフォルトの名無しさん :2014/03/06(木) 04:28:29.58
専用の翻訳プロジェクト内で使えるように原文提供してくれるならともかく 自分で買った上にスキャンとか入力してまでは無理だわなあ
876 :
デフォルトの名無しさん :2014/03/06(木) 06:10:19.86
書籍代の2〜3倍払えば翻訳してくれるようなサービスを誰かがやってくれたらいいのに。 一度翻訳してしまえば2軒目からの依頼はほぼ純利益。 需要はあると思う。 まあ、権利がらみで出版社からウダウダ言われる可能性もあるけど…。
Flask 本は Blog の記事に加筆したものらしいからそっち見てみたら? 公式のチュートリアルで足りる気もするけど
元の書籍の著作者から翻訳権の利用許可を得る必要があるな。 公開権や複製権、譲渡権も絡む。 個人レベルじゃ話にならないな。
879 :
デフォルトの名無しさん :2014/03/06(木) 10:39:49.82
翻訳の改訂ならともかくゼロからだと大赤字だからな 純利益の前に死ぬな
画像を連続表示する程度のGUIでもJavaで書いた方がPythonで書くより劇的に早くなったりすんの?
GUIだって画像処理だってPurePythonとは限らんし、その問いかけに大した意味はねえな ボトルネックを早い言語で書けば速くなる
882 :
デフォルトの名無しさん :2014/03/06(木) 18:46:41.06
pypy使え
俺が知らないだけで、Pythonの質問スレには
>>862 のような釣りのパターンがあるの?
プログラミングしたことない友達にPythonやらせたいんで、 受けそうなソフト作りたいんだけど、どういうのがいいかね スゲエ!自分も作りたい!って思うようなものを……
>>884 tumblrからエロ画像をダウンロードするソフト
モジュールの導入にwebアクセスからスクレイピング、正規表現にローカルファイルの読み書きと満遍なくやれるよ
そんなこと、強制するものじゃない やりたい奴がやればいいのであって、ありがた迷惑だ
すべての道はエロに通ずって
886は884に
エロエロえっ債務?
エロエロエッサイム エロいと思ってた
Pythonを始めようと思うんですが、2を選んだものとして話を進めている 公式サイトの文章執筆時期が少し古いのが気になります。 確かに私のlinuxに入っているのも2なのですが 今から始めるにしてもやはり2なのですか? ちなみに用途としては、自分用の細々とした用事を満たせる 簡単なプログラムを作るという程度のことで、あまり複雑なことはやらないつもりです。
3にしろ
そりゃ最初から入ってるものを使うのが一番手軽ですよ 用途が具体的でないので2でも3でも好きなほう使っていいです
使いたいモジュールがまだ2しか対応してないとかなら2 そういうしばりが無いなら3じゃないか?
4は?
4でimport bracesが使えるようになる
メジャーなフレームワークやモジュールはPython3対応されてる もし、使おうとしてるものがそうでないなら、他のもの使った方がいいと思う
分かりました、ではPython4を使ってみようと思います
日本語とか気楽に使いたいなら3だとおもう。 既存のコードの書き直しを考えずに、 頭切り替えて新しいスクリプトは [2/3] で書こう、ということだけなら 移行はそれほど大変ではないと思うので、あまり気にしなくてもいいかもしれないけれど
いやここはperl6で
901 :
デフォルトの名無しさん :2014/03/07(金) 09:45:55.95
団子がいい
pip easy_install Distribute setuptools の違いや、使い分けがよくわからんです ド初心者にわかるように教えてくり
easy_install は setuptools を使いやすくしたラッパー pip は Distribute や easy_install ( や setuptools ) を駆使したアンインストーラ付きのラッパー 間違ってたらスマソ
905 :
903 :2014/03/07(金) 11:34:00.62
補足すると使い分けとかしなくていい pipとvirtualenvだけで、個別の環境構築できる 個別の実行環境つくらなくていいならvirtualenvすらいらん 1.pip入れる 2.pipコマンドでvirtualenv入れる 3.virtualenvコマンドで個別の実行環境なり、パッケージ環境を作る 4.sourceコマンドで3の環境を立ちあげ
2.7と3.3を両方インストールしてvirtualenvする場合は 2.7と3.3のどちらを先にインストールするのが良いですか? あとvirtualenvをpipするのは2.7と3.3それぞれで必要ですか? どっちで実行すればいいですか? unix/windowそれぞれの場合についてお答えください
うるさい、まず自分で試せ
なんだお答えくださいって 義務かよ
まず国語を勉強したほうが良さそうだなw
まあ国語は別途勉強していただくとして windowsは2.7を入れてから3.3を入れる unixはどっちでもいい virtualenvをpip installするのはバージョンごとに必要 pipを入れるのもバージョンごとに必要
>>910 >virtualenvをpip installするのはバージョンごとに必要
>pipを入れるのもバージョンごとに必要
片方だけでいいよ
912 :
911 :2014/03/07(金) 21:49:42.79
pipの方は正確に言うと明示的に入れるのは片方だけで、virtualenvで環境作る時に勝手にいれてくれる
最近の質問はPHPスレを遥かに下回る低レベルさ とんでもないど素人たちがPythonに流れ込んでるのかな? こりゃPythonやってる奴らは一番馬鹿にされそうな気がしてきた
914 :
911 :2014/03/07(金) 21:57:01.81
>>913 プログラミングを学ぶ最初の方の言語にPythonを選択する人が増えてきたっていうことなんじゃいかな
名前残ったまんまだった。特に意味無いからきにしないでください
>>913 気のせい
ここは元から(超)初心者さんが質問しに来るスレ
くだ質スレなんだから、別にくだらなくてもいいじゃない 自分はPythonでプログラミング始めたけど、くだらない質問してたし助けられたよ 手当たり次第ググってプログラミングするよりかはましだと思う
918 :
デフォルトの名無しさん :2014/03/07(金) 22:24:01.28
超初心者用と名の付くスレで初心者を見下すようなレスってどうなんだろう。普及して欲しくないとでも思っているのだろうか?だとすれば利用者人口を増やそうと貢献してくれている人たちが可愛そうだ。
ちょっとわかるようになると初心者馬鹿にするあれだろ 超初心者用なのに文句言ってる奴は
初心者だからって、バカが許されるわけじゃないでしょ まずやる事やれってこと
>>920 それなら馬鹿にするんじゃなくて、その
>やる事
を教えてあげればいいじゃない
最近「プログラミング始めるにはPythonが最適!」みたいな話が増えてるからね 池沼みたいな質問が増えてくるよ 初心者がPython触るのは本当鬱陶しいからやめてほしいね
裾野は広げた方が良いと思います。
ですので初心者の方がPython触るのは歓迎です。
Pythonの初心者嫌いの
>>922 さんがここに来る理由が分かりません。
>>922 さんは初心者の方の質問を無視すれば良いだけなのでは?
>>922 さんは会社でも不満や否定形の話ばかりする方と思います。
相手の欠点・至らぬ点をあげつらう事に喜びを感じるのでは?
初心者に冷たくしないでみんなで助け合ってPythonを広めよう 人にアドバイスしてこそ心が清くなりスキルも上がるというもの それは君の人生にとって大いなるプラスとなるだろう
>>920 そう、俺はそれを言いたいんだよ、自分たちで質問してるのにまるで自分たちではないように振る舞って書き込んでいる質問者たち!
ググるより聞いたほうが早い?
馬鹿か
PHPerですら自分達で考え、四苦八苦した上で質問してる人が多いのに、ここは自分で試すの、検索するの面倒くさいから聞こうっていう性根の腐った奴らが多い
javaScript系のスレにもこういう馬鹿が出没するんだけどな
Pythonスレに限らずゆとりが馬鹿な質問しても優しく丁寧に答えてもらえるみたいに思ってたらそれは間違いだが
情けは人のためならずやで
それじゃあ、もうこのスレッドはいらないね
そうだね 次スレは立てないように
>>923 俺は
>>922 じゃないが、ゆとり的な思想が好かんのよ
あ、Pythonって今まで極めてマイナーだったからPython使ってる人間の多くはゆとり世代か...
日本でのちょっと先が思いやられるな
PHP以下の評価受けそうだ
Pythonに初心者が来るのはいいんだが、ここ最近の質問の質の低さはひどすぎる
>>925 くだ質スレ質問する時なんて、ググって得られた情報が正しいか判断できないでしょ
わからん→ググる→動いた→やったぜ
これのほうがまずいでしょ
2.4 以前ならともかく今まで極めてマイナーだったとか言われると当惑しちゃう
>>931 それなら、「ググってこうやって動いたけど、これで合ってますか?」って質問すればいいだろうが
納得
>>913 ESRに釣られたアホが真っ先に弄るからな
>>わからん→ググる→動いた→やったぜ コレでいいと思う 自分で調べて確かめてみるって事が大事だし、それが勉強ってもんだ そうやっていって自信付けていけばいいし、みんなそうやってきた 考えもせずに安易に答えだけ聞いても勉強にならないよ
よし、オナニーでもしよう
ESRって何の略? コンデンサとかしか出てこなかったけど...
>>933 >わからん→ググる→動いた→やったぜ
のあとに、わざわざ2chで質問する人は限られてる
>>936 それがPHPの悲劇
脆弱性含みまくりのチュートリアルが拡散されてるよ、今も。
>>939 流石にセキュリティの入門書ぐらい読むだろ
>>939 PHPはセキュリティ対策の本も出ているし、Web情報もある
よっぽどの馬鹿じゃない限りそんなのを素のまま使わない
ましては企業で
WebサイトでわざわざJava使う馬鹿は頭がおかしい 銀行系とかならわかるが
JSPが安定して一番はやいよ
それは分かるけど、めんどいじゃん 俺Java嫌い 俺の中ではCより面倒くさい 楽さで言えば絶対にPHPだな 俺はセキュリティ対策なんか今までの経験で全部ライブラリ化してるから実装はすぐ
946 :
デフォルトの名無しさん :2014/03/07(金) 23:53:43.19
本で学習→疑問→ググる→英語圏のページ→2chで質問→ドキュメント読め→理解出来ずに聞く→罵られる→未解決→最初に戻る 数回のループ後、Rubyへ。
馬鹿は振るい落とさないとPython使いのレベルが下がっていくからな
ワラタw でも案外そっちの方がそいつにとっても良いのかもよ
950 :
デフォルトの名無しさん :2014/03/08(土) 00:16:48.60
フレームワークのValidationやSecurityの項目も見ないニートの溜まり場
なんもかんもフレームワークと言ってるお前は初心者 PHPer達ですら、フレームワークから独立しているのに フレームワークを使うのは弊害もあるってことだ
やれやれ、ゆとりはこれだから困る
Python = ゆとり言語の日も近いな
もう既にそうなっていると思うぞ 先行きは暗いかも
最初から教育目的で作られた言語だろ
もういちいちツッコむのも面倒くさいよ・・・
>>951 その弊害を答えられないとニート決定だね!
これが俗に言われる、ゆとりである
高齢ニートの集まり?人生詰んだね!首でもつれば?
965 :
デフォルトの名無しさん :2014/03/08(土) 00:56:56.04
>>956 クリスマス休暇の暇つぶしが目的だったと書いてあった。
967 :
デフォルトの名無しさん :2014/03/08(土) 02:32:06.13
>PHPerですら自分達で考え、四苦八苦した上で質問してる人が多い だうと
自分は古いBASICとCOBOLしか使えないオサーンでしたが Pythonはこれらの言語が持つ懐かしい香りがするため使えてます C系構文にアレルギーがある人にオススメの言語です
???「Pの付く言語は糞ですよ」
http://ideone.com/4ynloD Twitterからタイムラインを読み取ってターミナルに表示し、
ついでにツイート内のリンク先が画像なら保存して表示するというスクリプトを書いたのですが、スレッドを使うと何故か凄まじい数のエラーが出てしまいます。
これは何が原因なのでしょうか?どうも何か根本的な間違いを犯している気がします
あとTwitter特有の短縮リンクのせいで一々リンク先に飛ばないと確認できない糞仕様ですがこの際そこはどうでもいいです、後でGUIアプリに作り直します
ソースコード貼ったのは評価してやるよ でも根本的にエラーを張らない時点で0点だな テストで名前を書いてないに等しい
ちなみに原因はよくある奴で 「GUIを操作していいのはGUIを作ったスレッドだけ」 を犯しているものと思われる 読まなくてもそのくらいは想像がつく
>>971 文字数制限に引っかかっちゃいました
2014-03-08 09:12:40.749 Python[4368:2d17] *** Assertion failure in +[NSUndoManager _endTopLevelGroupings], /SourceCache/Foundation/Foundation-1056/Misc.subproj/NSUndoManager.m:328
An uncaught exception was raised
+[NSUndoManager(NSInternal) _endTopLevelGroupings] is only safe to invoke on the main thread.
こういうのが延々と羅列されています
Exceptionがcaughtされてないということしか理解できません
974 :
デフォルトの名無しさん :2014/03/08(土) 09:23:45.15
インターネットしてたら出てきた職探しの広告のキャッチフレーズ >スキル・キャリアを最大限に生かせる >JAVA・PHPエンジニアの派遣 スキル・キャリアを最大限に生かして派遣かよwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
いやideoneとかpastebin使って貼ればいいんだろ。
実際ideone使えてるんだから少し考えようぜ。
で、原因書いてありますね。
>is only safe to invoke on the main thread.
>>972 で確定。
>>970 >Twitter特有の短縮リンクのせいで一々リンク先に飛ばないと確認できない糞仕様
短縮リンクが糞なのは同意ですが
一々リンク先の件は http の HEAD リクエストを勉強してごらん
>>979 どこをどう変えたら出来たとか書けば、更にいいんだがな
また同じような質問の際に"過去スレ読め"、とビシッと言えるから
解決したんならいいんだけど、ちょっとコード読んでみた 俺が携帯から見てるからかもしれないけれど、読みにくいコードだな
>>974 トンズラしつつ汎用的な技術が身につく。
ギリギリまで踏ん張って、地元にかえれれば儲けもの。
984 :
デフォルトの名無しさん :2014/03/08(土) 19:46:41.52
python2.7でimport csvをしてファイルの読み書きをしているのですが、 保存したcsvファイルの特定の部分だけを編集して保存するんにはどうしたら よいですか? よろしくお願いいたします。
985 :
デフォルトの名無しさん :2014/03/08(土) 19:59:14.69
再度読み込んで編集すればいいような
>>984 vi /path/to/csvfile.csv
「たのしいプログラミング Pythonではじめよう」って本買った人います? Pythonでのクラスの作り方・使い方やGUI関係のアプリの作り方を 一から学べるなら買いたいんですけど、その辺どうですかね 子供向けの連載を本にしたという情報があってちょいと不安です
原著の方ざっと見ただけだけど後半のゲーム作りでクラスやGUIのTkinterガンガン使ってたし サンプルコードたくさん載ってたしいいんじゃないの 子供向けだから特にどうってこともないと思う
子供よりできない可能性もあるしな この世界は
選民思想
>>984 もし、既にあるファイルの特定の部分のみのデータ書き換え(ファイルへの書き込み処理が発生する)ような事を意図しての質問だったら、
CSVは、適してません。CSVでは通常、可変長なレコードのシーケンシャルなアクセスになるので、
一部を編集するといった場合でもファイル全体を新たに書き出す事になります。
レコードの一部のみをピン・ポイントで書き換えたいといった場合、
ファイル・フォーマットは、固定長のレコードで設計し、seekを使ってランダム・アクセスします。
うめ
埋めるか
996
997
raise ぬるぽ
999 :
デフォルトの名無しさん :2014/03/09(日) 21:56:51.35
梅用酢
1000 :
デフォルトの名無しさん :2014/03/09(日) 21:57:22.82
tkinter
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。