くだすれPython(超初心者用) その39

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/08/24(金) 07:50:35.97ID:VD4/++xS
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで

前スレ
くだすれPython(超初心者用) その38
https://mevius.5ch.net/test/read.cgi/tech/1526522954/
2018/11/05(月) 00:39:16.13ID:Dut8FIaQ
719です。
>>722で解決しました。
ありがとうございました。
2018/11/05(月) 10:25:00.99ID:h9xlJLA6
Slackでは<{url}|{title}>の形式で書けば、リンクとして表示してくれるので、

slackToken = 'example'
url = 'http://example.com'
text1 ='あああああ'
text2 = 'タイトルです'
attText = f'aiueo <{url}|{text2}> kakikukeko'

slackData = {
"username": username,
"channel": channel,
"text": text1,
"attachments": [
{
"color": "#39a6e8",
"text": attText,
"thumb_url": thumbUrl
}
]}

requests.post(slackToken, data=json.dumps(slackData))

こんな感じで、requestsを使ってSlackにおくりたいんですが、
title2の1文字目が「<」で最後の文字が「>」だった場合、
Slack上では何故か aiueo <<http://example.com<;タイトルです>>>って表示になって、バグってしまいます。
今はとりあえず、text2の最初と最後が<>だったらその文字を削除してるんですが、text2に<>を含んだままSlackに送るにはどうやるんでしょうか?
725デフォルトの名無しさん
垢版 |
2018/11/05(月) 13:32:25.59ID:o5QGnfIr
&lt;
&gt;
2018/11/05(月) 13:46:32.33ID:h9xlJLA6
どうもありがとうございます!
727デフォルトの名無しさん
垢版 |
2018/11/05(月) 16:48:18.27ID:0An2vgEj
list.__getitemって何を返すんですか?
調べてもわからなかったんで教えてください
728デフォルトの名無しさん
垢版 |
2018/11/05(月) 17:18:39.84ID:o5QGnfIr
a=[1,2,3]
a.__getitem__(1) # 2
2018/11/05(月) 17:19:31.32ID:+kDBf8bs
>>727
スライスの演算をオーバーロードするメソッドやで
730デフォルトの名無しさん
垢版 |
2018/11/05(月) 18:10:05.24ID:0An2vgEj
>>728
>>729
heapq.nlargest(n, iterable, key=None)のkeyにlist.__getitem__の結果を入れることに、なんの意味があるんでしょうか。
2018/11/05(月) 18:29:42.84ID:ll2Vxm5g
これのnew = tv[i]っていりますの?
なんかいらないっぽい気がして削っても動いたんだけど
暇で優しい人気が向いたら教えて

tv = ["GOT", "Narcos",
"Vice"]
for i, show in enumerate(tv):
new = tv[i]
new = new.upper()
tv[i] = new


print(tv)

https://github.com/calthoff/self_taught/blob/master/python_ex205.py/
2018/11/05(月) 18:33:34.89ID:ll2Vxm5g
あっれ?この野郎!
本とコードが違うじゃないか
独学プログラマーめ・・・
本だと変数のshowがnewに書き換えられてる
2018/11/05(月) 23:28:07.21ID:i/g7f+lV
>>724-726
Ruby の、CGI.escapeHTML みたいな、HTML エスケープだろ

Python にも、そういう関数があるはず
2018/11/06(火) 09:03:03.85ID:oDFoDpyv
>>731
本が何かわからんけど、
forの中はtv[i] = show.upper()だけで大丈夫。
2018/11/06(火) 11:06:31.30ID:cQb5p7fE
python+gtkでepubビューアを改造している者ですが、
htmlファイルのアンカーのスクロール座標をjavascriptを使わずにpythonだけ取得することはできるんでしょうか?
具体的な用途としては、ブックマークの時のチャプター名や、
Linuxのevince(document viewer)の様に、画面をスクロールして次のチャプターの領域に入ると自動で、
左のチャプターリストビューの選択もそのチャプターのところに移動してほしいのですが、(クリック扱いになると
チャプターの最初に戻されてしまうので、青い選択が移るだけにしたいのです。)
言葉でうまく説明できなくてすみません
2018/11/06(火) 11:20:08.33ID:VRf3OGgv
>>734
ありがとう!
「独学プログラマー」って本です

これが終わったらdeeplearningの本読んでAI作るんだ・・・道は遠そう
2018/11/06(火) 17:51:56.07ID:Zf4d0x7S
htmlで
<td class=" "><a href=" ">TEXT</a></td>
のうちの<a href>内の" "の中身だけを取り出すにはどうすればいいですか?
2018/11/06(火) 19:12:51.68ID:B9fQWZZ6
>>737
何のモジュール使ってhtmlよんでんだよ


セレニウムなら「href属性 取得 selenium python」でググれ
739724
垢版 |
2018/11/06(火) 20:09:21.47ID:QHiQfJwC
724ですけど、変数内に~~や**があるとそれらもSlack側で以下のように反応してしまいました。

~あいうえお~
と波線で囲めば打ち消し線に、
*あいうえお*
だと、太字です。

記号は記号としてポストするにはどうしたらいいんでしょうか?
2018/11/06(火) 20:13:57.06ID:B9fQWZZ6
*→ *
~→ ~
2018/11/06(火) 20:14:48.35ID:B9fQWZZ6
(´Д`lll)&to#は半角でな
*→ &#126;
~→ &#42;
742724
垢版 |
2018/11/06(火) 20:28:42.52ID:QHiQfJwC
>>741
どうもありがとうございます!
試してみます!
今のところ分かったのはこの3つなんですが、記号類をまとめてちゃんと表示する仕組みってありますか?
今ちょっとググってたら
xml.sax.saxutilsのescapeだと<>はエスケープしてくれそうな感じでした。
743デフォルトの名無しさん
垢版 |
2018/11/06(火) 20:31:38.28ID:0p0MEBcD
"mrkdwn": false
744724
垢版 |
2018/11/06(火) 20:32:44.30ID:QHiQfJwC
あと、混乱してしまってるんですが、変数textの中にもし<、>、*、~のいずれかが含まれてたら、<、>、&#126;、&#42;に置き換えるには、if文でどう書くんでしょうか?
745724
垢版 |
2018/11/06(火) 20:36:27.93ID:QHiQfJwC
何度もすみません
import xml.sax.saxutils from escape

import htmlのhtml.escape
はどう使い分けるんでしょうか?
2018/11/06(火) 20:51:13.02ID:B9fQWZZ6
>>744
findを使ってtextを検索し、-1よりでかい数が帰ってくるかどうかためす。
if text.find(’<’) > -1 or text.find(’>’) > -1 or....(略)
2018/11/06(火) 20:56:52.27ID:B9fQWZZ6
(つづき)
でもってif文のインデントの中に
text=text.replace('before','after').replace('before','after').replace('before','after').replace('before','after')

beforeにはそれぞれ<、>、*、~を入れて
aterには&#42;とかそういうのを書いておく
748724
垢版 |
2018/11/06(火) 20:58:43.90ID:QHiQfJwC
>>746
なるほど!ありがとうございます!

> if text.find(’<’) > -1 or text.find(’>’) > -1 or....(略)
を途中で改行したい場合はどうやるんでしょうか?
バックスラッシュ付けるっぽいんですが、以下だとエラーになります

if text.find(’<’) > -1 or text.find(’>’) > -1 \
or....(略)
749724
垢版 |
2018/11/06(火) 20:59:35.67ID:QHiQfJwC
>>747
ありがとうございます!!
2018/11/06(火) 21:00:46.35ID:B9fQWZZ6
>>745
前者は基本的に & 、 < 、および > が対象 だが 他の文字もエスケープ汁と命令することが可能

後者は & 、 < 、および > が対象
751デフォルトの名無しさん
垢版 |
2018/11/06(火) 21:08:58.42ID:0p0MEBcD
特殊な記号たち
https://api.slack.com/docs/messages/builder?msg=%7B%22text%22%3A%22%60%60%60pre%60%60%60%20*bold*%20%60code%60%20_italic_%20~strike~%22%2C%22username%22%3A%22markdownbot%22%2C%22mrkdwn%22%3Atrue%7D
752724
垢版 |
2018/11/06(火) 21:12:17.61ID:QHiQfJwC
>>750
どうもありがとうございます。
例えば、今回みたいに*や~も含めたいって場合なら前者で指定したらよいって事ですね。
2018/11/06(火) 21:13:16.40ID:B9fQWZZ6
>>748
途中で\入れるのって
pyrhon上で直接コマンド打ってるときだけじゃね?

pyファイルに書いたのを実行させるときはイラネ
2018/11/06(火) 21:15:03.75ID:B9fQWZZ6
>>752
んだな
詳しくは>>751と https://docs.python.jp/3/library/xml.sax.utils.html あたりをよんでくれ
755724
垢版 |
2018/11/06(火) 21:15:09.62ID:QHiQfJwC
>>751
どうもありがとうございます!
他にもいくつかあったんですね。
それらの記号を >>746-747>>745の前者の方で試してみます
756724
垢版 |
2018/11/06(火) 21:21:01.58ID:QHiQfJwC
>>753
if text.find(’<’) > -1 or text.find(’>’) > -1
or....(略)

だと、エラーになってしまいました。
2018/11/06(火) 21:21:04.81ID:B9fQWZZ6
>>753
>pyファイルに書いたのを実行させるときはイラネ
oh
オレ無意識に条件文のif以降を()でくくって最後に:付ける癖があるわ

 ↓
if (text.find(’<’) > -1 or
 text.find(’>’) > -1 or
 ....(略) ...):
        ↑

みたいに()でかこってやれば何行にわけてもおk
758724
垢版 |
2018/11/06(火) 21:28:34.65ID:QHiQfJwC
>>757
へぇ〜
こんな方法もあるんですか!今試したら動いたけれど、
flask8だとW503 line break before binary operator
って言うエラーが出てました
2018/11/06(火) 21:33:57.41ID:B9fQWZZ6
>>758
アッハイ

or は 行の最後に書かずに
先頭にかけやこのデコスケ野郎

っていうエラーすね。

つまり推奨は
if (text.find(’<’) > -1
or text.find(’>’) > -1
or ....(略) ...):

汚いソースコードの書き方しててすみまそん。。。
2018/11/06(火) 21:37:10.20ID:B9fQWZZ6
詳しい解説は https://github.com/PyCQA/pycodestyle/issues/513 あたりかな
761724
垢版 |
2018/11/06(火) 21:46:50.14ID:QHiQfJwC
>>759
いや、ありがとうございます。。。
2行目を or から始めてもW503でした。あと、E129も出でます。
E129は2行目の or を if の i から数えて8文字インデントしたら消えました。
2018/11/06(火) 22:02:51.74ID:B9fQWZZ6
>>761
検証してくれるやつのバージョンによって推奨される書き方がちガッ獲るようだ… https://lintlyci.github.io/Flake8Rules/rules/W503.html

今どきはどーするのが一番正しくてグッドなのか、
誰か他の回答者を待とう (´・ω・`)
2018/11/07(水) 00:09:47.09ID:kPzZvNDI
>>738
beautifulsoupとurllibっす
2018/11/07(水) 00:53:42.51ID:QtFDoqkC
>>763
beautifulsoupなら
soup.a['href']
soupはBeautifulSoupオブジェクトな
2018/11/07(水) 01:15:28.23ID:+978RLDn
>>744
Ruby の、CGI.escapeHTML みたいな、HTML エスケープだろ

Python にも、そういう関数があるはず。
ライブラリを探せ

全言語にある!
Google に「html escape」と入れれば、補完で全言語が出てくる。
php, javascript, java, ruby, python ズラズラっと

そういう一般的な関数を、自作したらダメ。
自作したものは、ライブラリよりも品質が低いから
2018/11/07(水) 01:23:13.15ID:mTAgM1WN
キチガイ避けには「ruby」でNGワード登録が簡単・便利
767724
垢版 |
2018/11/07(水) 10:31:30.88ID:eBlvm3p7
>>754
from xml.sax.saxutils import escape
text = 'あいうえお'
text = f'~{text}~'
text = escape(text, {'*': '&#42;', '~': '&#126;', '': '', '': ''})
上は実際には半角です。

textをSlackに送信すると、Slackでは、~あいうえお~と表示して欲しいんですが、
&#126;あいうえお&#126;
と、表示されてしまいます。
どこが間違えてますか?

あと、
* を置き換える文字列は&#42;(半角で)のように、
` を置き換える文字列
_ を置き換える文字列
ってどうやって調べたらよいんでしょうか?

>>762
自分のバージョンはPython 3.6.4、flake8 3.6.0でした
2018/11/07(水) 12:02:53.55ID:gi2gLu8r
最低限↓に目を通してからslackの話を続けて貰えるか?
https://api.slack.com/docs/message-formatting#how_to_escape_characters
769デフォルトの名無しさん
垢版 |
2018/11/07(水) 13:51:51.54ID:A06G1xNF
https://docs.python.jp/3/library/html.html
770デフォルトの名無しさん
垢版 |
2018/11/07(水) 18:19:51.85ID:aDO62va+
https://dotup.org/uploda/dotup.org1686239.png

>>> import numpy as np
>>> from PIL import Image
>>> im = Image.open('dotup.org1686239.png')
>>> np.array(im)
>>> np.array(im)[:,-1::-1,:]
>>> Image.fromarray(np.array(im)[:,-1::-1,:]).save('dotup.org1686239_rev.png')

便利やね
python だぁぃすき
771デフォルトの名無しさん
垢版 |
2018/11/07(水) 18:32:37.21ID:fvfWV4IU
conveert dotup.org1686239.png -flop dotup.org1686239_rev.png

ImageMagickのが簡単だよ
チンポ だぁいすき
2018/11/08(木) 17:18:54.41ID:vDDK8kog
if random.randint(0,1):
step=1
else:
step=-1

この場合のrandom.randintってどういう意味?
乱数で0か1が発生した場合に1、その他の数字のときelseって意味じゃないよね?
よくわからん
2018/11/08(木) 17:21:04.79ID:/8FytPr/
スクレイピングなんですがjava?でコンテンツが作られている動的なページはSeleniumのようなwebBrowserをさわって値を取るしか無いんでしょうか
vbaで似たようなのを作ったんですが読み込み等が遅く、処理の高速化を考えていたのですがSeleniumだと実現できないでしょうか
2018/11/08(木) 17:44:25.17ID:AFbSMZjK
random.randintで0がでたらfalse
1が出たらtrueじゃない?
2018/11/08(木) 18:13:45.79ID:KFTKKYEO
>>774
コード読むとその解釈で合ってると思うけど、そのプロセスが理解できない
randint(a,b)ってa~bの中で整数を生成するんだよね?
randint(0,1)なら0か1のどちらかを生成する
つまりわからん
2018/11/08(木) 18:30:34.85ID:AFbSMZjK
多分わからないのはbool型についてかな
ちょっと検索して出てきたから読んだらいいかも
https://note.nkmk.me/python-bool-true-false-usage/
777デフォルトの名無しさん
垢版 |
2018/11/08(木) 18:47:09.00ID:5iWhW6P3
>>775
PyhonのTrue, Falseは0, 1と等価
実際True+Trueを評価すると2になる
2018/11/08(木) 19:50:06.88ID:KFTKKYEO
TrueとFalseがランダムに生成されるんだろ
つまりif節の中にTrueもFalseも入ってることになんね?
2018/11/08(木) 19:51:27.62ID:UKor1bXF
ならんよ>>778
2018/11/08(木) 19:54:09.65ID:KFTKKYEO
俺がアホなのか
全くスッキリと理解できないw
2018/11/08(木) 20:06:42.76ID:AFbSMZjK
if random.choice([True, False])
こう書き換えれば少しはわかりやすいかな
2018/11/08(木) 20:21:32.77ID:KFTKKYEO
if random.randint(0,1)==True:
と同じ意味だよね?
これなら簡単に理解できるけど、==Trueがなくても文法として成立するのがよくわからない
2018/11/08(木) 20:23:05.84ID:UKor1bXF
暗黙の了解で省略されてるだけ
英語の関係代名詞的なさむしん
2018/11/08(木) 20:30:18.68ID:KFTKKYEO
>>783
マジかよ
人に優しくない言語やんけ!
何時間悩んだと思ってんや
2018/11/08(木) 20:32:58.15ID:UKor1bXF
もう忘れないだろうから
悩んだことはむだではない
タブンネ
2018/11/08(木) 21:02:16.60ID:dNW1RU/q
主流言語はみんなそんな感じなんだけどPythonは比較演算子強制でも良かった気もしないでもない。
でも、
bool値を返すisBigメソッドを実装したクラスChinkoがあったとして…
myChinko = new Chinko(16)
if myChinko.isBig():
と自然な英文風に書けるというスゴイ利点もある!
ちなみに12以下だとFalseを返します
787デフォルトの名無しさん
垢版 |
2018/11/08(木) 21:03:49.60ID:JRn9O86F
>>778
1とTrue、0とFalseを同一として認識するのは明らかに間違っている
788デフォルトの名無しさん
垢版 |
2018/11/08(木) 21:04:47.54ID:j6Jh7/pK
自然言語風に書けるのはデメリットやぞ
2018/11/08(木) 21:15:17.71ID:dNW1RU/q
冗談やで。俺は比較演算強制がよかった
2018/11/08(木) 21:16:04.42ID:fqxKHZms
ネェ、チンコダッテ?( ´д)オクサン(д` )アラヤダワァ
2018/11/08(木) 21:53:09.37ID:QbjXdk8c
>>782
==trueとか言うゴミコード書くなよ
792デフォルトの名無しさん
垢版 |
2018/11/08(木) 22:07:08.42ID:j6Jh7/pK
ゴミって些末な事ばかり気にしてゴミコードってゆうよねw
2018/11/08(木) 22:09:00.10ID:Sh+rXr23
言うをゆうって書く人は初等教育を受けてるのかしら
794デフォルトの名無しさん
垢版 |
2018/11/08(木) 22:14:43.87ID:j6Jh7/pK
言うはゆうて読むんやで
2018/11/08(木) 22:24:11.22ID:lbifDjkh
誰も読み方について話してないぞ。相当な馬鹿だな
796デフォルトの名無しさん
垢版 |
2018/11/08(木) 22:30:06.41ID:j6Jh7/pK
バカのくせに人の事バカってゆうの恥ずかしいよバカw
2018/11/08(木) 22:32:56.23ID:KFTKKYEO
ちなみにこういう省略って他にどんなのある?
他の文法で省略あったらまた騙されるなー
2018/11/08(木) 22:53:42.09ID:PhR3Qfyw
perlはエゲツナイぞー
2018/11/08(木) 23:07:43.11ID:QbjXdk8c
==Trueが必要だと思う奴はその戻り値に対しても==Trueしとけw
2018/11/08(木) 23:17:51.55ID:yMIHOz65
the reason why ~ みたいなもんだな
2018/11/08(木) 23:20:05.30ID:QHwNiY6E
>>773
5ch みたいな動的または、ajax などの非同期処理で、ページの内容を取得しているものは、
その内容が読み込まれるまで、その要素や内容は存在しない

5ch なら、まず空のHTML を送ってくるから、ajax で読み込まれるまで、内容が存在しない

漏れはRuby で、Selenium WebDriver を使って読み込んでいる。
その要素が出現するまで、wait される。
簡単なのは10秒ぐらい、sleep すればよい

5ch なんか、バグが多いから、JavaScript が無限ループしたりして、
30秒待っても、Selenium WebDriverから、そのページへアタッチ出来ないこともある
2018/11/08(木) 23:22:35.59ID:a5prroZo
「Ruby」でNGワード登録が簡単・便利
2018/11/08(木) 23:44:41.94ID:mrd9U+a3
50%の確率で2つの処理を選択したい場合によりスマートな書き方はありますか?今はべたべたにこう書いてます
if np.random.rand() > .5:
do1()
else:
do2()
804デフォルトの名無しさん
垢版 |
2018/11/09(金) 02:19:40.37ID:19dRG8QF
(do1 if np.random.rand() > .5 else do2)()
2018/11/09(金) 04:00:11.42ID:bq31MDXV
すごい!そんな書き方があるのですね。
よければ何という記述方法か教えてもらえますか?(どうやって調べたら出ますか)
2018/11/09(金) 04:18:51.46ID:Je0vwCJT
np使う理由はあるの?
2018/11/09(金) 08:30:00.34ID:0hfWLYYN
pycharmでshadows name xxx from outer scopeっていうwarningが出るんだけど、これは何が問題なんや
2018/11/09(金) 09:42:26.78ID:VXODTqLC
同じ名前の変数が定義されたことで
外のスコープの変数が隠されている
という警告
2018/11/09(金) 09:43:04.08ID:VXODTqLC
Warningに書いてある通りだな
810デフォルトの名無しさん
垢版 |
2018/11/09(金) 10:18:23.10ID:19dRG8QF
>>805
三項演算子
可読性下がるから使い過ぎはお勧めしない
811デフォルトの名無しさん
垢版 |
2018/11/09(金) 11:58:21.04ID:p9aTnaT/
ちょうど1/2の確率が欲しいとき
if random.rand(0, 1) > .5:
が正解?
それとも
if random.rand(0, 1) >= .5:
が正解?
どっちも間違い?
812デフォルトの名無しさん
垢版 |
2018/11/09(金) 12:04:45.46ID:mwKVhTqG
どっちも間違い

だが少なくとも
random.rand() > .5
では偏りが生じる
2018/11/09(金) 12:40:54.60ID:0q7AG6jo
>>811
0×1の配列?
814デフォルトの名無しさん
垢版 |
2018/11/09(金) 12:41:31.35ID:ZavMgXDP
Openpyxlでエクセルシートをリスト化した後
シート名を条件に抽出することはできますか?
すみません、調べてもわかりませんでした。
2018/11/09(金) 13:11:43.28ID:XhL65g6u
>>811俺だったらこうする
if random.randrange(2):

「一定回数抽選すると、AとBの出現率が必ず1:1になる」ことを求めているならシャッフルを使う
a=[0]*50+[1]*50
random.shuffle(a)
2018/11/09(金) 13:44:15.88ID:lOOqdq/Y
deapのbase.Fitnssでweightsの動き方がよくわからないんですが
仕様を説明したサイトはありますか?
2018/11/09(金) 13:47:08.53ID:iep8j/69
>>814
シート名は .get_sheet_names()でリストでとってこれるから
とってきたあと
1つ1つのシート名でifすればいいだろ
2018/11/09(金) 13:49:25.70ID:iep8j/69
>>816
https://deap.readthedocs.io/en/master/api/base.html はもう読んでる?
2018/11/09(金) 14:27:01.20ID:D1KL18mO
python2.7 pandasのto_csvでの出力、文字コードについてです
utf8のdfがありコレをsjis(sjisで表現出来ない文字は無視や?置き換えで良い)にしてcsvにしたいです
調べると
with codecs.openでencoding='cp932' errors='ignore'で出力ファイルを開き
df.to_csv(ファイルオブジェクト, encoding='cp932')
で出来ると書いてあったのですが普通にUnicodeエラー出ます
何が原因でうまくいかないんでしょうか、また他の解決法なにかありませんかね
2018/11/09(金) 15:23:15.00ID:iep8j/69
>>819
ソースコードの文字コードは何で書いてる
OSは何よ

Unicodeエラーの内容は略さず書いて
821デフォルトの名無しさん
垢版 |
2018/11/09(金) 16:18:25.51ID:aAkZVDrn
PythonがWEBで覇権取れば最強のスクリプト言語になるのにな
Djangoとかいうゴミはいいから早くRailsとかLaravel並みにいいフレームワーク作ってくんね?
822デフォルトの名無しさん
垢版 |
2018/11/09(金) 17:36:50.37ID:rwK1ciOK
GoogleってWEB開発にPython使ってるらしいけどフレームワークはDjangoなのかな?
社内で別のフレームワーク使ってんだったら公開してほしいな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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