14/01/21 21:06:23.68
>>193
あー思い通りにいきました。ありがとうございます。
195:デフォルトの名無しさん
14/01/22 02:17:05.01
>>183 指摘thx 今度からtypoなくす為に、コピペにします
>>185
順序付辞書なら、collections モジュールに OrderedDict もあるよ。こちらは挿入順。
196:デフォルトの名無しさん
14/01/22 17:49:26.29
HELPです
関数内でループが適用されません
以下のスクリプトを行うと、urlやjavascriptがそれぞれ一つずつしか抽出されません
インデントも確認してみたんですが...
うpローダーにスクリプトをあげました
URLリンク(www.dotup.org)
関数にせずに、それぞれ素で適用させた場合は上手くいくのですが、
そのそれぞれの処理を関数に書いて適用させた際には、結果が一つしか出てきません
スコープなのかなぁ?
Pythonは良く分かりません
197: 忍法帖【Lv=3,xxxP】(2+0:5)
14/01/22 17:58:01.18
直リン貼れなかったので、ちょっと自分の忍法帖確認してみます
すみません
198:デフォルトの名無しさん
14/01/22 18:28:22.22
>>196-197
再現可能なサンプルデータぐらい用意したら?
URLじゃなくてそのまま食わせられるHTMLね
あと、ソース貼るならpastebin.com、codepad.org、ideone.comとかにしてくれ
199:デフォルトの名無しさん
14/01/22 18:31:28.15
>>196
チラっと見た感じだけど、正規表現パターンが原因でしょ
最初の pattern_url はいいが、残り2つは前後に .+ .* が付いてるから
1回で文字列全体にマッチして終了してしまうよ
200:デフォルトの名無しさん
14/01/22 18:33:26.13
他の言語ができるならテストを書きなされ
201:デフォルトの名無しさん
14/01/22 18:43:02.73
変に複雑な事してるけど、こんな感じでいいと思うけどなあ
results = []
for m in re.finditer(r'''\bhref=['"]?([^"<>\s]+)''', html, flags = re.I):
results.append(m.group(1))
if uniq:
results = list(set(results))
202:デフォルトの名無しさん
14/01/22 20:57:54.65
>>196
tagRemoveのre.subを繰り返し呼ぶようなコードだけど、
一度で全て置換されるのでループは不要。
re.subn使えば置換個数を確認できます。
203:デフォルトの名無しさん
14/01/22 21:47:35.69
>>196です
皆さん、色々とアドバイスありがとうございました
204:デフォルトの名無しさん
14/01/23 00:17:18.66
直リンク禁止されてるのでscheme部を省いてリンクします
コード : pastebin.com/7YqtR23Q
空白行が除去できないのですが、これは自分の正規表現の書き方が悪いからでしょうか?
それとも、pythonのコーディングが間違っているからでしょうか?
自分の結果では最初の20行は空白行が続き、21行目に" / "と言う文字が出てきます
その後はまた暫く空白行が続きます
これらの空白行を全部取り除きたいのですが...
もしかしたらこのような面倒くさいやり方ではなく、関数などの利用で一気に除去できるかもしれませんが
検索しても見当たりませんでした
アドバイス頂けないでしょうか?
205:デフォルトの名無しさん
14/01/23 00:36:54.08
Pythonの実行速度、たとえばfor文で何百万回も
ループを回すような処理が遅くて困っています。
リスト内包表記とかmap関数とかjoin関数とかで
極力高速化しているものの、Pure Pythonでは
頭打ちの状態です。
CPythonやCython、PyPyなど、実装側で高速化する
方法を検討していますが、これといった決め手に
欠けています。
主な用途はNumPyを併用した科学計算や
データの整形など、数値計算寄りです。
サーバアプリのような規模の大きいものではなく、
単一のスクリプトファイルを必要な時に叩くといった
やり方がほとんどです。
sys、os、subprocess、numpyは必須。
できればscipyやmultiprocessingも使いたいです。
Mac/Win/Linuxいずれの環境でも実行できる必要が
あります。
そして互換性や可読性の都合上、各実装に特化した
コーディングは極力避けたいです。
各実装の得手不得手など、ざっくりとした内容で
結構ですのでご意見いただけませんでしょうか?
206:デフォルトの名無しさん
14/01/23 01:14:19.47
そこまでやるなら素直にRubyへ移行したほうが良いです。
そのままゴリ押ししても良いことないです。
207:デフォルトの名無しさん
14/01/23 01:16:49.69
>>204
正規表現を勉強する
検索ではなく公式のチュートリアルと標準ライブラリにざっと目を通す
2 タブをやめる
208:デフォルトの名無しさん
14/01/23 01:51:16.12
>>205
cで書け
209:デフォルトの名無しさん
14/01/23 02:17:47.09
>>205
Cythonで十分だろう
なにが不満なんだ
210:デフォルトの名無しさん
14/01/23 02:39:36.29
>>205
つanaconda accelerate
211:デフォルトの名無しさん
14/01/23 03:12:36.80
>>205
PyPyは確かにCPythonより計算とか速いこともあるけど一長一短でそれだけな感が
Cythonは型指定でC/C++に迫れるけどそもそもCに変換してコンパイルしてるので
C/C++で書いたらいいじゃない感、PurePythonコーディングでなければ互換性がないのも…
numpy前提なら小手先のマルチプロセスより
pyopenclでも使ったほうが次元の違うレベルになるんじゃないかな
212:デフォルトの名無しさん
14/01/23 04:28:10.51
>>204
ここで質問したのはもう終わりにするの?
Regular Expression(正規表現) Part12
スレリンク(tech板:234番)
213:デフォルトの名無しさん
14/01/23 06:54:13.07
>>204
空白行を取り除く
print("\n".join(x for x in html.splitlines() if x))
214:デフォルトの名無しさん
14/01/23 06:56:06.28
PyPyは注意書きにあるようにPurePythonじゃないとエミュレーションで遅くなるし
俺は速度が必要な時はCython/Cだね
Cで書いてCythonでGILを開放しつつ糊付け
あとはスレッド作って回す