X



Pythonのお勉強 Part57
■ このスレッドは過去ログ倉庫に格納されています
0003デフォルトの名無しさん
垢版 |
2018/06/25(月) 13:47:46.64ID:f2ggMv3H
             / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ,__     | >>1がロリコンで捕まりますように……
    /  ./\    \_______________
  /  ./( ・ ).\       o〇      ヾ!;;;::iii|//"
/_____/ .(´ー`) ,\   ∧∧        |;;;;::iii|/゙
 ̄|| || || ||. |っ¢..|| ̄  (,,  ) ナモナモ   |;;;;::iii|
  || || || ||./,,, |ゝ iii~   ⊂ ヾwwwjjrjww!;;;;::iii|jwjjrjww〃
  | ̄ ̄ ̄|~~凸( ̄)凸 (  ,,)〜 wjwjjrj从jwwjwjjrj从jr
0005デフォルトの名無しさん
垢版 |
2018/06/25(月) 14:34:16.37ID:tpBtUwyy
乙py
0008デフォルトの名無しさん
垢版 |
2018/06/25(月) 22:28:43.69ID:QqjgPMvZ
コメントアウトするときに、"# "を行頭に挿入してくれるIDEは無いのかな。
どちらかと言うと軽量なIDLE、Pythonwin、PyScriptあたりは、"##"を行頭に挿入してしまい、変更設定もないんだよなぁ。
PyCharmはできるみたいだけど、他にはある?
0011デフォルトの名無しさん
垢版 |
2018/06/26(火) 01:29:31.49ID:UJYVTaby
他人が書いたテキストファイルから必要な行だけ抜き出そうとしたら
ファイルのほうの書式ミスだの誤植だのでうまくいかなかったときの悲しみ
0012デフォルトの名無しさん
垢版 |
2018/06/26(火) 08:45:04.93ID:ayn5GnnW
scrapyで1分毎に1度アクセスしてスクレイピングをしたいのですが
毎回起動すると巡回するまでに時間がかかります
ですので起動しっぱなしで巡回させたいのですがどのようにしたらいいのでしょうか

spider内でsleepしたりもしたんですがアイテムの処理まで止まってしまいダメでした
0014デフォルトの名無しさん
垢版 |
2018/06/26(火) 11:33:00.83ID:q7eaTJhV
CrawlerRunner を使えばできそうな感じがする
ttp://scrapy-ja.readthedocs.io/ja/latest/topics/practices.html

scrapy自体使ったことないからよく知らないけどもw
0015デフォルトの名無しさん
垢版 |
2018/06/26(火) 13:42:21.19ID:ayn5GnnW
ありがとうございます
reactorの仕組みが理解できてないんですけど
.run()をループ内に入れると失敗するので以下のようにしたのですが
spiderの__init__は実行されてるのですがリクエストは実行されず最後にまとめてされてるみたいです
(この場合3分後に)

https://pastebin.com/6tvdPRnL

出力
__INIT__
__INIT__
__INIT__
start_requests
start_requests
start_requests
request: https://www.yahoo.co.jp/
request: https://www.yahoo.co.jp/
request: https://www.yahoo.co.jp/
0016デフォルトの名無しさん
垢版 |
2018/06/26(火) 14:09:43.07ID:ayn5GnnW
とりあえずProcessを作りその中で実行するようにしました
コマンドだと10秒ぐらい掛かってましたがscriptから実行すると3秒ほどに短縮できたので!
0017デフォルトの名無しさん
垢版 |
2018/06/26(火) 17:44:51.37ID:tY6A4pT3
>>10
大幅な手直しの時には、さすがにそんなことやってられないでしょう。
対応していれば、行選択してショートカットキーで一発なんだから。
0018デフォルトの名無しさん
垢版 |
2018/06/27(水) 06:04:56.19ID:Av32bs5l
前スレ978です
お礼が大変遅くなって申し訳ありませんでした
すすめていただいた本をまずは書店で見てきたいと思います
ありがとうございました
0021デフォルトの名無しさん
垢版 |
2018/06/27(水) 16:38:58.81ID:2dfKv2YD
vim最強
0026デフォルトの名無しさん
垢版 |
2018/06/28(木) 07:23:00.10ID:WgQA5F5F
トリプルクォートで文字列化
さっさと修正したらバッサリ削除してコミット。
0029デフォルトの名無しさん
垢版 |
2018/06/28(木) 09:52:59.74ID:juJJBKVT
scrapy使い結構いるのかな? 私はrequestsでアクセスして正規表現でデータ抽出ですわ
0030デフォルトの名無しさん
垢版 |
2018/06/28(木) 16:26:28.85ID:FdbC2U6h
>>27
np.array(list('hoge'), astype='uint8')
0032デフォルトの名無しさん
垢版 |
2018/06/28(木) 17:35:24.41ID:nGiHMjHt
エスパー希望
0033デフォルトの名無しさん
垢版 |
2018/06/28(木) 21:08:47.06ID:5D3e8xlL
>>29
scrapyめんどいな、xpathとかなんやねん?
性器表現もだるいだろ


結論
ビューティフォースープ最高!
0034デフォルトの名無しさん
垢版 |
2018/06/29(金) 20:16:31.44ID:kq5wxYLp
BeautifulSoupのパーサーにhtml5lib(1.0.1)使ってますが、
先頭に空のコメントがあると見つからずNoneになるのですが、
これっておかしいですよね?lxmlとhtml.parserは問題ないのに
soup = BeautifulSoup('''<div></div>''', 'html5lib')
print(soup.div) # <div></div>

soup = BeautifulSoup('''<!----><div></div>''', 'html5lib')
print(soup.div) # None

soup = BeautifulSoup('''<!--コメント--><div></div>''', 'html5lib')
print(soup.div) # <div></div>
0035デフォルトの名無しさん
垢版 |
2018/06/29(金) 20:19:18.50ID:AheYOSRK
soup = BeautifulSoup('''<!-- --><div></div>''', 'html5lib')
は?
0037デフォルトの名無しさん
垢版 |
2018/06/30(土) 00:26:17.52ID:tr0WXiW5
jQuery では、CSS セレクター。
Ruby のNokogiri では、CSS セレクター・XPath

ちなみに、Chrome で、XPathを取り出せるから、
それを、CSSセレクターに直せばよい

XPath では、[1] とか、順番で表示されるから、
順番が変わると取得できないので、CSSセレクターの方が良い

正規表現は、木構造に対応していない

<1><2></2><3></3></1>
これで、<1></2> が対応してしまう。
</1>よりも先に、</2>が見つかるから
0040デフォルトの名無しさん
垢版 |
2018/06/30(土) 12:22:39.79ID:QJJEkoJ9
空気嫁風船
0043デフォルトの名無しさん
垢版 |
2018/07/01(日) 19:55:16.28ID:tGZJPJtp
初心者なんだけど、「パーフェクトパイソンPython」で書いてあるコードがPython 3.7で動かないのは、書籍が古すぎってことでいいのか?
0044デフォルトの名無しさん
垢版 |
2018/07/01(日) 20:01:59.65ID:usR85dqh
まともな本なら動作確認されてるバージョンがあるからそれ使えよ
なんで3.7使うの?
0045デフォルトの名無しさん
垢版 |
2018/07/01(日) 20:52:12.89ID:tGZJPJtp
それが新しいからさ

とりあえず3.3で試してみる

ありがと
0048デフォルトの名無しさん
垢版 |
2018/07/02(月) 09:26:04.09ID:a3JLFqUP
imgのsrcはサムネ画像の場合があるからhrefから取らないとダメだよ ( ´,_ゝ`)プッ
0049遊園地
垢版 |
2018/07/02(月) 11:03:32.08ID:+NSNTcQb
>>48
if文で全部取り除いた
0050デフォルトの名無しさん
垢版 |
2018/07/02(月) 18:53:35.63ID:5apw8p9i
そんじゃ次は
クッキーやリファラに対応してみようか
0053デフォルトの名無しさん
垢版 |
2018/07/04(水) 21:50:50.49ID:59VAySEO
Python3.5を使っています。
普段はbashでプログラミングをしているのですが、Python(3)にはいわゆる「正規表現演算子」はないのでしょうか。
'a' =~ '[abc]+'
にTrueを返し
'd' =~ '[abc]+'
にFalseを返すような演算子です。
if文で使われているようなのですが、==演算子のように直には使えないのでしょうか?
0054デフォルトの名無しさん
垢版 |
2018/07/04(水) 21:53:56.40ID:gFgZc5FG
1FE
0056デフォルトの名無しさん
垢版 |
2018/07/04(水) 22:31:43.88ID:TkykG5xy
>>53
ありませんねぇ。
0058デフォルトの名無しさん
垢版 |
2018/07/04(水) 22:56:14.86ID:na9DBSxB
>>53
正規表現にマッチしたらtrue しなかったらfalseを返してほしいなら

re module のre.matchのマッチオブジェクトをifの後にぶっこめばマッチすればtrueしなければnoneが返ってfalseになるよ
0059デフォルトの名無しさん
垢版 |
2018/07/05(木) 11:43:41.72ID:IcGtf/nv
ageとく
0060デフォルトの名無しさん
垢版 |
2018/07/05(木) 21:26:50.59ID:CqUNBSEq
>>58
ごめんなさい。もうちょっと詳しく書いてもらってもいいですか。
できることならサンプルもちょろっといただけると嬉しいです。
0066遊園地 ◆ExGQrDul2E
垢版 |
2018/07/06(金) 14:48:21.33ID:SE3XEYsd
頼む! 助けてくれ!!

キーボードを、
エレコム ワイヤレスキーボード 静音タイプ メンブレン式 コンパクト ブラック TK-FDM078TBK
に変えたんだが、EnterとBackSpaceが押し難い。

どうしたら、良いんだ?
0067デフォルトの名無しさん
垢版 |
2018/07/06(金) 15:08:09.86ID:LdCqv7/c
キーの割り当て変えるツールで押しやすいキーと入れ替えれば当座はしのげるだろ
0068デフォルトの名無しさん
垢版 |
2018/07/06(金) 15:17:47.09ID:odzQpd8G
ステマかよ
0069デフォルトの名無しさん
垢版 |
2018/07/06(金) 15:33:29.76ID:SE3XEYsd
Firefoxのショートカット多様するから入れ替えるキーが思いつかん。
0070デフォルトの名無しさん
垢版 |
2018/07/06(金) 15:38:38.61ID:odzQpd8G
キーボード追加汁
0072デフォルトの名無しさん
垢版 |
2018/07/06(金) 16:09:00.39ID:24WPYeSf
そのうち慣れるよ、嫌なら他のキーボード買えばいいじゃん
押しやすいキーと入れ替えるという発想が信じられん バカなの?
0073遊園地 ◆ExGQrDul2E
垢版 |
2018/07/06(金) 16:33:27.16ID:SE3XEYsd
コンパクトで良いなー。と、思って買ったばかり何だよ。

スペース左側の変換をエンターにして、
カタカナひらがな の場所をバックスぺーすにした。
0075デフォルトの名無しさん
垢版 |
2018/07/06(金) 17:08:08.80ID:qtqoxO2d
これ面白いからおすすめ
https://goo.gl/U5BA1Y
0077デフォルトの名無しさん
垢版 |
2018/07/06(金) 23:42:38.37ID:W/isEwYg
enumerateとzipの合わせ技、快適すぎるw
range使ってインデックス作成していたのがアホみたい
0078デフォルトの名無しさん
垢版 |
2018/07/07(土) 23:15:16.85ID:7HLM3fyt
if num[temp] >0:
for i in range(result[temp]):
hoge1, hoge2 = hogehoge(a, b, c[temp])
result2 = hogex(d, hoge1, hoge2)

このようなループ処理を複数回(result回数分)行いたいです
多重forで書くととても重くなってしまうと思うのですが、何か良い高速化手法は無いですかね?

a, b, dは定数
cはリスト
hoge1, hoge2はint型の変数です
0079デフォルトの名無しさん
垢版 |
2018/07/08(日) 00:26:05.04ID:Jzinsuog
繰り返しhoge1、hoge2、result2に計算結果を書き込んでいるだけなのであれば、最後のただ1度だけ計算すればよいのでは?
質問は正確にー
0080デフォルトの名無しさん
垢版 |
2018/07/08(日) 03:29:49.37ID:/D8rnv+z
iがfor内部で使われてないように見えるから多分何かしら誤植があるんだろうけど
これだったら内包表記で書けるだろ
0082デフォルトの名無しさん
垢版 |
2018/07/08(日) 11:45:12.12ID:MJ8iSrG7
あほか
0083デフォルトの名無しさん
垢版 |
2018/07/08(日) 12:36:39.11ID:XRwcXxE1
>>> num = [-3, -2, -1, 0, 1, 2, 3]
>>> result=[i+1 for i in num]
>>> d = 3
>>> c = [i+10 for i in num]
>>> b = 2
>>> a = 1
>>>
>>> def hogehoge(a, b, c):
    return a+b, b+c

>>> def hogex(a, b, c):
    return a+b+c

>>>
>>> l = []
>>> for temp in range(len(num)):
    if num[temp] > 0:
        for i in range(result[temp]):
            hoge1, hoge2 = hogehoge(a, b, c[temp])
            result2 = hogex(d, hoge1, hoge2)
            l.append(result2)

            
>>> l
[19, 19, 20, 20, 20, 21, 21, 21, 21]
>>>
>>>
>>> [hogex(d, *hogehoge(a, b, c[temp])) for temp in [temp for temp in range(len(num)) if num[temp]>0] for i in range(result[temp])]
[19, 19, 20, 20, 20, 21, 21, 21, 21]
>>>
008478
垢版 |
2018/07/08(日) 13:38:26.20ID:1Fr6jxFu
すみません間違えていました
正確に言うと、hogehogeでなんらかの座標を算出して、hogexでopencvで図形をimgに描画
これをhpgehpgeの入力を順番に変えて数回ほど繰り返したいです

for i in range(max)
if temp[i].size:
for j in range(temp[i]):
hoge1, hoge2 = hogehoge(a, b, result[i][j])
img = cv2.hogex(d, hoge1, hoge2)

リストに出力しない場合は内包表記使えないですかね?
イマイチ内包表記の事分かってないです
0085デフォルトの名無しさん
垢版 |
2018/07/08(日) 14:09:53.71ID:ai00mC6I
それ支配的なのはhogexやhogehogeだよね?
ボトルネックを見つけないと高速化の意味ないよ
0086デフォルトの名無しさん
垢版 |
2018/07/08(日) 14:14:30.75ID:XRwcXxE1
hpgehpgeはどこにあるの?
あと5chだと半角スペースが消えるから全角スペースでインデント表現しないと
リストに出力しようがしまいが内包表記は使えるよ
0087デフォルトの名無しさん
垢版 |
2018/07/08(日) 14:29:35.70ID:XRwcXxE1
>>> [print('hoge') for i in range(3)]
hoge
hoge
hoge
[None, None, None]
>>>
リストに出力しなかったらNoneが入るだけ

[cv2.hogex(d, *hogehoge(a, b, reault[i][j])) for i in [i for i in range(max) if temp[i].size] for j in range(temp[i])]
これでいけるんじゃないかな?
008878
垢版 |
2018/07/08(日) 22:59:07.98ID:vTpYTVTg
ありがとございます
アドバイスを参考に試行錯誤してたのですがちょっと自分には難しかったです

img = cv2.hogex(img, d, hoge1, hoge2)

imgという変数(画像)が既に存在する際にそれの上に何かを描画する関数なのですが、
内包表記の中でimgに代入させるのは難しいですかね?

あと、内包表記で複数個の処理を行うことって出来ますか?
感覚的にはこの様な感じです
[hogehoge(a, b), hogex(c, d, e) for i in range(num)]
0089デフォルトの名無しさん
垢版 |
2018/07/08(日) 23:22:41.95ID:Jzinsuog
条件を後から追加すんなー。
後、得たい結果がリストでないと内包表記じゃ早くならんよ?
0090デフォルトの名無しさん
垢版 |
2018/07/09(月) 00:06:53.03ID:U3tDSUR2
自作関数じゃないhogexは晒してもいいだろうに
そんなことしてると誰も答えなくなる
0091デフォルトの名無しさん
垢版 |
2018/07/09(月) 03:58:46.23ID:lNBlYhG9
そう言って答えなくなったためしはない
承認欲求過多のボウフラは次々に湧く
0092デフォルトの名無しさん
垢版 |
2018/07/09(月) 09:56:58.16ID:eu099A4d
>>88
>内包表記の中でimgに代入させるのは難しいですかね?
内包表記の中で代入はできません、どうしてもやりたいならクラスで
>>> class fuga:
def __init__(self):
self.img = 0
def hogex(self, a, b, c):
self.img = cv2.hogex(self.img, a, b, c)
return self.img

>>> f = fuga() #インスタンス作って、これを使う
[f.hogex(d, *hogehoge(a, b, reault[i][j])) for i in [i for i in range(max) if temp[i].size] for j in range(temp[i])]

>あと、内包表記で複数個の処理を行うことって出来ますか?
タプルかリストにまとめれば複数個処理できますよ
>>> [(print('hoge'), print('fuga')) for i in range(3)]
hoge
fuga
hoge
fuga
hoge
fuga
[(None, None), (None, None), (None, None)]
0093デフォルトの名無しさん
垢版 |
2018/07/09(月) 09:58:49.60ID:eu099A4d
>>> class fuga:
    def __init__(self):
        self.img = 0
    def hogex(self, a, b, c):
        self.img = cv2.hogex(self.img, a, b, c)
        return self.img
0095デフォルトの名無しさん
垢版 |
2018/07/09(月) 11:55:16.44ID:bJwhh199
hogehogeかhogexがボトルネックになってたらループをどうこうしても早くならないよ。
高速化するならまずボトルネックを特定しよう。
hogehogeやhogexがボトルネックで並列処理可能ならマルチスレッドで実行すれば少し早くなるかもね。
そもそもpythonみたいな実行速度よりコードの書きやすさを重視した言語で高速化するのは大変だよ。
pythonにちゃんとしたプロファイラーとかあるの?
0097デフォルトの名無しさん
垢版 |
2018/07/09(月) 12:44:30.49ID:bJwhh199
プログラム内の各関数の実行時間を計って、ボトルネックになる場所を特定できれば、ちゃんとしたプロファイラだよ。
今ぐぐったら、cProfileとprofileっていうプロファイリングするモジュールがあるじゃん
0100デフォルトの名無しさん
垢版 |
2018/07/09(月) 21:57:16.39ID:mmm1tgmy
スクレイピングは興味はあるけど
別に収集したいデータがないから学習のモチベーション上がらない
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況