【まず1嫁】くだすれPython(超初心者用) その54

■ このスレッドは過去ログ倉庫に格納されています
2021/06/09(水) 21:05:44.61ID:zRBfpo4e
当スレに★Python以外のプログラミング言語での回答類を書くべからず★
派生言語はそれぞれ専スレがある(この板にあるとは限らない)ので、そっち池。
「Ruby」「Rails」「某言語では」「クソチョンw」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。

このスレッドは「お勉強」スレのほうには書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。

★エラーを解決したい場合★は、
  表示されたエラーの全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、
  実行環境(Pythonのバージョン・OSとIDEの種類およびバージョン)をシッカリ書くこと。

Pythonの★ソースコードをそのまま5ちゃんに貼るとインデントが崩れてチヌ★
【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】掲示板の仕様なので、
プログラム文は↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://codepad.org/      ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Python公式◇ http://www.python.org/
◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi

〇前スレ〇 【まず1嫁】くだすれPython(超初心者用) その53
https://mevius.5ch.net/test/read.cgi/tech/1615846784/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
2021/07/07(水) 14:46:15.07ID:JFEXb6g2
pep8に
単一の文字 'l' (小文字のエル)、'O' (大文字のオー)、'I'(大文字のアイ) を決して変数に使わないでください。
フォントによっては、これらの文字は数字の1や0と区別が付かない場合があります。

ってあるけど、上のような理屈であれば、単一の文字でなくても同じ理由で使うべきではないことになるんでは?
312デフォルトの名無しさん
垢版 |
2021/07/07(水) 15:11:46.21ID:49748z4f
10ng と long と IONG を間違うかって話だな
2021/07/07(水) 16:43:31.83ID:2KJNjcti
$python hoge.py 10 | python hoge2.py | python hoge3.py

### hoge.py ###
import sys
for i in range(int(sys.argv[1])):
_print(i)

### hoge2.py ###
import sys
a=''.join(sys.stdin.readlines()).strip().split('\n')
a.append(len(a))
for n in a:
_print(n)

### hoge3.py ###
import sys
print(len(''.join(sys.stdin.readlines()).strip().split('\n')))

ざっくり
(1)hoge.py 10で10個数字を出力
(2)hoge2.pyで受け取り、値を追加して出力
(3)hoge3.pyで受け取り、1個増えたことを確認
なのですが、受け取った値を成形する
''.join(sys.stdin.readlines()).strip().split('\n')
の部分はこの書き方でよいでしょうか?
そもそも標準出力をprintでやるのかもわかりません
それ専用の標準ライブラリとかあるのかな
2021/07/07(水) 17:49:17.95ID:vUBZA2na
>>313
標準出力はprintでやるのでいいよ
1行ごとに処理したいわけじゃなければ.read().splitlines()すればいいと思う

#hoge2.py
import sys
a = sys.stdin.read().splitlines()
a.append(len(a))
for n in a:
__print(n)

#hoge3.py
import sys
print(len(sys.stdin.read().splitlines()))
2021/07/07(水) 18:46:33.05ID:2KJNjcti
>>314
なるほどprintでよかったんですね
splitlinesできました!ありがとうございました
2021/07/08(木) 21:41:26.17ID:g5ngXWNu
raspbian buster上のpython3.7.3で、
subprocess上で読み込むcsvファイルをStringIOにするとうまくいかず困っています。

以下2つのソースで、異なるのは1行目だけです。

[test1.py]
CSVFILE = '/tmp/1.csv'
with open(f'{CSVFILE}', 'a') as CSV:
writer = csv.writer(CSV)
writer.writerow([12,34,56])
CSV.close()
cmd = (f'cat {CSVFILE}')
proc = subprocess.run(cmd, shell=True)

[test2.py]
CSVFILE = io.StringIO()
with open(f'{CSVFILE}', 'a') as CSV:
writer = csv.writer(CSV)
writer.writerow([12,34,56])
CSV.close()
cmd = (f'cat {CSVFILE}')
proc = subprocess.run(cmd, shell=True)

$ python3 test1.py
12,34,56

$ python3 test2.py
/bin/sh: 1: Syntax error: end of file unexpected

何を見落としてるんでしょうか…?
2021/07/08(木) 22:38:29.83ID:PyDOiOef
何をしたいかが全く分からないがとにかく
そのエラーは/bin/shが
cat <_io.StringIO object at 0x7f1360de01f0>
とかいう文字列を実行しようとして
>が出力のリダイレクトと解釈してその後にファイル名がないからエラーになってる
318316
垢版 |
2021/07/09(金) 07:49:00.55ID:6wIK8ZSE
>>317
ありがとうございます!
例で実現したいことは、
$ python3 test2.py
12,34,56
この結果が出るにはどうしたら良いかが知りたいです。

シェルから見て実体のあるファイル名でないとダメってことですね。それはそうか。
一度ファイルシステムに書き出せば良いのでしょうが、それ以外の手はないでしょうか。

なお、例では長くなるのでcatコマンドに書き換えましたが、実際にやりたいことは
「pythonの前段処理結果をcsvに書き込み、そのcsvをgnuplotで読み込んで作図(を毎秒繰り返し)」というプログラムです。
処理結果の数字は毎秒積み上がっていくのと、プログラム終了時には実体のcsvファイルに書き出したいのとで
プログラム上では、StringIOを使ったcsvファイルとして処理したいです。
2021/07/09(金) 08:12:26.61ID:2AR12dC9
>>318
>「pythonの前段処理結果をcsvに書き込み、そのcsvをgnuplotで読み込んで作図(を毎秒繰り返し)」
だったら質問の意味が尚更分からん
上記の処理を1プログラムでやりたいなら
Pythonで前処理⇒直接前処理結果をグラフ作画⇒作画後に必要に合わせてデータをcsv出力
っていう流れの方が良くね?
書き込んでから読み込む必要性が全く分からん
320316
垢版 |
2021/07/09(金) 08:30:32.97ID:6wIK8ZSE
>Pythonで前処理⇒直接前処理結果をグラフ作画
前処理では複数行複数列の数字(時間と温度です)を積み上げていくので、
その前処理結果のgnuplotへの渡し方としてcsvが適当かな、と思ったためです。

それとも、そもそもpythonスクリプトとしては前処理のアウトプットだけでexitし、
gnuplotはOS側シェルで普通に動かして前処理結果を使えば?という意味だとすれば、
今回はpythonスクリプト内でgnuplotを動かしたいです。
2021/07/09(金) 08:51:54.66ID:sj/mydTS
データが来るたびにファイルに追記していく(writeのあとにflush)
gnuplotは別に起動して毎秒ファイルを読み直す
と分けるのがよさそうに見える
2021/07/09(金) 09:04:12.08ID:2AR12dC9
>>320
>その前処理結果のgnuplotへの渡し方としてcsvが適当かな、と思ったためです
gunplotのマニュアル確認したけど、それなら素直にCSVファイルとして書き出さないと無理じゃないか?

大学か会社の都合か分からんけど
Pythonで素直に一連の動作をさせるなら
matplotlibの方がよっぽど楽だけど、それだとダメなんだよな
323316
垢版 |
2021/07/09(金) 09:08:57.43ID:6wIK8ZSE
もともとはシェルスクリプトでそんな感じでやっていて、
拾ってきたpythonで温度を測定し、結果を/tmp/temp.csvに書いてそれをgnuplotに読ませてました。
実はgnuplotが書いたグラフ(png)をまた(拾ってきた)pythonでOLEDに描画するという後処理もあって、
全工程で1秒ちょっとかかってました。
そこで、おっしゃ自前でpythonの1スクリプト化して高速化や!コピペマンから脱却するやでー!
という素人考えで今に至っています。
pythonの1スクリプトで、>>316に書いたtest1の方法(中間ファイル書く)でも
シェルスクリプト版の倍は速く動いてるので、あとはStringIOさえできれば…と思ってました。

何分素人なのでそもそもの考え方が間違ってるところもあるとは思いますが、
なぜそう思うに至ったか、という話でした。
324316
垢版 |
2021/07/09(金) 09:14:25.66ID:6wIK8ZSE
>>322
やっぱ実体としてのcsvファイルがないとダメですかね…ありがとうございます。

matplotlibはグラフ描くがgnuplotより難しそうだから見なかったことにしてました。
いい機会だから、もう一度調べてチャレンジしてみます。
2021/07/09(金) 09:20:09.59ID:2AR12dC9
>>323
すげえ面倒な方法で見える化やってるなwwwwww
慣れたらmatplotlibも描くの簡単だぞ、Pandasとかnumpyとの相性も良いし

ただ根本的な所で言えば、既存の見える化フローが結構ヤバイな
(グラフ画像をOLEDで映し出すっていうのが衝撃だわ)

抜本的に改善したいなら
Pythonでデータ処理⇒データベースに書き込み⇒データ系の見える化ツール
っていうのが理想形だな
TableauとかPower BIみたいなツール使うと見やすくなる(有償だけど)
無償ツールなら英語だけどGrafanaとかかな?
326316
垢版 |
2021/07/09(金) 09:39:34.13ID:6wIK8ZSE
>>325
今回はラズパイローカルでグラフを物理画面に即描画したいんですよね。
趣味の焙煎釜の温度変化を熱電対で計測し、手元でリアルタイムにグラフ描画したい、
そして記録をcsvに残したい、というのが目的です。
今は単機能の熱電対プローブでやっていて、温度変化が全くわからないので。

そこでまずはアリエクで300円しないOLEDを買ってラズパイに繋いで
gnuplotのpngをSPI接続のoledに送り出し続けるという形にしました。
ほんとはpythonからoledのライブラリとか使って直接描画とかもできるのかもしれませんが、
matplotlibともどもフタをしてました…
これがうまくいったら、OLEDやめてラズパイケース一体液晶にしても良いかなとは思っています。

GrafanaやPowerBIは別件で使ったこともあって、後分析には良いですよね。
2021/07/09(金) 09:47:38.88ID:2AR12dC9
>>326
>今回はラズパイローカルでグラフを物理画面に即描画したいんですよね。
あーなるほど、そういう使い方もあるのか……俺の知識不足だったすまん
ただ結局グラフのpng画像を生成出来れば問題なさそうだし、matplotlibの差し替えが無難な気はするな
2021/07/09(金) 23:58:06.76ID:dI9qqvw1
int型の足し算ではintクラスの持っている__add__メソッドが暗黙的に呼び出されていると思います。
ですが、
1.__add__(2)
のようにすると1+2が実行されず構文エラーになります。これは何故でしょうか?

str型の場合は問題なく実行され、以下の場合"aabb"が返ってきます。
"aa".__add__("bb")
2021/07/10(土) 00:16:00.86ID:8UKJFvZ/
詳しくないが 1. が小数になるのが原因だろう
(1).__add__(2)
とか
1..__add__(2)
ならエラーにならない
2021/07/10(土) 00:16:24.03ID:Rm9mfcPV
1.x(float)か1のメソッドなのか決まらないから
1.1.__add__とかはメソッドなのが分かるから通る
2021/07/10(土) 00:59:10.02ID:MSe133Oz
>>329
>>330
納得しました!
ありがとうございます
2021/07/10(土) 10:33:46.40ID:chyfa+iT
Python3.7で、pdbのtrace中とそれ以外でプログラムの挙動が異なるという問題に悩んでいます。
■現象
PySimpleGUIのpng画像をwhile True:で延々と更新し続ける処理が、
・pdb set_trace中は想定通りに画像が更新され続ける(ただし途中でpdbが止まる)
・traceを外すとそもそも画像が表示されない

■処理
"conv_image"を別関数で更新し続け、
このwindow更新行をwhileで回すだけの処理です。
window['-image-'].update(data=get_img_data(conv_image))

■pdbが止まる件
不思議なのは、通常pdbはデバッグ中に一度nで次に進むと、次行からはEnterだけでエラーのない限り進みますよね。
でもEnter押しっぱなしにしてると、この行でエラーの表示もなくpdbがいったん止まります。
nを押すと進み、画像が更新されます。
そこが問題のポイントなのかなと思いますが、それ以上の手がかりがありません。
2021/07/10(土) 10:43:05.45ID:lk+ovMEl
>>332
再現できる最小限のコードを提示しましょう
2021/07/10(土) 11:13:10.52ID:Ai3MLyk0
> get_img_data(conv_image)
この計算は一回でいいんじゃ
2021/07/10(土) 13:30:27.85ID:nAGZi/ZP
GUIがメッセージを処理する時間がねえんじゃねえの
336332
垢版 |
2021/07/10(土) 14:33:07.51ID:chyfa+iT
>>333
すみませんでした…
ttps://dpaste.com/AQL5WPNUS
手元のraspbian buster python3.7.3では、ここまで削っても
後ろから4行目のpdb.set_trace()有無で、>>332に書いた現象が出ます。

>>334
window['-image-'].update(data=conv_image)
こうでいいんじゃないの?と思って最初はこう書いてたんですが、
BytesIOが生で見えてるのか何なのか、"TypeError: 'int' object is not callable"エラーが出ます。
ググったところ、get_img_data関数(割と一般的らしい)を使えとあったのでそのようにしたところ、表示できるようになりました。

>>335
試しに2ヶ所あるwindow.updateの直後にtime.sleep(1)を入れてみたんですが、変化なしでした。
2021/07/10(土) 16:36:24.47ID:c5RJ/qlV
>>336
PySimpleGUIでメッセージ処理させるのはwindow.read()
メッセージ無くても回したいならtimeoutを指定する
2021/07/10(土) 18:01:51.33ID:lk+ovMEl
window.read()してないのでtk.update()が呼ばれず画面が更新されない
window.TKroot.update()を呼べば画面が更新されるが
直接呼ばずにwindow.read()を使ってメッセージループを作るほうがいい

デバッグセッション時はそれだと使いにくいから何か対処されてるっぽい
339332
垢版 |
2021/07/10(土) 18:38:29.97ID:chyfa+iT
ありがとうございます。なるほど…!
どこかでサンプルプログラムをコピペしつつ、ボタンはどうでもいいから
とりあえず画像表示ループだけ回そうと適当かつ中途半場に行を削除してしまったので、
その結果イベント処理が進まない状態ということですね。
すごく良くわかりました。
どう処理するかよく考えて書き直してみます。
340デフォルトの名無しさん
垢版 |
2021/07/11(日) 08:30:07.56ID:k6naGpL9
ユニークな長いリスト src があって
おのれはユニークだけどsrcと重複しうるリスト reqがある
reqの要素がひとつでもsrcにあれば云々したい
速いのを探しています。外部ライブラリは使えない

test = set(req)
bool([i for i in req if i in test])
?
2021/07/11(日) 09:23:01.16ID:FD6lxZ3g
any()かfor-loopのearly breakを使う

srcは長くて固定的、reqは短くて毎回変わるなら
srcのほうをsetにして管理したほうがいい
342デフォルトの名無しさん
垢版 |
2021/07/11(日) 10:48:10.63ID:k6naGpL9
いや冷静に考えたら
フツーにset(src)&set(req)か
343デフォルトの名無しさん
垢版 |
2021/07/11(日) 10:50:02.39ID:BLRKNf/m
共通要素を全て調べ上げる必要が無いなら>>341の方が速いな
2021/07/11(日) 11:14:07.88ID:k3ZSGeVZ
>>340
速いかどうかは知らん
not set(src).isdisjoin(set(req))
345デフォルトの名無しさん
垢版 |
2021/07/11(日) 12:26:28.31ID:k6naGpL9
>>341
set(src10万)
req300 重複0〜5
ではany()と&はほぼ誤差
bool([i in set])がわずかに遅い感じでした
センキュー
2021/07/11(日) 12:57:32.61ID:xAgoNPlJ
>>258
分かりやすい
2021/07/11(日) 19:05:49.41ID:akfEDp81
違和感というのは[]を()のように捉えてるから
リストや文字列に対する*は数学の掛け算とは無関係
要素数を増やせという機能


> [3*3] -> [9]
数学の掛け算
> [3]*3 -> [3, 3, 3]
リスト内の要素3を数で3つに増やせ
> [[3*3]] -> [[9]]
掛け算
> [[3]*3] -> [[3, 3, 3]]
内側のリストの要素3の数を3つに増やせ
> [[3]]*3 -> [[3], [3], [3]]
リストの要素[3]を3つに増やせ
2021/07/11(日) 20:54:53.44ID:yIl0mON7
どうした急に
2021/07/11(日) 21:15:21.80ID:BeeJLMuH
発作よ
お薬を忘れたみたいね
2021/07/12(月) 00:05:06.94ID:hfOyhNhX
サブクラスからスーパークラスのメソッドを呼び出す場合、次の@とAは同じ意味ですか?
同じならどちらで書いた方がいいとかありますか?

class MyClass1:
def __init__(self, name):
self.name = name

class MyClass2(MyClass1):
def __init__(self, name):
@ super().__init__(name)
A MyClass1.__init__(self, name)
351デフォルトの名無しさん
垢版 |
2021/07/12(月) 00:29:53.14ID:2Zpr4/N8
わざわざsuper というキーワードが用意されているのだから使わない理由ないだろ
クラス名を変更した際の影響範囲を考えてみよう
2021/07/12(月) 11:10:07.04ID:4WArcuIG
>>350
その例だと同じだけど複数から継承するようなクラスを使う場合は
super()が返すものが普通に想像するものとは違ってくるケースもあるので注意が必要
https://fuhm.net/super-harmful/
2021/07/12(月) 19:50:10.58ID:QV5M7VnV
>>347
数学と無関係ではないよ、加群としてとらえても矛盾のない演算になってるでしょ
2021/07/12(月) 20:27:18.44ID:HIUYKm1A
それは*3が同じものを3つ足し合わせなさいという
常識的な意味合いをわかりやすさのために利用してるだけで
数学的なことなら割り算もあるでしょ
2021/07/12(月) 21:40:52.58ID:4WArcuIG
常識的な意味合いかぁ・・・
演算子オーバーロードの悪い見本にしか見えない
2021/07/13(火) 01:00:18.86ID:o9TqNFAF
>>351
>>352
ありがとうございました
ある本に説明もなく両方の記載があったので悩んでました
この機会に多重継承も勉強しようと思います
2021/07/13(火) 05:15:40.15ID:eWSxSU0S
数学っぽくやるなら
[3]*3->[9]
[1, 2]*3->[3, 6]
のほうがより直感的だった気はする
2021/07/13(火) 05:42:16.34ID:QsXB5/qu
numpyはそうなってるね
359デフォルトの名無しさん
垢版 |
2021/07/13(火) 11:39:29.89ID:Oq4/PEVt
pythonバージョン3.8.1で次のようなことをしようとしていますが、関数の配置に困っています。

次にするイベントを抽選する

イベントを実行する

イベント終了後にイベント抽選へ戻る

しかし、これだとイベントを抽選する関数をイベントの関数より上に置くとイベント抽選の関数がイベントの関数を認識してくれず、
下に置くと、各イベントの関数がイベント抽選の関数を認識してくれません。
なんとか動かす方法はないものでしょうか?
360デフォルトの名無しさん
垢版 |
2021/07/13(火) 11:45:58.98ID:uAPVX+Xy
5chのこの板のAndroid版のスレタイトル一覧を取得したいのですが、スレタイトル部分だけ抜けてしまいます。
htmlを見ると、スレタイトル部分はjava scriptを呼び出して(?)表示しているようです。
このような別から呼び出す仕組みの検索語だけでも知りたいです。

実行環境はWindows10のcolabです。
何卒よろしくお願いします。

以下がソースとhtml抜粋です。

https://pastebin.com/dq4FFsM3
2021/07/13(火) 11:52:22.48ID:eWSxSU0S
相互参照は常に避けるよう心がけるべき。
回避する方法はいろいろあるけど、
イベント抽選関数はイベントの関数に引数として渡してあげるとか、
イベントの関数はすべて同じ引数、戻り値にしておいて、イベント抽選システムへ予め登録しておく方式にするとか
2021/07/13(火) 11:55:28.21ID:I5G4+d/9
知らんけどmain関数のなかにwhile True: 抽選関数()
みたいにしてループさせて抽選されたイベント自体は抽選関数を呼ばなければいいだけじゃないの
2021/07/13(火) 11:59:46.95ID:0QNuXsy/
ttps://mevius.5ch.net/tech/subject.txt
> スレタイトル一覧を取得したい
> このような別から呼び出す仕組みの検索語だけでも知りたい
どっち?
スレタイ取得ならsubject.txt読ませればいいじゃん
わざわざしかもitestのhtmlをスクレイピングする理由あるの?
364デフォルトの名無しさん
垢版 |
2021/07/13(火) 12:22:40.44ID:WUJYnH4r
>>354-355
*3がどう展開されるかより
もっと深刻な問題は
[[?]]*Nの内側の[?]はコピーされていないということだろ
365デフォルトの名無しさん
垢版 |
2021/07/13(火) 12:24:59.10ID:WUJYnH4r
>>359
前方参照でぐぐれ
366デフォルトの名無しさん
垢版 |
2021/07/13(火) 12:26:33.03ID:WUJYnH4r
>>360
5chはスクレイピング禁止
2021/07/13(火) 12:31:27.78ID:QsXB5/qu
>>359
イベントの関数定義と、抽選・実行をする処理とはファイルを分けて
前者を後者のファイルでimportして使う

1ファイルでできなくもないけど
モジュール分割を早めに覚えておいたほうが散らかりにくい
2021/07/13(火) 12:43:35.25ID:dtNqNBdW
>>360
Ruby, selenium-webdriver では、
execute_script で、そのまま、JavaScript ソースコードを実行できる

ただし、5ch で頻繁にスクレイピングすると、アク禁にされるかも

require "selenium-webdriver"

options = Selenium::WebDriver::Chrome::Options.new
options.add_option( :detach, true ) # ブラウザを切り放す
options.add_argument( '--start-maximized' ) # 画面最大

driver = Selenium::WebDriver.for :chrome, options: options
driver.manage.timeouts.implicit_wait = 15 # 要素の検索の timeout

url = "サイトのURL"
driver.navigate.to url # 移動する

js_code = <<"EOT"
var elem = document.getElementById( 'abc' );
EOT

driver.execute_script js_code # JavaScript を実行
369368
垢版 |
2021/07/13(火) 13:03:34.95ID:dtNqNBdW
5ch は最初に、空のHTML を送ってきてから、
その後、JavaScript(Ajax)で通信して、内容を取り込む

だから単に、Ruby のNokogiri などでスクレイピングをしても、
空のHTML が取れるだけで、まだ内容が読み込まれていない

だから、15秒ぐらいスリープして、内容が読み込まれるまで待つ必要がある

または、selenium-webdriver で、ブラウザを自動操作して、
driver.manage.timeouts.implicit_wait = 15 # 要素の検索の timeout
みたいに、要素が存在しない場合に、何秒待つか指定する
370359
垢版 |
2021/07/13(火) 13:16:57.35ID:Oq4/PEVt
ご回答ありがとうございました。
私があまりに初心者過ぎて、せっかくの具体的なご回答をほぼ理解できませんでしたが、
この状態を相互参照と呼ぶことが分かってようやくググることができ、
>>362さんのレスから着想を得て、main関数を作ってプログラムを全部括れば動くということが判明しました。
以上ご報告と御礼申し上げます。
371360
垢版 |
2021/07/13(火) 17:54:03.79ID:28i3hfQd
>>368
ありがとうございます。
Ajaxという技術なのですね。
webdriverでwaitを入れたところ取得できました。


>>363
すいません説明不足でした。
実はPC版はシンプルなため取得できていました。
勉強のためにAndroid版も見てみようと思いやってみたところ、取得できなかったためお聞きしました。

皆様、勉強になりました。
ありがとうございました。
2021/07/13(火) 18:33:25.76ID:KwvhlQcy
>>354
そのツッコミをするなら、群と体の違いについて理解しようか。
掛け算があっても、割り算が必ずしも定義できるとは限らない。
2021/07/13(火) 20:54:54.99ID:4WrY8hy5
何このruby基地外の自作自演
きっしょ
2021/07/15(木) 02:12:23.66ID:0WF/Cs9d
スクレイピングでrequestsで上手く取得できないサイトはSeleniumで取得するようにしてるんだけどこれにThreadPoolExecutorを使用するとしたらどういう書き方すればいいの
今までは複数のサイトのURLが入ったリストをfor文で回しつつif文でドメインが一致するかどうかでrequestsとSeleniumを使い分けていたけど非同期にするとなるとさっぱりわからん
2021/07/15(木) 12:00:52.16ID:Rdfymp1t
クラスのメンバをforループのように回す方法はないですか?イメージは、
class Test:
a=0
b=0
c=0
def _print(self):
for member in self:
print(member)

みたいなことをやりたいです。
2021/07/15(木) 12:05:26.72ID:erbvpp8v
__iter__か__getitem__を定義すればいけるはず
2021/07/15(木) 12:46:48.66ID:82cJAwkj
試してないけど、
for v in vars(self):
print(getatter(self, v))
378デフォルトの名無しさん
垢版 |
2021/07/15(木) 15:25:55.52ID:ygp86UHP
https://docs.python.org/ja/3/library/inspect.html
https://www.atmarkit.co.jp/ait/articles/1612/09/news030_3.html
379デフォルトの名無しさん
垢版 |
2021/07/15(木) 16:37:18.28ID:0u9iXN8m
そういうクラスのためのdataclass
astuple, asdictでイテレートもできる。
自分で用意できないクラスのオブジェクトの時は、dir()で列挙した後にごにょごにょしていく必要があるけど。
380デフォルトの名無しさん
垢版 |
2021/07/15(木) 16:50:42.66ID:TtIRjd2i
この度pyinstallerでどのshell環境でも動作するコマンドを作成しました。

しかし5年前くらいのIntelMacでさえ快適に動作しますが、
M1macbookではかなりもっさりして遅いのです。

これはarm64アーキテクチャのせいで遅い可能性はありますか??
またこういったケースでの改善策などありますか??
arm64用にコンパイル方法などありましたら教えてください。

コマンドはスクレイピングした結果を別ファイルに落とす
シンプルなコマンドです。
shellscriptだとちょい面倒だったのでpythonで書きました。
2021/07/15(木) 20:50:47.41ID:Rdfymp1t
ありがとうございますが、
>>377だと順番が毎回ランダムになる
>>378だと順番がアルファベット順になる?(多分)
csvの要素と対応付けたいので定義順に出てくれないと困ってしまうのです・・
>>379はバージョン不足で不可。(3.5系)
1番目が順不定になるのも多分dictの順番が保持されてないせいだと思いますしやっぱり素直にアプデですかねぇ。。。こんな仕様にしたのほんとに誰ですか
2021/07/15(木) 21:02:10.64ID:gFOIdhYR
>>374
AWS なら、Lambda, SQS などを使えば?
2021/07/15(木) 21:48:55.17ID:NjXHl1NW
>>381
for v in sorted(vars(self))でどう?
384デフォルトの名無しさん
垢版 |
2021/07/17(土) 15:16:05.35ID:eTC1af8g
定義順に出てくれないと困ってしまう

source を parse 汁
385デフォルトの名無しさん
垢版 |
2021/07/17(土) 15:16:05.74ID:eTC1af8g
定義順に出てくれないと困ってしまう

source を parse 汁
2021/07/17(土) 17:21:49.51ID:6TQt0Sye
seleniumって、3つくらいタブを開いて作業して、そのままwindowsを休止状態にして翌日立ち上げ直すと、開いていたタブを忘れるよね。

no such window とかエラー吐く
2021/07/17(土) 19:16:44.63ID:m/nn+SPH
スリープ時にsession ID無効にしてるんじゃ
仕様でそうであっても不思議ではない
388デフォルトの名無しさん
垢版 |
2021/07/18(日) 16:26:22.10ID:8WwhxwTZ
質問です。
https://docs.python.org/ja/3.10/library/typing.html
に記載の
-----
@overload
def process(response: None) -> None:
...
@overload
def process(response: int) -> tuple[int, str]:
...
@overload
def process(response: bytes) -> str:
...
def process(response):
<actual implementation>
-----
の「...」はどういう意味でしょうか。
vscodeでそのまま...で書いたら特にmypyやflake8はエラーも吐かずに、
そのまま実行できたので、何かしらの文法かとは思っていますが、検索して見つからず、passとの違いが気になりまして。
2021/07/18(日) 16:35:53.43ID:sC7cbule
インタプリタを起動して...だけ入力してEnterしてみれば分かるよ
答え言っちゃうと...はEllipsisオブジェクトを作る省略記法だな

ただし引用されてるコードはEllipsisオブジェクトを作ることを意図してる訳ではなく
単に「ここには任意の実装がありますが、説明したいことの本質とは無関係なので省略しますよ」という意味で書かれているだろう
プログラムの話というよりは国語の話だ
390デフォルトの名無しさん
垢版 |
2021/07/18(日) 16:53:56.22ID:8WwhxwTZ
>389
ちょっとEllipsisでしらべてみましたが、オブジェクトを返すんですね。
理解しました、ありがとうございました。
391デフォルトの名無しさん
垢版 |
2021/07/18(日) 17:44:08.93ID:UkQCwsAx
お聞きしたいことがあります。変数の定義に1以上□以下。とやりたいのですが、□にまた別の変数を入れたいのです。この場合どうすればいいのでしょう。別の変数はちゃんと整数で定義してあります。
そして、その定義内の全部の数字を一つずつ代入して計算する。というのもやりたいです。立式はもちろんできるんですけど、プログラムに反映させるのがどうにも難しくて。調べてもよくわからないのです。恐らく調べ方が悪いだけなのかもしれませんが。。よろしくお願いします。
392デフォルトの名無しさん
垢版 |
2021/07/18(日) 18:00:24.58ID:jPlpwmso
numpy 使え
linspec
2021/07/18(日) 18:07:48.06ID:aN3/9svp
>>391
foo = range(1, x + 1)
394デフォルトの名無しさん
垢版 |
2021/07/18(日) 18:19:36.49ID:UkQCwsAx
>>392>>393
申し訳ないです。numpyは入れましたが分かりませぬ。そして393さんの式が何を意味してるのかも分かりません。
当方中学生なもので。プログラミングの知識が皆無と言って良いほどなんです。すみません
2021/07/18(日) 18:54:09.31ID:Xl9gD1Ws
>>394
中学生が5chのプログラム板に流れ着くっていうのも凄いな

簡単なサンプルコードをとりあえず出しておくけど
入門書とかまだやってないなら、一旦そっちやった方が良いかもな
(質問の内容ぐらいだったら、ライブラリとかは不要で基本を組み合わせるだけで出来る)
https://ideone.com/q7v4da
2021/07/18(日) 19:40:52.85ID:gLxBARQW
半年ROMって無さそう
2021/07/18(日) 20:14:56.68ID:KenitbzS
s=15
list1=range(1,s+1)
map(f,list1)
398デフォルトの名無しさん
垢版 |
2021/07/20(火) 09:21:51.96ID:2ecX9oPq
自称中学生のおっさん臭プンプン投稿
399デフォルトの名無しさん
垢版 |
2021/07/20(火) 09:31:55.38ID:2ecX9oPq
>>391
>>394
import numpy as np
s = 15
list1 = np.linspace(1, s, s)
print(np.power(2, list1).astype(np.int))
400デフォルトの名無しさん
垢版 |
2021/07/20(火) 12:30:08.20ID:Mdyk1C1W
命名規則スレに書くか迷ったんだけどとりあえずこっちで…

tkinterでラベルとかボタン複数作るとき
各々text埋め込むんじゃなくて、名前テーブル参照するようにしたい
このときたとえば
self.x_btn = tk.Button(root, text=self.db.name[0])
てすると、これインデックスがマジックナンバー化すると思うんだけど
通常どのような呼び出し設計にするのですか?
self.db.name["ウィジェット名"]とか?
2021/07/20(火) 18:51:14.03ID:zCG2UJGN
通常はリテラルで直接textに代入して
数が多かったらwidth等と合わせてリスト化して
for i inで回すかな
2021/07/20(火) 19:37:39.84ID:b4jpo/5+
テーブルにする必要があるのか?
直でいい気もするけど、それが嫌ならどこかに
BUTTON_NAME_XXX = "XXXのボタン名"
・・・
とか羅列していってそこ参照して終わり
テキスト以外にフォントや背景色とか配置情報まで全部まとめてdbのように管理して自動配置したいってなら分からなくもないけど
テキストだけならいらない、やってる感出るだけで意味があまりない
403デフォルトの名無しさん
垢版 |
2021/07/20(火) 21:14:39.90ID:Mdyk1C1W
あー定数のようなものにして
テーブル相当の場所に列挙しとく感じですね
なるほど
2021/07/24(土) 07:46:47.19ID:7TtC0ooc
requestsでtry:except:で特に問題なく使ってたけど
なぜかプログラムが止まることがあってどこでループでもしてるのかと探してたらrequestsのタイムアウトが原因だった
今までのサイトでtimeout設定なしで止まったことなかったので新たな発見だった
405デフォルトの名無しさん
垢版 |
2021/07/24(土) 14:55:00.78ID:hiQTHxs1
Scrapyくわしい人おるか?
Spiderにインスタンス変数持たせたいんだけど
__Init__をオーバライドしてやるしかないの?
スパイだのobjectが変数持ってくれたら何でもいいんだけど
2021/07/24(土) 16:34:15.11ID:rOUP+Gb+
__init__が要件を満たさない理由を書けよ
それが明らかでないと、別の方法を提案しても同じ理由で要件を満たさないかもしれないし
そうなると二度手間だろ
407デフォルトの名無しさん
垢版 |
2021/07/24(土) 17:01:57.99ID:hiQTHxs1
>>406
単純にSuperするのがマンドクセからです
重厚なフレームワーク使ってるんだからなんか他の方法あるかなーと思いました。
Response.meta に入れたら次のResponse にも引き継げる?
2021/07/24(土) 18:51:04.23ID:LBBZ+Kmj
しょうもな
409デフォルトの名無しさん
垢版 |
2021/07/24(土) 19:18:50.35ID:vC93mKDQ
馬鹿には無理
410デフォルトの名無しさん
垢版 |
2021/07/24(土) 19:22:14.64ID:zcVNczsi
pythonしか知らないんですが
普通のアプリケーションってリリース後にパッチ当てれますよね
pythonをpyinstallerしたやつを公開したあと
パッチリリースってできるんですか?
検索ワードすら思いつかない(モンキーパッチばかりヒットする)ので、ヒントだけでもください
411デフォルトの名無しさん
垢版 |
2021/07/24(土) 19:23:20.77ID:zcVNczsi
失礼
普通のアプリケーション ☓
普通の(Cとかの)言語のアプリケーション ○
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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