当スレに★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 ###
探検
【まず1嫁】くだすれPython(超初心者用) その54
■ このスレッドは過去ログ倉庫に格納されています
2021/06/09(水) 21:05:44.61ID:zRBfpo4e
275デフォルトの名無しさん
2021/07/04(日) 22:38:11.14ID:1R4z78Cs むつかしいほうは8割だっつっとろうが
276デフォルトの名無しさん
2021/07/04(日) 22:39:45.78ID:SVViFRUT277269
2021/07/04(日) 22:40:16.40ID:aHJdtdht 簡単な80% の部分を、横に進めていく。
Ruby on Rails なんて、まさにそう。浅く広く
Rails, Linux, Docker Compose, Node.js(Webpack, Babel), Bootstrap
VSCode(Remote Container, WSL2 ならRemote WSL), Heroku, CircleCI、データベース
さらに、AWS Fargate, Terraform, Vue.js, TypeScript
KENTA のサロン、AWSのくろかわこうへいのサロンに入る。
だから、1年の未経験者が、10年以上のプロよりも技術力が上になる!
時間が掛かる、難しい20%の部分を勉強しないから。
これを、KENTAが勉強方法のチートと言ってる
簡単な80%の部分の勉強時間は、20%しか掛からないのに、
難しい20%の部分の勉強時間は、80%掛かる
つまり、勉強時間では逆になる。
しかも、特殊だから再利用できない・使う頻度が少なく、役に立たない
例えば、C を10年やってる香具師の大部分の時間が、ポインターを追っかけている時間
だから、時間が掛かるだけで、何も学べていないから、
Railsを1年やっただけの未経験者に負けてしまう
Rubyの女神・池澤あやかも言ってる。
大学生がプログラミングで挫折するのは、Cをやるからだって
つまり、ほぼ無意味なことを長時間やるから、しょーもない
Ruby on Rails なんて、まさにそう。浅く広く
Rails, Linux, Docker Compose, Node.js(Webpack, Babel), Bootstrap
VSCode(Remote Container, WSL2 ならRemote WSL), Heroku, CircleCI、データベース
さらに、AWS Fargate, Terraform, Vue.js, TypeScript
KENTA のサロン、AWSのくろかわこうへいのサロンに入る。
だから、1年の未経験者が、10年以上のプロよりも技術力が上になる!
時間が掛かる、難しい20%の部分を勉強しないから。
これを、KENTAが勉強方法のチートと言ってる
簡単な80%の部分の勉強時間は、20%しか掛からないのに、
難しい20%の部分の勉強時間は、80%掛かる
つまり、勉強時間では逆になる。
しかも、特殊だから再利用できない・使う頻度が少なく、役に立たない
例えば、C を10年やってる香具師の大部分の時間が、ポインターを追っかけている時間
だから、時間が掛かるだけで、何も学べていないから、
Railsを1年やっただけの未経験者に負けてしまう
Rubyの女神・池澤あやかも言ってる。
大学生がプログラミングで挫折するのは、Cをやるからだって
つまり、ほぼ無意味なことを長時間やるから、しょーもない
278デフォルトの名無しさん
2021/07/04(日) 22:41:49.47ID:ZDZVmq0W 重要なのは2割って話は知ってるけど
簡単なのは2割って知らんな
簡単なのは2割って知らんな
279デフォルトの名無しさん
2021/07/04(日) 22:48:09.20ID:1R4z78Cs 統失煽りで文化人を一人殺したので
名前が同じだけでもてはやされてたKENTAは用済み
名前が同じだけでもてはやされてたKENTAは用済み
280デフォルトの名無しさん
2021/07/04(日) 23:01:11.65ID:PTs94Rmb Rubyって時点でお察し
281デフォルトの名無しさん
2021/07/05(月) 00:27:11.73ID:SA0zdM26 > だから、1年の未経験者が、10年以上のプロよりも技術力が上になる!
プロ舐めすぎやろ
自分のレベルすら正確に把握出来てないだけじゃん
プロ舐めすぎやろ
自分のレベルすら正確に把握出来てないだけじゃん
282デフォルトの名無しさん
2021/07/05(月) 01:30:50.54ID:cyuSl6kj >>245
演算規則を考えよう
1 * 3 = 1 + 1 + 1 = 3
[1] * 3 = [1] + [1] + [1] = [1, 1, 1]
であるので、
[[1]] * 3 = [[1]] + [[1]] + [[1]] = [[1], [1], [1]]
となる
加算と乗算に一貫性をもたせるとしたらこうするか、
1 + 1 = [1, 1]
[1] + [1] = [[1] + [1]]
のような規則にするしかないけど、明らかに1 + 1がリストになっちゃうのは使いにくいでしょ
演算規則を考えよう
1 * 3 = 1 + 1 + 1 = 3
[1] * 3 = [1] + [1] + [1] = [1, 1, 1]
であるので、
[[1]] * 3 = [[1]] + [[1]] + [[1]] = [[1], [1], [1]]
となる
加算と乗算に一貫性をもたせるとしたらこうするか、
1 + 1 = [1, 1]
[1] + [1] = [[1] + [1]]
のような規則にするしかないけど、明らかに1 + 1がリストになっちゃうのは使いにくいでしょ
283デフォルトの名無しさん
2021/07/05(月) 01:54:24.43ID:ts/O0CHN >>281
ダニングクルーガー効果ってのがあってぇ…
ダニングクルーガー効果ってのがあってぇ…
284デフォルトの名無しさん
2021/07/05(月) 08:07:41.22ID:308oM4PQ285デフォルトの名無しさん
2021/07/05(月) 11:09:29.47ID:c503ASju286デフォルトの名無しさん
2021/07/05(月) 11:52:44.70ID:DJ8mSFAE Railsはすべて分かっている人にとっては楽
初心者は設定や、細かいチューニングで必ずつまずく
初心者は設定や、細かいチューニングで必ずつまずく
287デフォルトの名無しさん
2021/07/05(月) 14:49:22.59ID:WfBg4Dd7 pandasで特定の列(横)の重複した値を削除して一つだけにするのってどうするの
例えばA,B,C,B,C,DってあったらA,B,C,,,Dにしたい(BやCのみでも可)
例えばA,B,C,B,C,DってあったらA,B,C,,,Dにしたい(BやCのみでも可)
288デフォルトの名無しさん
2021/07/05(月) 14:56:34.11ID:zfQ+6anv kwsk
289デフォルトの名無しさん
2021/07/05(月) 17:20:56.75ID:rH8GS2yx >>287
あえてPandas使ってとなるとむずいな
あえてPandas使ってとなるとむずいな
290デフォルトの名無しさん
2021/07/05(月) 18:56:50.40ID:+tp9LwEv BやCのみでも可なら
df.replace('B','').replace('C','')
それとは別にdf.duplicatedで空白にしたいインデックスがTrueになる
データフレームが得られる
データフレームにSQLほどの機能はないようだ
df.replace('B','').replace('C','')
それとは別にdf.duplicatedで空白にしたいインデックスがTrueになる
データフレームが得られる
データフレームにSQLほどの機能はないようだ
291デフォルトの名無しさん
2021/07/05(月) 20:17:35.08ID:41zUyXOD dfの横はlist的に扱えるから一次元リストの重複要素を任意の値に置き換えるという操作をするだけでは?
292デフォルトの名無しさん
2021/07/05(月) 21:27:56.39ID:WfBg4Dd7 サンクス!
293デフォルトの名無しさん
2021/07/06(火) 00:10:38.82ID:c1bms/+C みんなのPythonで勉強しているのですがP340のwith文の説明がよくわかりません
私の理解では、with文でopen()した場合は、ファイルを最後まで読み切ったら自動的にclose()する処理になると思っています
この参考書には、openするファイルが存在しなかったらファイルを開かないで処理を終了する、ということが書いてあるのですが間違っていないでしょうか
openするファイルが存在しないと普通にエラーになるのですが
私の理解では、with文でopen()した場合は、ファイルを最後まで読み切ったら自動的にclose()する処理になると思っています
この参考書には、openするファイルが存在しなかったらファイルを開かないで処理を終了する、ということが書いてあるのですが間違っていないでしょうか
openするファイルが存在しないと普通にエラーになるのですが
294デフォルトの名無しさん
2021/07/06(火) 00:38:25.59ID:wcT5LwJn modeによるとしか
readならその通り。writeはファイルが存在しなければ作成される。
readならその通り。writeはファイルが存在しなければ作成される。
295デフォルトの名無しさん
2021/07/06(火) 00:48:09.74ID:IX8Wt/RA modeの話?
296デフォルトの名無しさん
2021/07/06(火) 00:52:21.13ID:AJxevGXU Ruby では、存在しないファイルを読もうとしたら、エラーになる。No such file
print File.read 'abc.txt'
出力
No such file or directory @ rb_sysopen - abc.txt (Errno::ENOENT)
print File.read 'abc.txt'
出力
No such file or directory @ rb_sysopen - abc.txt (Errno::ENOENT)
297デフォルトの名無しさん
2021/07/06(火) 01:06:54.99ID:c1bms/+C 参考書の例文はモード指定しない既定なのでreadです
with文のreadモードで開いたファイルをfor文で一行ずつprintしています
説明によると、ファイルが存在していたら処理を行うという意味のコードになるとのことです
with文のreadモードで開いたファイルをfor文で一行ずつprintしています
説明によると、ファイルが存在していたら処理を行うという意味のコードになるとのことです
298デフォルトの名無しさん
2021/07/06(火) 01:21:35.74ID:n3HBlCzk おじちゃんせっかくマニュアルあるのに読まない子の気持ちはわからないよ
https://docs.python.org/ja/3/library/functions.html?highlight=open#open
https://docs.python.org/ja/3/library/functions.html?highlight=open#open
299デフォルトの名無しさん
2021/07/06(火) 01:33:10.58ID:M25Qh6q2 >>293
>私の理解では、with文でopen()した場合は、ファイルを最後まで読み切ったら自動的にclose()する処理になると思っています
違うよ
>この参考書には、openするファイルが存在しなかったらファイルを開かないで処理を終了する、ということが書いてあるのですが間違っていないでしょうか
サンプルコードではFileNotFoundErrorをハンドリングしてるね
https://colab.research.google.com/github/shibats/minpy_samplecodes_4th/blob/master/Chapter10/10-01.ipynb
>私の理解では、with文でopen()した場合は、ファイルを最後まで読み切ったら自動的にclose()する処理になると思っています
違うよ
>この参考書には、openするファイルが存在しなかったらファイルを開かないで処理を終了する、ということが書いてあるのですが間違っていないでしょうか
サンプルコードではFileNotFoundErrorをハンドリングしてるね
https://colab.research.google.com/github/shibats/minpy_samplecodes_4th/blob/master/Chapter10/10-01.ipynb
300デフォルトの名無しさん
2021/07/06(火) 16:37:29.04ID:ewE8N/dz def test():
__return random.randint(2,5)
obj=[test(), 0, 1]
l = random.choices(obj, k=3)
# -> [4,2,0]
testが毎回実行されて(lに違う数字で入って)ほしい
どう書けばいいの?
__return random.randint(2,5)
obj=[test(), 0, 1]
l = random.choices(obj, k=3)
# -> [4,2,0]
testが毎回実行されて(lに違う数字で入って)ほしい
どう書けばいいの?
301デフォルトの名無しさん
2021/07/06(火) 16:45:42.95ID:Fj5fpx8O302デフォルトの名無しさん
2021/07/06(火) 16:46:46.00ID:8bcWgGBz def test():
__return random.randint(2,5)
def exectest():
__obj=[test(), 0, 1]
__l = random.choices(obj, k=3)
exectest()
__return random.randint(2,5)
def exectest():
__obj=[test(), 0, 1]
__l = random.choices(obj, k=3)
exectest()
303デフォルトの名無しさん
2021/07/06(火) 18:44:35.16ID:yuAoY/NP numpy.loadtxtでcsvファイルを読み込むんだが、csvファイルのデータが崩れていることがある。
で、何行目にエラーがあって取り込めなかったのかを知りたいんだが、いい方法ない?
データが崩れているというのは、例えば、
-1.234,123.45.789,
みたいに、ありえない数値表現が紛れているということなんだが
csvファイルが崩れないようにするのが本筋だけどそっちに頑張る気がないので
おかしな行を見つけたら手動でその行を削除して再度処理という感じで運用したい
で、何行目にエラーがあって取り込めなかったのかを知りたいんだが、いい方法ない?
データが崩れているというのは、例えば、
-1.234,123.45.789,
みたいに、ありえない数値表現が紛れているということなんだが
csvファイルが崩れないようにするのが本筋だけどそっちに頑張る気がないので
おかしな行を見つけたら手動でその行を削除して再度処理という感じで運用したい
304デフォルトの名無しさん
2021/07/06(火) 19:22:28.01ID:BTTPD25v typeでチェックすれば
305デフォルトの名無しさん
2021/07/06(火) 20:02:32.04ID:MGYt6+tS 通常はどういう数値が入るのか分からんとなんとも言えないな
306デフォルトの名無しさん
2021/07/06(火) 21:14:42.87ID:yuAoY/NP307デフォルトの名無しさん
2021/07/07(水) 00:12:50.55ID:eWdID8i0308デフォルトの名無しさん
2021/07/07(水) 00:17:53.03ID:bUHYGk47 例えば、Ruby では各列を、変換器・converter で変換して、
変換できたかどうか、型を確認するとか
require "csv"
input_str = <<"EOT"
-0.0,1.2.3
9..9,-0
EOT
csv = CSV.new( input_str )
csv.convert( :numeric ) # 数値型へ変換する
line_num = 0 # 行番号
csv.each do |row|
line_num += 1
p [ line_num, row[ 0 ].class, row[ 1 ].class ]
end
出力
[1, Float, String]
[2, String, Integer]
1.2.3, 9..9 が、変換に失敗して、文字列型のまま
変換できたかどうか、型を確認するとか
require "csv"
input_str = <<"EOT"
-0.0,1.2.3
9..9,-0
EOT
csv = CSV.new( input_str )
csv.convert( :numeric ) # 数値型へ変換する
line_num = 0 # 行番号
csv.each do |row|
line_num += 1
p [ line_num, row[ 0 ].class, row[ 1 ].class ]
end
出力
[1, Float, String]
[2, String, Integer]
1.2.3, 9..9 が、変換に失敗して、文字列型のまま
309デフォルトの名無しさん
2021/07/07(水) 00:41:11.10ID:DonMIAPH310デフォルトの名無しさん
2021/07/07(水) 00:49:15.09ID:85qcEXGX >>308
せめてnumpyを移植してから知った風な口を利け
せめてnumpyを移植してから知った風な口を利け
311デフォルトの名無しさん
2021/07/07(水) 14:46:15.07ID:JFEXb6g2 pep8に
単一の文字 'l' (小文字のエル)、'O' (大文字のオー)、'I'(大文字のアイ) を決して変数に使わないでください。
フォントによっては、これらの文字は数字の1や0と区別が付かない場合があります。
ってあるけど、上のような理屈であれば、単一の文字でなくても同じ理由で使うべきではないことになるんでは?
単一の文字 'l' (小文字のエル)、'O' (大文字のオー)、'I'(大文字のアイ) を決して変数に使わないでください。
フォントによっては、これらの文字は数字の1や0と区別が付かない場合があります。
ってあるけど、上のような理屈であれば、単一の文字でなくても同じ理由で使うべきではないことになるんでは?
312デフォルトの名無しさん
2021/07/07(水) 15:11:46.21ID:49748z4f 10ng と long と IONG を間違うかって話だな
313デフォルトの名無しさん
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でやるのかもわかりません
それ専用の標準ライブラリとかあるのかな
### 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でやるのかもわかりません
それ専用の標準ライブラリとかあるのかな
314デフォルトの名無しさん
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()))
標準出力は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()))
315デフォルトの名無しさん
2021/07/07(水) 18:46:33.05ID:2KJNjcti316デフォルトの名無しさん
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
何を見落としてるんでしょうか…?
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
何を見落としてるんでしょうか…?
317デフォルトの名無しさん
2021/07/08(木) 22:38:29.83ID:PyDOiOef 何をしたいかが全く分からないがとにかく
そのエラーは/bin/shが
cat <_io.StringIO object at 0x7f1360de01f0>
とかいう文字列を実行しようとして
>が出力のリダイレクトと解釈してその後にファイル名がないからエラーになってる
そのエラーは/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ファイルとして処理したいです。
ありがとうございます!
例で実現したいことは、
$ python3 test2.py
12,34,56
この結果が出るにはどうしたら良いかが知りたいです。
シェルから見て実体のあるファイル名でないとダメってことですね。それはそうか。
一度ファイルシステムに書き出せば良いのでしょうが、それ以外の手はないでしょうか。
なお、例では長くなるのでcatコマンドに書き換えましたが、実際にやりたいことは
「pythonの前段処理結果をcsvに書き込み、そのcsvをgnuplotで読み込んで作図(を毎秒繰り返し)」というプログラムです。
処理結果の数字は毎秒積み上がっていくのと、プログラム終了時には実体のcsvファイルに書き出したいのとで
プログラム上では、StringIOを使ったcsvファイルとして処理したいです。
319デフォルトの名無しさん
2021/07/09(金) 08:12:26.61ID:2AR12dC9 >>318
>「pythonの前段処理結果をcsvに書き込み、そのcsvをgnuplotで読み込んで作図(を毎秒繰り返し)」
だったら質問の意味が尚更分からん
上記の処理を1プログラムでやりたいなら
Pythonで前処理⇒直接前処理結果をグラフ作画⇒作画後に必要に合わせてデータをcsv出力
っていう流れの方が良くね?
書き込んでから読み込む必要性が全く分からん
>「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を動かしたいです。
前処理では複数行複数列の数字(時間と温度です)を積み上げていくので、
その前処理結果のgnuplotへの渡し方としてcsvが適当かな、と思ったためです。
それとも、そもそもpythonスクリプトとしては前処理のアウトプットだけでexitし、
gnuplotはOS側シェルで普通に動かして前処理結果を使えば?という意味だとすれば、
今回はpythonスクリプト内でgnuplotを動かしたいです。
321デフォルトの名無しさん
2021/07/09(金) 08:51:54.66ID:sj/mydTS データが来るたびにファイルに追記していく(writeのあとにflush)
gnuplotは別に起動して毎秒ファイルを読み直す
と分けるのがよさそうに見える
gnuplotは別に起動して毎秒ファイルを読み直す
と分けるのがよさそうに見える
322デフォルトの名無しさん
2021/07/09(金) 09:04:12.08ID:2AR12dC9 >>320
>その前処理結果のgnuplotへの渡し方としてcsvが適当かな、と思ったためです
gunplotのマニュアル確認したけど、それなら素直にCSVファイルとして書き出さないと無理じゃないか?
大学か会社の都合か分からんけど
Pythonで素直に一連の動作をさせるなら
matplotlibの方がよっぽど楽だけど、それだとダメなんだよな
>その前処理結果の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さえできれば…と思ってました。
何分素人なのでそもそもの考え方が間違ってるところもあるとは思いますが、
なぜそう思うに至ったか、という話でした。
拾ってきた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より難しそうだから見なかったことにしてました。
いい機会だから、もう一度調べてチャレンジしてみます。
やっぱ実体としてのcsvファイルがないとダメですかね…ありがとうございます。
matplotlibはグラフ描くがgnuplotより難しそうだから見なかったことにしてました。
いい機会だから、もう一度調べてチャレンジしてみます。
325デフォルトの名無しさん
2021/07/09(金) 09:20:09.59ID:2AR12dC9 >>323
すげえ面倒な方法で見える化やってるなwwwwww
慣れたらmatplotlibも描くの簡単だぞ、Pandasとかnumpyとの相性も良いし
ただ根本的な所で言えば、既存の見える化フローが結構ヤバイな
(グラフ画像をOLEDで映し出すっていうのが衝撃だわ)
抜本的に改善したいなら
Pythonでデータ処理⇒データベースに書き込み⇒データ系の見える化ツール
っていうのが理想形だな
TableauとかPower BIみたいなツール使うと見やすくなる(有償だけど)
無償ツールなら英語だけどGrafanaとかかな?
すげえ面倒な方法で見える化やってるな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は別件で使ったこともあって、後分析には良いですよね。
今回はラズパイローカルでグラフを物理画面に即描画したいんですよね。
趣味の焙煎釜の温度変化を熱電対で計測し、手元でリアルタイムにグラフ描画したい、
そして記録をcsvに残したい、というのが目的です。
今は単機能の熱電対プローブでやっていて、温度変化が全くわからないので。
そこでまずはアリエクで300円しないOLEDを買ってラズパイに繋いで
gnuplotのpngをSPI接続のoledに送り出し続けるという形にしました。
ほんとはpythonからoledのライブラリとか使って直接描画とかもできるのかもしれませんが、
matplotlibともどもフタをしてました…
これがうまくいったら、OLEDやめてラズパイケース一体液晶にしても良いかなとは思っています。
GrafanaやPowerBIは別件で使ったこともあって、後分析には良いですよね。
327デフォルトの名無しさん
2021/07/09(金) 09:47:38.88ID:2AR12dC9 >>326
>今回はラズパイローカルでグラフを物理画面に即描画したいんですよね。
あーなるほど、そういう使い方もあるのか……俺の知識不足だったすまん
ただ結局グラフのpng画像を生成出来れば問題なさそうだし、matplotlibの差し替えが無難な気はするな
>今回はラズパイローカルでグラフを物理画面に即描画したいんですよね。
あーなるほど、そういう使い方もあるのか……俺の知識不足だったすまん
ただ結局グラフのpng画像を生成出来れば問題なさそうだし、matplotlibの差し替えが無難な気はするな
328デフォルトの名無しさん
2021/07/09(金) 23:58:06.76ID:dI9qqvw1 int型の足し算ではintクラスの持っている__add__メソッドが暗黙的に呼び出されていると思います。
ですが、
1.__add__(2)
のようにすると1+2が実行されず構文エラーになります。これは何故でしょうか?
str型の場合は問題なく実行され、以下の場合"aabb"が返ってきます。
"aa".__add__("bb")
ですが、
1.__add__(2)
のようにすると1+2が実行されず構文エラーになります。これは何故でしょうか?
str型の場合は問題なく実行され、以下の場合"aabb"が返ってきます。
"aa".__add__("bb")
329デフォルトの名無しさん
2021/07/10(土) 00:16:00.86ID:8UKJFvZ/ 詳しくないが 1. が小数になるのが原因だろう
(1).__add__(2)
とか
1..__add__(2)
ならエラーにならない
(1).__add__(2)
とか
1..__add__(2)
ならエラーにならない
330デフォルトの名無しさん
2021/07/10(土) 00:16:24.03ID:Rm9mfcPV 1.x(float)か1のメソッドなのか決まらないから
1.1.__add__とかはメソッドなのが分かるから通る
1.1.__add__とかはメソッドなのが分かるから通る
331デフォルトの名無しさん
2021/07/10(土) 00:59:10.02ID:MSe133Oz332デフォルトの名無しさん
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を押すと進み、画像が更新されます。
そこが問題のポイントなのかなと思いますが、それ以上の手がかりがありません。
■現象
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を押すと進み、画像が更新されます。
そこが問題のポイントなのかなと思いますが、それ以上の手がかりがありません。
333デフォルトの名無しさん
2021/07/10(土) 10:43:05.45ID:lk+ovMEl >>332
再現できる最小限のコードを提示しましょう
再現できる最小限のコードを提示しましょう
334デフォルトの名無しさん
2021/07/10(土) 11:13:10.52ID:Ai3MLyk0 > get_img_data(conv_image)
この計算は一回でいいんじゃ
この計算は一回でいいんじゃ
335デフォルトの名無しさん
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)を入れてみたんですが、変化なしでした。
すみませんでした…
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)を入れてみたんですが、変化なしでした。
337デフォルトの名無しさん
2021/07/10(土) 16:36:24.47ID:c5RJ/qlV338デフォルトの名無しさん
2021/07/10(土) 18:01:51.33ID:lk+ovMEl window.read()してないのでtk.update()が呼ばれず画面が更新されない
window.TKroot.update()を呼べば画面が更新されるが
直接呼ばずにwindow.read()を使ってメッセージループを作るほうがいい
デバッグセッション時はそれだと使いにくいから何か対処されてるっぽい
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])
?
おのれはユニークだけどsrcと重複しうるリスト reqがある
reqの要素がひとつでもsrcにあれば云々したい
速いのを探しています。外部ライブラリは使えない
test = set(req)
bool([i for i in req if i in test])
?
341デフォルトの名無しさん
2021/07/11(日) 09:23:01.16ID:FD6lxZ3g any()かfor-loopのearly breakを使う
srcは長くて固定的、reqは短くて毎回変わるなら
srcのほうをsetにして管理したほうがいい
srcは長くて固定的、reqは短くて毎回変わるなら
srcのほうをsetにして管理したほうがいい
342デフォルトの名無しさん
2021/07/11(日) 10:48:10.63ID:k6naGpL9 いや冷静に考えたら
フツーにset(src)&set(req)か
フツーにset(src)&set(req)か
343デフォルトの名無しさん
2021/07/11(日) 10:50:02.39ID:BLRKNf/m 共通要素を全て調べ上げる必要が無いなら>>341の方が速いな
344デフォルトの名無しさん
2021/07/11(日) 11:14:07.88ID:k3ZSGeVZ345デフォルトの名無しさん
2021/07/11(日) 12:26:28.31ID:k6naGpL9346デフォルトの名無しさん
2021/07/11(日) 12:57:32.61ID:xAgoNPlJ >>258
分かりやすい
分かりやすい
347デフォルトの名無しさん
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つに増やせ
リストや文字列に対する*は数学の掛け算とは無関係
要素数を増やせという機能
> [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つに増やせ
348デフォルトの名無しさん
2021/07/11(日) 20:54:53.44ID:yIl0mON7 どうした急に
349デフォルトの名無しさん
2021/07/11(日) 21:15:21.80ID:BeeJLMuH 発作よ
お薬を忘れたみたいね
お薬を忘れたみたいね
350デフォルトの名無しさん
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)
同じならどちらで書いた方がいいとかありますか?
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 というキーワードが用意されているのだから使わない理由ないだろ
クラス名を変更した際の影響範囲を考えてみよう
クラス名を変更した際の影響範囲を考えてみよう
352デフォルトの名無しさん
2021/07/12(月) 11:10:07.04ID:4WArcuIG >>350
その例だと同じだけど複数から継承するようなクラスを使う場合は
super()が返すものが普通に想像するものとは違ってくるケースもあるので注意が必要
https://fuhm.net/super-harmful/
その例だと同じだけど複数から継承するようなクラスを使う場合は
super()が返すものが普通に想像するものとは違ってくるケースもあるので注意が必要
https://fuhm.net/super-harmful/
353デフォルトの名無しさん
2021/07/12(月) 19:50:10.58ID:QV5M7VnV >>347
数学と無関係ではないよ、加群としてとらえても矛盾のない演算になってるでしょ
数学と無関係ではないよ、加群としてとらえても矛盾のない演算になってるでしょ
354デフォルトの名無しさん
2021/07/12(月) 20:27:18.44ID:HIUYKm1A それは*3が同じものを3つ足し合わせなさいという
常識的な意味合いをわかりやすさのために利用してるだけで
数学的なことなら割り算もあるでしょ
常識的な意味合いをわかりやすさのために利用してるだけで
数学的なことなら割り算もあるでしょ
355デフォルトの名無しさん
2021/07/12(月) 21:40:52.58ID:4WArcuIG 常識的な意味合いかぁ・・・
演算子オーバーロードの悪い見本にしか見えない
演算子オーバーロードの悪い見本にしか見えない
356デフォルトの名無しさん
2021/07/13(火) 01:00:18.86ID:o9TqNFAF357デフォルトの名無しさん
2021/07/13(火) 05:15:40.15ID:eWSxSU0S 数学っぽくやるなら
[3]*3->[9]
[1, 2]*3->[3, 6]
のほうがより直感的だった気はする
[3]*3->[9]
[1, 2]*3->[3, 6]
のほうがより直感的だった気はする
358デフォルトの名無しさん
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
htmlを見ると、スレタイトル部分はjava scriptを呼び出して(?)表示しているようです。
このような別から呼び出す仕組みの検索語だけでも知りたいです。
実行環境はWindows10のcolabです。
何卒よろしくお願いします。
以下がソースとhtml抜粋です。
https://pastebin.com/dq4FFsM3
361デフォルトの名無しさん
2021/07/13(火) 11:52:22.48ID:eWSxSU0S 相互参照は常に避けるよう心がけるべき。
回避する方法はいろいろあるけど、
イベント抽選関数はイベントの関数に引数として渡してあげるとか、
イベントの関数はすべて同じ引数、戻り値にしておいて、イベント抽選システムへ予め登録しておく方式にするとか
回避する方法はいろいろあるけど、
イベント抽選関数はイベントの関数に引数として渡してあげるとか、
イベントの関数はすべて同じ引数、戻り値にしておいて、イベント抽選システムへ予め登録しておく方式にするとか
362デフォルトの名無しさん
2021/07/13(火) 11:55:28.21ID:I5G4+d/9 知らんけどmain関数のなかにwhile True: 抽選関数()
みたいにしてループさせて抽選されたイベント自体は抽選関数を呼ばなければいいだけじゃないの
みたいにしてループさせて抽選されたイベント自体は抽選関数を呼ばなければいいだけじゃないの
363デフォルトの名無しさん
2021/07/13(火) 11:59:46.95ID:0QNuXsy/ ttps://mevius.5ch.net/tech/subject.txt
> スレタイトル一覧を取得したい
> このような別から呼び出す仕組みの検索語だけでも知りたい
どっち?
スレタイ取得ならsubject.txt読ませればいいじゃん
わざわざしかもitestのhtmlをスクレイピングする理由あるの?
> スレタイトル一覧を取得したい
> このような別から呼び出す仕組みの検索語だけでも知りたい
どっち?
スレタイ取得ならsubject.txt読ませればいいじゃん
わざわざしかもitestのhtmlをスクレイピングする理由あるの?
364デフォルトの名無しさん
2021/07/13(火) 12:22:40.44ID:WUJYnH4r365デフォルトの名無しさん
2021/07/13(火) 12:24:59.10ID:WUJYnH4r >>359
前方参照でぐぐれ
前方参照でぐぐれ
366デフォルトの名無しさん
2021/07/13(火) 12:26:33.03ID:WUJYnH4r >>360
5chはスクレイピング禁止
5chはスクレイピング禁止
367デフォルトの名無しさん
2021/07/13(火) 12:31:27.78ID:QsXB5/qu >>359
イベントの関数定義と、抽選・実行をする処理とはファイルを分けて
前者を後者のファイルでimportして使う
1ファイルでできなくもないけど
モジュール分割を早めに覚えておいたほうが散らかりにくい
イベントの関数定義と、抽選・実行をする処理とはファイルを分けて
前者を後者のファイルでimportして使う
1ファイルでできなくもないけど
モジュール分割を早めに覚えておいたほうが散らかりにくい
368デフォルトの名無しさん
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 を実行
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
みたいに、要素が存在しない場合に、何秒待つか指定する
その後、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関数を作ってプログラムを全部括れば動くということが判明しました。
以上ご報告と御礼申し上げます。
私があまりに初心者過ぎて、せっかくの具体的なご回答をほぼ理解できませんでしたが、
この状態を相互参照と呼ぶことが分かってようやくググることができ、
>>362さんのレスから着想を得て、main関数を作ってプログラムを全部括れば動くということが判明しました。
以上ご報告と御礼申し上げます。
371360
2021/07/13(火) 17:54:03.79ID:28i3hfQd372デフォルトの名無しさん
2021/07/13(火) 18:33:25.76ID:KwvhlQcy373デフォルトの名無しさん
2021/07/13(火) 20:54:54.99ID:4WrY8hy5 何このruby基地外の自作自演
きっしょ
きっしょ
374デフォルトの名無しさん
2021/07/15(木) 02:12:23.66ID:0WF/Cs9d スクレイピングでrequestsで上手く取得できないサイトはSeleniumで取得するようにしてるんだけどこれにThreadPoolExecutorを使用するとしたらどういう書き方すればいいの
今までは複数のサイトのURLが入ったリストをfor文で回しつつif文でドメインが一致するかどうかでrequestsとSeleniumを使い分けていたけど非同期にするとなるとさっぱりわからん
今までは複数のサイトのURLが入ったリストをfor文で回しつつif文でドメインが一致するかどうかでrequestsとSeleniumを使い分けていたけど非同期にするとなるとさっぱりわからん
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】 山上徹也被告が謝罪 「何の恨みもありません。非常に申し訳ないことをした」 ★2 [お断り★]
- 『M-1』決勝進出9組発表 エバース、ヤーレンズ、ヨネダ2000、ママタルト、真空ジェシカら進出 [muffin★]
- 芸人・永野が断言 令和が「1」なら昭和は「100楽しかった」「夢いっぱいだった」★3 [muffin★]
- 橋下徹、「安全地帯にいる政治家たちの行動で民間が犠牲になる…まっぴらゴメン」 麻生太郎氏の高市首相の発言支持に言及 [jinjin★]
- 自宅で1万円札をカラーコピー、「パパ活」支払いで使った52歳男に有罪判決…「偽札と言いにくい人にだけに渡し悪質」 [蚤の市★]
- 【野球】日本ハム・清宮幸太郎 プロ9年目で1億円プレイヤーに! 打率・272、12本塁打、65打点 [冬月記者★]
- わいアスカシンジ、シンエヴァで無事成仏
- 【悲報】日本維新の女議員、旦那にサンドイッチ作るからパン買ってこいと命令し、6枚切りを買ってきたため発狂wwwwwwwwwwwwwwwwwww [802034645]
- 寒すぎるからなけなしの金はたいて灯油5lだけ原付で買ってきた。来月の給料日までどうすりゃいいんだちくしょう [793117252]
- シャドバ一生分からん
- ネトウヨ「平和主義が日本をダメにした。平和を説く者は常に奪われ、侵略され、蹂躙される。外交圧力に対し武力で反撃する国になるべき」 [314039747]
- 生で見て興奮したもの←思い浮かべ
