21/06/29 06:09:40.51 tBEGF5OC.net
>>186
今また変わってるけど、July 06, 2011時点だとこんな感じ
URLリンク(blog.livedoor.jp)
192:デフォルトの名無しさん
21/06/29 06:42:38.70 3+LFbHws.net
>>191
パズルとしてならいいけど実務でやってるなら単なるバカ
193:デフォルトの名無しさん
21/06/29 07:15:42.92 tBEGF5OC.net
「正しく正規表現で表そうとするとわけがわからんくなる」が伝わらんかったみたいだったからサンプル出したけど、まぁこのレベルの精度が必要なら正規表現じゃやらんわなw
194:デフォルトの名無しさん
21/06/29 07:41:10.41 MxyOwUyS.net
>>191
厳密に言えば「総務省公表のデータにマッチする正規表現」か。
そこに含まれていない範囲だって未割当の電話番号に違いないでしょ。
195:デフォルトの名無しさん
21/06/29 07:46:39.05 kJlgCPwb.net
電話番号と同じパターンの別の番号が出てきたらどうすんだろ
気づかず置換して事故るんかな
196:デフォルトの名無しさん
21/06/29 07:47:50.85 3NHpnvwy.net
正規表現でウダウダ言う奴ってこういうアスペ的なバカばっか
197:デフォルトの名無しさん
21/06/29 08:29:49.41 tBEGF5OC.net
>>194
ゆるいバリデーションなら、総務省のやつだろうね
アレは楽
リンクのやつは多分各事業者の情報も加味してある
このレベルで実装するなら、メンテが必要なんで、継続的な更新のあるライブラリが必須だね
個人的にはやりたくないw
他言語の資料だけど、これが面白かった
URLリンク(speakerdeck.com)
198:デフォルトの名無しさん
21/06/29 08:30:57.71 tBEGF5OC.net
ごめん
リンク間違ったw
URLリンク(speakerdeck.com)
199:デフォルトの名無しさん
21/06/29 08:55:46.98 1h4nclxf.net
今日は中卒の俺が単回帰分析覚えたぞ?
バカにしたやつ震えるがいいw
200:デフォルトの名無しさん
21/06/29 09:05:44.12 tBEGF5OC.net
>>199
お前がどんなに頑張って俺に追いつこうとしても、俺のいた場所にお前がついたときには俺はお前の少し前に進んでる
永遠に追いつけないんだ!
byゼノン
201:デフォルトの名無しさん
21/06/29 12:30:53.94 S91QebJL.net
>>200
あいたたw
202:デフォルトの名無しさん
21/06/29 17:50:23.25 SOQ8GKtA.net
>>200
こういう引用する方が中卒、いや中坊っぽい
203:デフォルトの名無しさん
21/06/29 19:22:41.33 vRfx68y2.net
なんかたまに名言でドヤって来るやついるけどダサいよな
内容より誰が言うかやからな
あとゲームとか漫画の引用は中学生までや
204:デフォルトの名無しさん
21/06/29 19:36:36.48 1h4nclxf.net
やれやれだぜ
205:デフォルトの名無しさん
21/06/29 20:19:27.59 eB1TyNRb.net
まんがじゃないよ…
206:デフォルトの名無しさん
21/06/29 21:30:03.66 MxyOwUyS.net
そういわれると「ゼノンのパラドックス」ってすごい厨二ネーミングに見えてきた。。。
207:デフォルトの名無しさん
21/06/29 21:44:38.04 1h4nclxf.net
いやダイクストラのアルゴリズムのが厨二っぽい
208:デフォルトの名無しさん
21/06/29 21:54:10.56 MxyOwUyS.net
どっちが上とか言い出したら「フェルマーの最終定理」
209:デフォルトの名無しさん
21/06/29 23:42:32.20 hw58oJ3l.net
次元の呪い
210:デフォルトの名無しさん
21/06/30 00:19:49.96 lUxCO1IZ.net
これは何歳までだとか自分がどう見られるかに拘ってる内はまだまだガキ
211:デフォルトの名無しさん
21/06/30 04:50:10.49 dkF+z6Xg.net
飛んでる矢を止めてるのは俺かDioか、それが問題だ
byゼノン
>>204
中卒、おもろいなw
212:デフォルトの名無しさん
21/06/30 07:48:27.13 D9KqFPaB.net
httpサーバー立てるときに
@route('/')
def index():
_pass
@route('hoge')
def hoge():
_ pass
という風に分けるのですが
index()ではimport sample1を
hoge()ではimport sample2をしたいとき、
一番上(defの外)にまとめてimport sample1,sample2とするのかそれとも
index(),hoge()の中それぞれでimportした方がいいのか
何か慣習はあるのでしょうか?
213:デフォルトの名無しさん
21/06/30 08:54:34.29 fR3i2rdt.net
httpサーバーであるという情報とかデコレーターが付いてるのとかが質問にどう関わるのかよく分からんが、sample1モジュールはindex関数だけから、sample2モジュールはhoge関数だけから使われるケースで何処でimportするか、ということなら、俺の場合
index()やhoge()が__name__ == '__main__'が真であるときにのみ呼ばれるならindexやhogeの中で、そうでないならソースの先頭でimportしてる
つまり、そのソースが単体で実行されるときにしか使わないモジュールは、モジュールとして他のコードにimportされるときにはimportしたくない、という貧乏根性
214:デフォルトの名無しさん
21/06/30 09:39:57.08 QIg09vqW.net
>>212
特別な理由がない限りは全て先頭でimportしたほうがいい
importは重い処理だしエラーを発生させやすいので、なるべく起動時に済ませてしまった方がアプリの挙動が安定する
毎回実行される訳ではないが、初回実行のタイミングの問題だ
Webアプリで特定のアクションが呼ばれたときにエラーで落ちるとか初回実行時だけやたら遅いとかデバッグするの嫌でしょ
逆に、必要になったときに初めて読み込むことで起動時間やメモリ消費を抑えるテクニックもあるが、役に立つのは分散処理フレームワークなど極めて特殊なケースだ
215:デフォルトの名無しさん
21/06/30 10:47:08.67 x9tVpfG6.net
そもそもめったに使わない(まったく使わない)機能のために
依存関係増やしたくないしな
216:デフォルトの名無しさん
21/06/30 21:12:10.78 iVkkZXbL.net
Ruby のrequire は、同じファイルを1回しか読み込まないので、簡単
217:デフォルトの名無しさん
21/06/30 22:30:32.84 EN4MKAxN.net
Rubywww
218:デフォルトの名無しさん
21/06/30 22:57:27.70 C441gc0U.net
RubyとMindはオワコン。
219:デフォルトの名無しさん
21/06/30 23:06:38.74 N62KG6DK.net
利用率ではもはやPerlとどっこいなRuby
220:デフォルトの名無しさん
21/07/01 09:12:46.98 47t/afFm.net
string = '<001>_<9>'
size = 3
から
strings = ['001_9', '002_10', '003_11']
文字列中のタグ部分を任意の長さだけカウントアップした配列が欲しい
def multiple_counting(size, string):
_pat = re.compile(r'<(\d+)>')
_tags = pat.findall(string)
#カウント作成
_counters = []
_for tag in tags:
__counters.append([str(int(tag)+1).zfill(len(tag)) for i in range(size)])
#書き換え
_strings = [string]*size
_for counter in counters:
__strings = [pat.sub(count, string, 1) for count, string in zip(counter,strings)]
_return strings
なんか便利な関数とか、もっとシュッとしたやり方とかあると思うんですが
知らないので教えてください.あと再帰関数使いたかったけど挫折しました
221:デフォルトの名無しさん
21/07/01 09:53:11.45 n7sulsnm.net
置換マップみたいなのなかったっけ
222:
21/07/01 10:36:03.88 Ipwd3DUh.net
>>220
[re.sub(r'<([0-9]+)>', lambda m: f'{{:0{len(m[1])}}}'.format(int(m[1]) + i), string) for i in range(size)]
223:デフォルトの名無しさん
21/07/01 18:34:44.42 47t/afFm.net
>>222
ありがとうございます
224:デフォルトの名無しさん
21/07/01 19:00:33.74 s31eTWYH.net
今日は重回帰分析勉強したわ
スカラーベクトル行列転置をやったけど逆行列って言うのがよくわからねえわ
そろそろ中卒の俺の頭もセグメンテーションエラーだわ
じゃあの
225:デフォルトの名無しさん
21/07/01 19:55:12.97 m9mL4lnU.net
>>224
誰もお前に興味ないから無駄な報告は要らんぞ
226:デフォルトの名無しさん
21/07/02 08:18:08.33 tPTf4bIR.net
>>225
お前俺に興味津々だな
また来るわじゃあの
227:デフォルトの名無しさん
21/07/02 08:46:35.95 9LnHCrkz.net
>>224
さきに高校数学と線形代数やれ
228:デフォルトの名無しさん
21/07/02 13:03:57.17 cZhhmJXr.net
>>227
もちろんやったわ
スカラーベクトル行列は理解したわ
229:デフォルトの名無しさん
21/07/02 13:17:37.81 9LnHCrkz.net
それで逆行列が分からんのに何を理解したというねん
230:デフォルトの名無しさん
21/07/02 13:26:09.60 m4gnkicM.net
はい出ましたw
きちんと理解してないから分からないとかいう奴www
231:デフォルトの名無しさん
21/07/02 13:32:26.18 ILBLMl6W.net
やつ
232:デフォルトの名無しさん
21/07/02 17:57:31.72 Xm/bZCrF.net
value: int みたいに型指定したほうがいいの?
233:デフォルトの名無しさん
21/07/02 21:23:10.28 SG4SXaSP.net
Python処理系は今のところdataclassのフィールド生成くらいにしかタイプヒントを利用しない
それ以外のタイプヒントは完全にタイプチェッカー向けで、タイプチェッカーを利用しないならつける意味はない
234:デフォルトの名無しさん
21/07/02 21:53:09.57 QH8xfbBh.net
逆行列のどこが分からないのかな
AB=I
Iは単位行列
のときBはAの逆行列
235:デフォルトの名無しさん
21/07/02 22:17:24.51 E59Amcuv.net
逆元が分からんのだろ
行列やってる段階の奴が群知ってるとは思えないが
236:デフォルトの名無しさん
21/07/03 09:39:19.49 UqPPpbRy.net
>>234
いや単位行列は斜めに1があるやつで
逆行列は普通の行列に逆行列をかけると単位行列になるって言うのはわかるんだよ
ただその後これはスカラーですだのこれはベクトルですだの出てきて記号いっぱいになると途端に訳が分からなくなるのだよ分かる?
行列積があーだのこーだの
237:デフォルトの名無しさん
21/07/03 09:40:33.15 UqPPpbRy.net
>>235
偉そうなやつだなあ
友達いないだろお前?
238:デフォルトの名無しさん
21/07/03 11:01:50.13 gq7PWL9B.net
>>236
馬鹿には無理
239:デフォルトの名無しさん
21/07/03 11:06:01.41 MyiFvpsW.net
おっさんは行列を高校でやってるからなあ
240:デフォルトの名無しさん
21/07/03 11:53:08.74 ENhcG6bL.net
内積、外積
241:デフォルトの名無しさん
21/07/03 12:45:29.69 WO4lFPcp.net
>>236
>分かる?
とか言われてもその気持ちは分からんなぁ
普通に行列やって普通に単位取れたってことは特に苦労しなかったんだから、
ワケが分からなくなることがなかった
記号が一杯でも初見で大丈夫だったからお前の気持ちは一切分からん
242:デフォルトの名無しさん
21/07/03 14:35:42.16 ZeViGhZj.net
関流に弟子入りするべき
243:デフォルトの名無しさん
21/07/03 16:40:21.53 mObkgdSa.net
>>236
とりあえずは普通の掛け算だと思って
(可換則は成り立たないけど)
大丈夫なんだが
244:デフォルトの名無しさん
21/07/03 17:33:35.17 KyOEtNLT.net
pythonってプログラミング言語の中では簡単な方って本当ですか?
最近勉強してるんですが難し過ぎるんですが
245:デフォルトの名無しさん
21/07/03 17:57:04.61 2G/hXmzA.net
[[1,2,3], [1,2,3], [1,2,3]]
がほしいとき
[[1,2,3]*3]じゃなくて[[1,2,3]]*3だけど
感覚的には前者なので違和感が強いです
なんかいい感じに納得させてもらえませんか
246:デフォルトの名無しさん
21/07/03 18:07:23.78 bc4tv4Cc.net
>>244
言語としては簡単な方だよ
ただ言語の難しさとプログラミングの難しさって別だからね
言語の選択ってのは迷路の広い入り口を選ぶか狭い入り口を選ぶかであって、迷路を進み始めると後は同じなんだよ
247:デフォルトの名無しさん
21/07/03 18:15:50.79 WO4lFPcp.net
かんたん言ってる奴は先に別の言語をやってた可能性が高い
それに比べるとかんたんと言ってる
248:デフォルトの名無しさん
21/07/03 19:42:13.76 KyOEtNLT.net
>>246
なるほど
一つの言語を極めると他の言語を覚えるのは簡単と言うのが分かった気がします
pythonを極められるように頑張ります
249:デフォルトの名無しさん
21/07/03 20:08:02.32 IMGL3rxE.net
>>245
'aho'*3は
'ahoahoaho'になる
''や[]は*3に文字列やリストを渡す
役目があって*3の前に役目を終えている
250:デフォルトの名無しさん
21/07/03 21:33:02.67 I7Zt9Z8V.net
合成関数のとことかシグモイド関数の微分とかお前らモヤらんのか?
中卒野俺にはわからんがめっちゃ頭いいな
251:デフォルトの名無しさん
21/07/03 23:09:47.68 91vjT9iB.net
頑張って一般化逆行列を理解しよう
252:デフォルトの名無しさん
21/07/03 23:27:47.89 avhnjRXY.net
YouTube で有名な、雑食系エンジニア・KENTA のサロンでは、
初心者は、Ruby on Rails から始める
Python, PHP も勧めていない
バックエンドは、Ruby → Go という路線
253:デフォルトの名無しさん
21/07/04 00:07:57.92 DDnLb3K7.net
ケンタはあわしろ氏の一番弟子。
実力は折り紙付き。
254:デフォルトの名無しさん
21/07/04 03:15:46.12 kVVHiiiU.net
TIOBEのTOP10から転落した落ち目言語はポイーで
255:デフォルトの名無しさん
21/07/04 08:47:31.64 5abFjuPT.net
範囲内、重複なしのreq_indexでdb(リスト)からデータ取得する
selection = [db[idx] for idx in req]
こういうのの逆で、渡されたreqに含まれてないidxデータ取得するとき、一番スマートなのはどういう書き方?
256:デフォルトの名無しさん
21/07/04 08:50:25.61 5abFjuPT.net
db[あ,い,う,え]
req[0,2]
get[い,え]
ていう場合
257:デフォルトの名無しさん
21/07/04 10:13:27.09 hbHHSLi0.net
>>255
[[i, v] for i, v in enumrate(db) if i not in req]
おわり
258:デフォルトの名無しさん
21/07/04 10:17:54.09 pili1Lz/.net
>>245
[3*3] -> [9]
[3]*3 -> [3, 3, 3]
[[3*3]] -> [[9]]
[[3]*3] -> [[3, 3, 3]]
[[3]]*3 -> [[3], [3], [3]]
259:デフォルトの名無しさん
21/07/04 10:19:32.88 pili1Lz/.net
>>248
>一つの言語を極めると他の言語を覚えるのは簡単と言う
誰が言ったの?
260:デフォルトの名無しさん
21/07/04 12:15:28.10 1R4z78Cs.net
ってみんな言ってます!
261:デフォルトの名無しさん
21/07/04 14:20:14.26 BYgnURbL.net
わしもそう思う
262:デフォルトの名無しさん
21/07/04 15:29:30.76 uQBb7zfv.net
いやプログラムの根底は演算と型と制御だろ
そりゃベースが出来てれば大体何でも出来るわ
263:デフォルトの名無しさん
21/07/04 15:59:44.10 SaImNcMt.net
あとライブラリの探し方と使い方かな
264:デフォルトの名無しさん
21/07/04 16:34:17.72 i/yFAdE3.net
>>255
db=[10,20,30,40]
req=[0,2]
a=list(set(db)-{db[i] for i in req})
265:デフォルトの名無しさん
21/07/04 17:11:19.65 Thc8jF3i.net
プログラムの根底とプログラミングの根底は全く別物
その程度の区別が出来ないようなら大体何も出来ない
266:デフォルトの名無しさん
21/07/04 18:27:39.63 CJXzLbyo.net
proxyを通して接続するときに、そのproxyが生きているかどうかだけ確認したいのですが
実際に存在する適当なサイトに接続してステータスコード200を確認すればよいのでしょうか?
今は、
プロキシ経由OKの(なるべくレスポンスの速い)サイトでrequests.getして200返ってきたらproxy生存
みたいにしてるのですが
それ専用のチェックの仕方があるのかな、と気になりました
267:デフォルトの名無しさん
21/07/04 19:06:12.27 KdurfuN3.net
>>265
確かに1行目と2行目の文章が繋がってないお前が言うと説得力あるなあ
268:デフォルトの名無しさん
21/07/04 20:09:32.45 L4Prcy4Z.net
>>255
[db[i] for i in {i for i in range(len(db))}-set(req)]
269:デフォルトの名無しさん
21/07/04 21:43:55.75 aHJdtdht.net
>一つの言語を極めると、他の言語を覚えるのは簡単
これ自体が嘘。
10年以上掛かるし、各言語の特殊性を学んでも、再利用できないから無駄
YouTube で有名な、雑食系エンジニア・KENTA は全く逆の事を言ってる
80 : 20 の法則。
簡単な80% の部分だけを学ぶべき
難しい20%の部分は、特殊だから再利用できない・使う頻度が少ない割に、
学ぶ時間が何倍も掛かるので、効率が悪い
専門学校で必ず言われること
例えば、法律の条文の暗記とか、
15題ずつ、重要度A・B・Cのランクがあったら、
AB だけ暗記して、C を捨てろとか
使う・出る確率が低いから、そこに暗記コストを掛けるのが無駄
ドラゴン桜で言う、京大英語・赤本で英語を学ぶなという格言。
特殊で、誰も使わないようなトリビア表現に、時間を掛けるな
数百人のネイティブがチェックしてる、英検をやれ
270:デフォルトの名無しさん
21/07/04 21:52:26.25 1R4z78Cs.net
>>269
その20:80割合逆だろ
簡単以前なことも学べてないじゃないか
271:デフォルトの名無しさん
21/07/04 22:03:17.62 9C8iWrP9.net
推奨NGWord
Ruby
あわしろ氏
雑食系エンジニア
272:デフォルトの名無しさん
21/07/04 22:19:49.10 YfSOCxWP.net
そうして簡単な単純労働しかできない人が量産されるんですね
273:デフォルトの名無しさん
21/07/04 22:21:45.55 1R4z78Cs.net
簡単な部分の精度を上げろってこった
274:デフォルトの名無しさん
21/07/04 22:35:43.14 ZDZVmq0W.net
難しい2割を理解できる人が世の中をまわす
275:デフォルトの名無しさん
21/07/04 22:38:11.14 1R4z78Cs.net
むつかしいほうは8割だっつっとろうが
276:デフォルトの名無しさん
21/07/04 22:39:45.78 SVViFRUT.net
>>270
横からだが逆じゃないと思うよ
もちろん全体の100をどう捉えるか次第だけど
277:269
21/07/04 22:40:16.40 aHJdtdht.net
簡単な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をやるからだって
つまり、ほぼ無意味なことを長時間やるから、しょーもない
278:デフォルトの名無しさん
21/07/04 22:41:49.47 ZDZVmq0W.net
重要なのは2割って話は知ってるけど
簡単なのは2割って知らんな
279:デフォルトの名無しさん
21/07/04 22:48:09.20 1R4z78Cs.net
統失煽りで文化人を一人殺したので
名前が同じだけでもてはやされてたKENTAは用済み
280:デフォルトの名無しさん
21/07/04 23:01:11.65 PTs94Rmb.net
Rubyって時点でお察し
281:デフォルトの名無しさん
21/07/05 00:27:11.73 SA0zdM26.net
> だから、1年の未経験者が、10年以上のプロよりも技術力が上になる!
プロ舐めすぎやろ
自分のレベルすら正確に把握出来てないだけじゃん
282:デフォルトの名無しさん
21/07/05 01:30:50.54 cyuSl6kj.net
>>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がリストになっちゃうのは使いにくいでしょ
283:デフォルトの名無しさん
21/07/05 01:54:24.43 ts/O0CHN.net
>>281
ダニングクルーガー効果ってのがあってぇ…
284:デフォルトの名無しさん
21/07/05 08:07:41.22 308oM4PQ.net
>>255
db=[10,20,30,40]
req=[0,2]
a=len(db)
for i in req: db.pop(i-a)
285:デフォルトの名無しさん
21/07/05 11:09:29.47 c503ASju.net
>>281
URLリンク(bokurema.com)
286:デフォルトの名無しさん
21/07/05 11:52:44.70 DJ8mSFAE.net
Railsはすべて分かっている人にとっては楽
初心者は設定や、細かいチューニングで必ずつまずく
287:デフォルトの名無しさん
21/07/05 14:49:22.59 WfBg4Dd7.net
pandasで特定の列(横)の重複した値を削除して一つだけにするのってどうするの
例えばA,B,C,B,C,DってあったらA,B,C,,,Dにしたい(BやCのみでも可)
288:デフォルトの名無しさん
21/07/05 14:56:34.11 zfQ+6anv.net
kwsk
289:デフォルトの名無しさん
21/07/05 17:20:56.75 rH8GS2yx.net
>>287
あえてPandas使ってとなるとむずいな
290:デフォルトの名無しさん
21/07/05 18:56:50.40 +tp9LwEv.net
BやCのみでも可なら
df.replace('B','').replace('C','')
それとは別にdf.duplicatedで空白にしたいインデックスがTrueになる
データフレームが得られる
データフレームにSQLほどの機能はないようだ
291:デフォルトの名無しさん
21/07/05 20:17:35.08 41zUyXOD.net
dfの横はlist的に扱えるから一次元リストの重複要素を任意の値に置き換えるという操作をするだけでは?
292:デフォルトの名無しさん
21/07/05 21:27:56.39 WfBg4Dd7.net
サンクス!
293:デフォルトの名無しさん
21/07/06 00:10:38.82 c1bms/+C.net
みんなのPythonで勉強しているのですがP340のwith文の説明がよくわかりません
私の理解では、with文でopen()した場合は、ファイルを最後まで読み切ったら自動的にclose()する処理になると思っています
この参考書には、openするファイルが存在しなかったらファイルを開かないで処理を終了する、ということが書いてあるのですが間違っていないでしょうか
openするファイルが存在しないと普通にエラーになるのですが
294:デフォルトの名無しさん
21/07/06 00:38:25.59 wcT5LwJn.net
modeによるとしか
readならその通り。writeはファイルが存在しなければ作成される。
295:デフォルトの名無しさん
21/07/06 00:48:09.74 IX8Wt/RA.net
modeの話?
296:デフォルトの名無しさん
21/07/06 00:52:21.13 AJxevGXU.net
Ruby では、存在しないファイルを読もうとしたら、エラーになる。No such file
print File.read 'abc.txt'
出力
No such file or directory @ rb_sysopen - abc.txt (Errno::ENOENT)
297:デフォルトの名無しさん
21/07/06 01:06:54.99 c1bms/+C.net
参考書の例文はモード指定しない既定なのでreadです
with文のreadモードで開いたファイルをfor文で一行ずつprintしています
説明によると、ファイルが存在していたら処理を行うという意味のコードになるとのことです
298:デフォルトの名無しさん
21/07/06 01:21:35.74 n3HBlCzk.net
おじちゃんせっかくマニュアルあるのに読まない子の気持ちはわからないよ
URLリンク(docs.python.org)
299:デフォルトの名無しさん
21/07/06 01:33:10.58 M25Qh6q2.net
>>293
>私の理解では、with文でopen()した場合は、ファイルを最後まで読み切ったら自動的にclose()する処理になると思っています
違うよ
>この参考書には、openするファイルが存在しなかったらファイルを開かないで処理を終了する、ということが書いてあるのですが間違っていないでしょうか
サンプルコードではFileNotFoundErrorをハンドリングしてるね
URLリンク(colab.research.google.com)
300:デフォルトの名無しさん
21/07/06 16:37:29.04 ewE8N/dz.net
def test():
__return random.randint(2,5)
obj=[test(), 0, 1]
l = random.choices(obj, k=3)
# -> [4,2,0]
testが毎回実行されて(lに違う数字で入って)ほしい
どう書けばいいの?
301:デフォルトの名無しさん
21/07/06 16:45:42.95 Fj5fpx8O.net
>>293
withブロックを出るときにclose
open関数の中で
ファイル確認して
ファイルを開く
ファイル確認でエラー
開いてない
ないのに開けない
302:デフォルトの名無しさん
21/07/06 16:46:46.00 8bcWgGBz.net
def test():
__return random.randint(2,5)
def exectest():
__obj=[test(), 0, 1]
__l = random.choices(obj, k=3)
exectest()
303:デフォルトの名無しさん
21/07/06 18:44:35.16 yuAoY/NP.net
numpy.loadtxtでcsvファイルを読み込むんだが、csvファイルのデータが崩れていることがある。
で、何行目にエラーがあって取り込めなかったのかを知りたいんだが、いい方法ない?
データが崩れているというのは、例えば、
-1.234,123.45.789,
みたいに、ありえない数値表現が紛れているということなんだが
csvファイルが崩れないようにするのが本筋だけどそっちに頑張る気がないので
おかしな行を見つけたら手動でその行を削除して再度処理という感じで運用したい
304:デフォルトの名無しさん
21/07/06 19:22:28.01 BTTPD25v.net
typeでチェックすれば
305:デフォルトの名無しさん
21/07/06 20:02:32.04 MGYt6+tS.net
通常はどういう数値が入るのか分からんとなんとも言えないな
306:デフォルトの名無しさん
21/07/06 21:14:42.87 yuAoY/NP.net
>>304
詳しく
>>305
通常は小数点付きの数値でマイナスの場合もある
307:デフォルトの名無しさん
21/07/07 00:12:50.55 eWdID8i0.net
>>303
1pandasで文字列としてロード
2走査しつつ数値にパース
3失敗したらスキップ
308:デフォルトの名無しさん
21/07/07 00:17:53.03 bUHYGk47.net
例えば、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 が、変換に失敗して、文字列型のまま
309:デフォルトの名無しさん
21/07/07 00:41:11.10 DonMIAPH.net
>>293です
よく分からなかったのは私の勘違いが原因でした
P340に記載されている内容はP338の差分だったことが分かりました
やっと理解できました
失礼いたしました、皆様ありがとうございました
310:デフォルトの名無しさん
21/07/07 00:49:15.09 85qcEXGX.net
>>308
せめてnumpyを移植してから知った風な口を利け
311:デフォルトの名無しさん
21/07/07 14:46:15.07 JFEXb6g2.net
pep8に
単一の文字 'l' (小文字のエル)、'O' (大文字のオー)、'I'(大文字のアイ) を決して変数に使わないでください。
フォントによっては、これらの文字は数字の1や0と区別が付かない場合があります。
ってあるけど、上のような理屈であれば、単一の文字でなくても同じ理由で使うべきではないことになるんでは?
312:デフォルトの名無しさん
21/07/07 15:11:46.21 49748z4f.net
10ng と long と IONG を間違うかって話だな
313:デフォルトの名無しさん
21/07/07 16:43:31.83 2KJNjcti.net
$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でやるのかもわかりません
それ専用の標準ライブラリとかあるのかな
314:デフォルトの名無しさん
21/07/07 17:49:17.95 vUBZA2na.net
>>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()))
315:デフォルトの名無しさん
21/07/07 18:46:33.05 2KJNjcti.net
>>314
なるほどprintでよかったんですね
splitlinesできました!ありがとうございました
316:デフォルトの名無しさん
21/07/08 21:41:26.17 g5ngXWNu.net
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
何を見落としてるんでしょうか…?
317:デフォルトの名無しさん
21/07/08 22:38:29.83 PyDOiOef.net
何をしたいかが全く分からないがとにかく
そのエラーは/bin/shが
cat <_io.StringIO object at 0x7f1360de01f0>
とかいう文字列を実行しようとして
>が出力のリダイレクトと解釈してその後にファイル名がないからエラーになってる
318:316
21/07/09 07:49:00.55 6wIK8ZSE.net
>>317
ありがとうございます!
例で実現したいことは、
$ python3 test2.py
12,34,56
この結果が出るにはどうしたら良いかが知りたいです。
シェルから見て実体のあるファイル名でないとダメってことですね。それはそうか。
一度ファイルシステムに書き出せば良いのでしょうが、それ以外の手はないでしょうか。
なお、例では長くなるのでcatコマンドに書き換えましたが、実際にやりたいことは
「pythonの前段処理結果をcsvに書き込み、そのcsvをgnuplotで読み込んで作図(を毎秒繰り返し)」というプログラムです。
処理結果の数字は毎秒積み上がっていくのと、プログラム終了時には実体のcsvファイルに書き出したいのとで
プログラム上では、StringIOを使ったcsvファイルとして処理したいです。
319:デフォルトの名無しさん
21/07/09 08:12:26.61 2AR12dC9.net
>>318
>「pythonの前段処理結果をcsvに書き込み、そのcsvをgnuplotで読み込んで作図(を毎秒繰り返し)」
だったら質問の意味が尚更分からん
上記の処理を1プログラムでやりたいなら
Pythonで前処理⇒直接前処理結果をグラフ作画⇒作画後に必要に合わせてデータをcsv出力
っていう流れの方が良くね?
書き込んでから読み込む必要性が全く分からん
320:316
21/07/09 08:30:32.97 6wIK8ZSE.net
>Pythonで前処理⇒直接前処理結果をグラフ作画
前処理では複数行複数列の数字(時間と温度です)を積み上げていくので、
その前処理結果のgnuplotへの渡し方としてcsvが適当かな、と思ったためです。
それとも、そもそもpythonスクリプトとしては前処理のアウトプットだけでexitし、
gnuplotはOS側シェルで普通に動かして前処理結果を使えば?という意味だとすれば、
今回はpythonスクリプト内でgnuplotを動かしたいです。
321:デフォルトの名無しさん
21/07/09 08:51:54.66 sj/mydTS.net
データが来るたびにファイルに追記していく(writeのあとにflush)
gnuplotは別に起動して毎秒ファイルを読み直す
と分けるのがよさそうに見える
322:デフォルトの名無しさん
21/07/09 09:04:12.08 2AR12dC9.net
>>320
>その前処理結果のgnuplotへの渡し方としてcsvが適当かな、と思ったためです
gunplotのマニュアル確認したけど、それなら素直にCSVファイルとして書き出さないと無理じゃないか?
大学か会社の都合か分からんけど
Pythonで素直に一連の動作をさせるなら
matplotlibの方がよっぽど楽だけど、それだとダメなんだよな
323:316
21/07/09 09:08:57.43 6wIK8ZSE.net
もともとはシェルスクリプトでそんな感じでやっていて、
拾ってきたpythonで温度を測定し、結果を/tmp/temp.csvに書いてそれをgnuplotに読ませてました。
実はgnuplotが書いたグラフ(png)をまた(拾ってきた)pythonでOLEDに描画するという後処理もあって、
全工程で1秒ちょっとかかってました。
そこで、おっしゃ自前でpythonの1スクリプト化して高速化や!コピペマンから脱却するやでー!
という素人考えで今に至っています。
pythonの1スクリプトで、>>316に書いたtest1の方法(中間ファイル書く)でも
シェルスクリプト版の倍は速く動いてるので、あとはStringIOさえできれば…と思ってました。
何分素人なのでそもそもの考え方が間違ってるところもあるとは思いますが、
なぜそう思うに至ったか、という話でした。
324:316
21/07/09 09:14:25.66 6wIK8ZSE.net
>>322
やっぱ実体としてのcsvファイルがないとダメですかね…ありがとうございます。
matplotlibはグラフ描くがgnuplotより難しそうだから見なかったことにしてました。
いい機会だから、もう一度調べてチャレンジしてみます。
325:デフォルトの名無しさん
21/07/09 09:20:09.59 2AR12dC9.net
>>323
すげえ面倒な方法で見える化やってるなwwwwww
慣れたらmatplotlibも描くの簡単だぞ、Pandasとかnumpyとの相性も良いし
ただ根本的な所で言えば、既存の見える化フローが結構ヤバイな
(グラフ画像をOLEDで映し出すっていうのが衝撃だわ)
抜本的に改善したいなら
Pythonでデータ処理⇒データベースに書き込み⇒データ系の見える化ツール
っていうのが理想形だな
TableauとかPower BIみたいなツール使うと見やすくなる(有償だけど)
無償ツールなら英語だけどGrafanaとかかな?
326:316
21/07/09 09:39:34.13 6wIK8ZSE.net
>>325
今回はラズパイローカルでグラフを物理画面に即描画したいんですよね。
趣味の焙煎釜の温度変化を熱電対で計測し、手元でリアルタイムにグラフ描画したい、
そして記録をcsvに残したい、というのが目的です。
今は単機能の熱電対プローブでやっていて、温度変化が全くわからないので。
そこでまずはアリエクで300円しないOLEDを買ってラズパイに繋いで
gnuplotのpngをSPI接続のoledに送り出し続けるという形にしました。
ほんとはpythonからoledのライブラリとか使って直接描画とかもできるのかもしれませんが、
matplotlibともどもフタをしてました…
これがうまくいったら、OLEDやめてラズパイケース一体液晶にしても良いかなとは思っています。
GrafanaやPowerBIは別件で使ったこともあって、後分析には良いですよね。
327:デフォルトの名無しさん
21/07/09 09:47:38.88 2AR12dC9.net
>>326
>今回はラズパイローカルでグラフを物理画面に即描画したいんですよね。
あーなるほど、そういう使い方もあるのか……俺の知識不足だったすまん
ただ結局グラフのpng画像を生成出来れば問題なさそうだし、matplotlibの差し替えが無難な気はするな
328:デフォルトの名無しさん
21/07/09 23:58:06.76 dI9qqvw1.net
int型の足し算ではintクラスの持っている__add__メソッドが暗黙的に呼び出されていると思います。
ですが、
1.__add__(2)
のようにすると1+2が実行されず構文エラーになります。これは何故でしょうか?
str型の場合は問題なく実行され、以下の場合"aabb"が返ってきます。
"aa".__add__("bb")
329:デフォルトの名無しさん
21/07/10 00:16:00.86 8UKJFvZ/.net
詳しくないが 1. が小数になるのが原因だろう
(1).__add__(2)
とか
1..__add__(2)
ならエラーにならない
330:デフォルトの名無しさん
21/07/10 00:16:24.03 Rm9mfcPV.net
1.x(float)か1のメソッドなのか決まらないから
1.1.__add__とかはメソッドなのが分かるから通る
331:デフォルトの名無しさん
21/07/10 00:59:10.02 MSe133Oz.net
>>329
>>330
納得しました!
ありがとうございます
332:デフォルトの名無しさん
21/07/10 10:33:46.40 chyfa+iT.net
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を押すと進み、画像が更新されます。
そこが問題のポイントなのかなと思いますが、それ以上の手がかりがありません。
333:デフォルトの名無しさん
21/07/10 10:43:05.45 lk+ovMEl.net
>>332
再現できる最小限のコードを提示しましょう
334:デフォルトの名無しさん
21/07/10 11:13:10.52 Ai3MLyk0.net
> get_img_data(conv_image)
この計算は一回でいいんじゃ
335:デフォルトの名無しさん
21/07/10 13:30:27.85 nAGZi/ZP.net
GUIがメッセージを処理する時間がねえんじゃねえの
336:332
21/07/10 14:33:07.51 chyfa+iT.net
>>333
すみませんでした…
URLリンク(dpaste.com)
手元の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:デフォルトの名無しさん
21/07/10 16:36:24.47 c5RJ/qlV.net
>>336
PySimpleGUIでメッセージ処理させるのはwindow.read()
メッセージ無くても回したいならtimeoutを指定する
338:デフォルトの名無しさん
21/07/10 18:01:51.33 lk+ovMEl.net
window.read()してないのでtk.update()が呼ばれず画面が更新されない
window.TKroot.update()を呼べば画面が更新されるが
直接呼ばずにwindow.read()を使ってメッセージループを作るほうがいい
デバッグセッション時はそれだと使いにくいから何か対処されてるっぽい
339:332
21/07/10 18:38:29.97 chyfa+iT.net
ありがとうございます。なるほど…!
どこかでサンプルプログラムをコピペしつつ、ボタンはどうでもいいから
とりあえず画像表示ループだけ回そうと適当かつ中途半場に行を削除してしまったので、
その結果イベント処理が進まない状態ということですね。
すごく良くわかりました。
どう処理するかよく考えて書き直してみます。
340:デフォルトの名無しさん
21/07/11 08:30:07.56 k6naGpL9.net
ユニークな長いリスト src があって
おのれはユニークだけどsrcと重複しうるリスト reqがある
reqの要素がひとつでもsrcにあれば云々したい
速いのを探しています。外部ライブラリは使えない
test = set(req)
bool([i for i in req if i in test])
?
341:デフォルトの名無しさん
21/07/11 09:23:01.16 FD6lxZ3g.net
any()かfor-loopのearly breakを使う
srcは長くて固定的、reqは短くて毎回変わるなら
srcのほうをsetにして管理したほうがいい
342:デフォルトの名無しさん
21/07/11 10:48:10.63 k6naGpL9.net
いや冷静に考えたら
フツーにset(src)&set(req)か
343:デフォルトの名無しさん
21/07/11 10:50:02.39 BLRKNf/m.net
共通要素を全て調べ上げる必要が無いなら>>341の方が速いな
344:デフォルトの名無しさん
21/07/11 11:14:07.88 k3ZSGeVZ.net
>>340
速いかどうかは知らん
not set(src).isdisjoin(set(req))
345:デフォルトの名無しさん
21/07/11 12:26:28.31 k6naGpL9.net
>>341
set(src10万)
req300 重複0~5
ではany()と&はほぼ誤差
bool([i in set])がわずかに遅い感じでした
センキュー
346:デフォルトの名無しさん
21/07/11 12:57:32.61 xAgoNPlJ.net
>>258
分かりやすい
347:デフォルトの名無しさん
21/07/11 19:05:49.41 akfEDp81.net
違和感というのは[]を()のように捉えてるから
リストや文字列に対する*は数学の掛け算とは無関係
要素数を増やせという機能
> [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:デフォルトの名無しさん
21/07/11 20:54:53.44 yIl0mON7.net
どうした急に
349:デフォルトの名無しさん
21/07/11 21:15:21.80 BeeJLMuH.net
発作よ
お薬を忘れたみたいね
350:デフォルトの名無しさん
21/07/12 00:05:06.94 hfOyhNhX.net
サブクラスからスーパークラスのメソッドを呼び出す場合、次の①と②は同じ意味ですか?
同じならどちらで書いた方がいいとかありますか?
class MyClass1:
def __init__(self, name):
self.name = name
class MyClass2(MyClass1):
def __init__(self, name):
① super().__init__(name)
② MyClass1.__init__(self, name)
351:デフォルトの名無しさん
21/07/12 00:29:53.14 2Zpr4/N8.net
わざわざsuper というキーワードが用意されているのだから使わない理由ないだろ
クラス名を変更した際の影響範囲を考えてみよう
352:デフォルトの名無しさん
21/07/12 11:10:07.04 4WArcuIG.net
>>350
その例だと同じだけど複数から継承するようなクラスを使う場合は
super()が返すものが普通に想像するものとは違ってくるケースもあるので注意が必要
URLリンク(fuhm.net)
353:デフォルトの名無しさん
21/07/12 19:50:10.58 QV5M7VnV.net
>>347
数学と無関係ではないよ、加群としてとらえても矛盾のない演算になってるでしょ
354:デフォルトの名無しさん
21/07/12 20:27:18.44 HIUYKm1A.net
それは*3が同じものを3つ足し合わせなさいという
常識的な意味合いをわかりやすさのために利用してるだけで
数学的なことなら割り算もあるでしょ
355:デフォルトの名無しさん
21/07/12 21:40:52.58 4WArcuIG.net
常識的な意味合いかぁ・・・
演算子オーバーロードの悪い見本にしか見えない
356:デフォルトの名無しさん
21/07/13 01:00:18.86 o9TqNFAF.net
>>351
>>352
ありがとうございました
ある本に説明もなく両方の記載があったので悩んでました
この機会に多重継承も勉強しようと思います
357:デフォルトの名無しさん
21/07/13 05:15:40.15 eWSxSU0S.net
数学っぽくやるなら
[3]*3->[9]
[1, 2]*3->[3, 6]
のほうがより直感的だった気はする
358:デフォルトの名無しさん
21/07/13 05:42:16.34 QsXB5/qu.net
numpyはそうなってるね
359:デフォルトの名無しさん
21/07/13 11:39:29.89 Oq4/PEVt.net
pythonバージョン3.8.1で次のようなことをしようとしていますが、関数の配置に困っています。
次にするイベントを抽選する
↓
イベントを実行する
↓
イベント終了後にイベント抽選へ戻る
しかし、これだとイベントを抽選する関数をイベントの関数より上に置くとイベント抽選の関数がイベントの関数を認識してくれず、
下に置くと、各イベントの関数がイベント抽選の関数を認識してくれません。
なんとか動かす方法はないものでしょうか?
360:デフォルトの名無しさん
21/07/13 11:45:58.98 uAPVX+Xy.net
5chのこの板のAndroid版のスレタイトル一覧を取得したいのですが、スレタイトル部分だけ抜けてしまいます。
htmlを見ると、スレタイトル部分はjava scriptを呼び出して(?)表示しているようです。
このような別から呼び出す仕組みの検索語だけでも知りたいです。
実行環境はWindows10のcolabです。
何卒よろしくお願いします。
以下がソースとhtml抜粋です。
URLリンク(pastebin.com)
361:デフォルトの名無しさん
21/07/13 11:52:22.48 eWSxSU0S.net
相互参照は常に避けるよう心がけるべき。
回避する方法はいろいろあるけど、
イベント抽選関数はイベントの関数に引数として渡してあげるとか、
イベントの関数はすべて同じ引数、戻り値にしておいて、イベント抽選システムへ予め登録しておく方式にするとか
362:デフォルトの名無しさん
21/07/13 11:55:28.21 I5G4+d/9.net
知らんけどmain関数のなかにwhile True: 抽選関数()
みたいにしてループさせて抽選されたイベント自体は抽選関数を呼ばなければいいだけじゃないの
363:デフォルトの名無しさん
21/07/13 11:59:46.95 0QNuXsy/.net
URLリンク(mevius.5ch.net)
> スレタイトル一覧を取得したい
> このような別から呼び出す仕組みの検索語だけでも知りたい
どっち?
スレタイ取得ならsubject.txt読ませればいいじゃん
わざわざしかもitestのhtmlをスクレイピングする理由あるの?
364:デフォルトの名無しさん
21/07/13 12:22:40.44 WUJYnH4r.net
>>354-355
*3がどう展開されるかより
もっと深刻な問題は
[[?]]*Nの内側の[?]はコピーされていないということだろ
365:デフォルトの名無しさん
21/07/13 12:24:59.10 WUJYnH4r.net
>>359
前方参照でぐぐれ
366:デフォルトの名無しさん
21/07/13 12:26:33.03 WUJYnH4r.net
>>360
5chはスクレイピング禁止
367:デフォルトの名無しさん
21/07/13 12:31:27.78 QsXB5/qu.net
>>359
イベントの関数定義と、抽選・実行をする処理とはファイルを分けて
前者を後者のファイルでimportして使う
1ファイルでできなくもないけど
モジュール分割を早めに覚えておいたほうが散らかりにくい
368:デフォルトの名無しさん
21/07/13 12:43:35.25 dtNqNBdW.net
>>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 を実行
369:368
21/07/13 13:03:34.95 dtNqNBdW.net
5ch は最初に、空のHTML を送ってきてから、
その後、JavaScript(Ajax)で通信して、内容を取り込む
だから単に、Ruby のNokogiri などでスクレイピングをしても、
空のHTML が取れるだけで、まだ内容が読み込まれていない
だから、15秒ぐらいスリープして、内容が読み込まれるまで待つ必要がある
または、selenium-webdriver で、ブラウザを自動操作して、
driver.manage.timeouts.implicit_wait = 15 # 要素の検索の timeout
みたいに、要素が存在しない場合に、何秒待つか指定する
370:359
21/07/13 13:16:57.35 Oq4/PEVt.net
ご回答ありがとうございました。
私があまりに初心者過ぎて、せっかくの具体的なご回答をほぼ理解できませんでしたが、
この状態を相互参照と呼ぶことが分かってようやくググることができ、
>>362さんのレスから着想を得て、main関数を作ってプログラムを全部括れば動くということが判明しました。
以上ご報告と御礼申し上げます。
371:360
21/07/13 17:54:03.79 28i3hfQd.net
>>368
ありがとうございます。
Ajaxという技術なのですね。
webdriverでwaitを入れたところ取得できました。
>>363
すいません説明不足でした。
実はPC版はシンプルなため取得できていました。
勉強のためにAndroid版も見てみようと思いやってみたところ、取得できなかったためお聞きしました。
皆様、勉強になりました。
ありがとうございました。
372:デフォルトの名無しさん
21/07/13 18:33:25.76 KwvhlQcy.net
>>354
そのツッコミをするなら、群と体の違いについて理解しようか。
掛け算があっても、割り算が必ずしも定義できるとは限らない。
373:デフォルトの名無しさん
21/07/13 20:54:54.99 4WrY8hy5.net
何このruby基地外の自作自演
きっしょ
374:デフォルトの名無しさん
21/07/15 02:12:23.66 0WF/Cs9d.net
スクレイピングでrequestsで上手く取得できないサイトはSeleniumで取得するようにしてるんだけどこれにThreadPoolExecutorを使用するとしたらどういう書き方すればいいの
今までは複数のサイトのURLが入ったリストをfor文で回しつつif文でドメインが一致するかどうかでrequestsとSeleniumを使い分けていたけど非同期にするとなるとさっぱりわからん
375:デフォルトの名無しさん
21/07/15 12:00:52.16 Rdfymp1t.net
クラスのメンバをforループのように回す方法はないですか?イメージは、
class Test:
a=0
b=0
c=0
def _print(self):
for member in self:
print(member)
みたいなことをやりたいです。
376:デフォルトの名無しさん
21/07/15 12:05:26.72 erbvpp8v.net
__iter__か__getitem__を定義すればいけるはず
377:デフォルトの名無しさん
21/07/15 12:46:48.66 82cJAwkj.net
試してないけど、
for v in vars(self):
print(getatter(self, v))
378:デフォルトの名無しさん
21/07/15 15:25:55.52 ygp86UHP.net
URLリンク(docs.python.org)
URLリンク(www.atmarkit.co.jp)
379:デフォルトの名無しさん
21/07/15 16:37:18.28 0u9iXN8m.net
そういうクラスのためのdataclass
astuple, asdictでイテレートもできる。
自分で用意できないクラスのオブジェクトの時は、dir()で列挙した後にごにょごにょしていく必要があるけど。
380:デフォルトの名無しさん
21/07/15 16:50:42.66 TtIRjd2i.net
この度pyinstallerでどのshell環境でも動作するコマンドを作成しました。
しかし5年前くらいのIntelMacでさえ快適に動作しますが、
M1macbookではかなりもっさりして遅いのです。
これはarm64アーキテクチャのせいで遅い可能性はありますか??
またこういったケースでの改善策などありますか??
arm64用にコンパイル方法などありましたら教えてください。
コマンドはスクレイピングした結果を別ファイルに落とす
シンプルなコマンドです。
shellscriptだとちょい面倒だったのでpythonで書きました。
381:デフォルトの名無しさん
21/07/15 20:50:47.41 Rdfymp1t.net
ありがとうございますが、
>>377だと順番が毎回ランダムになる
>>378だと順番がアルファベット順になる?(多分)
csvの要素と対応付けたいので定義順に出てくれないと困ってしまうのです・・
>>379はバージョン不足で不可。(3.5系)
1番目が順不定になるのも多分dictの順番が保持されてないせいだと思いますしやっぱり素直にアプデですかねぇ。。。こんな仕様にしたのほんとに誰ですか
382:デフォルトの名無しさん
21/07/15 21:02:10.64 gFOIdhYR.net
>>374
AWS なら、Lambda, SQS などを使えば?
383:デフォルトの名無しさん
21/07/15 21:48:55.17 NjXHl1NW.net
>>381
for v in sorted(vars(self))でどう?