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

■ このスレッドは過去ログ倉庫に格納されています
2021/10/01(金) 15:46:47.17ID:9qOHXj6D
当スレに★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(超初心者用) その54
https://mevius.5ch.net/test/read.cgi/tech/1623240344/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
619デフォルトの名無しさん
垢版 |
2021/11/12(金) 18:29:01.39ID:JnXYuZWY
from ctypes import *
t = 30000
while(t -= 1):
windll.user32.MessageBoxW(None,"YYY","ABC",0)
2021/11/12(金) 18:55:33.33ID:a3j0d+bF
>>616
お前が読めないだけだろ…
言語仕様として公式に提供されてるのに老害はこれだからw
2021/11/12(金) 19:30:16.12ID:xRtlJ9/N
こういうのを見るたび「Zen of Python」ってなんだったんだろうなって思ってしまうw
622デフォルトの名無しさん
垢版 |
2021/11/12(金) 19:54:46.68ID:JnXYuZWY
>>621
Zenは原理主義じゃないから
623デフォルトの名無しさん
垢版 |
2021/11/12(金) 20:27:32.37ID:MdQVbi6g
>>618
あーそうかー
has部分だけなんす、tryするの。tryは短くないとですよね

if use :
__try:
____x.has('A'):
________foo()
__except ValueError:
____use =False
if not use:
__var()

んーーーー
624デフォルトの名無しさん
垢版 |
2021/11/12(金) 20:32:02.95ID:+D42agk2
('A')が(´A`)に見えた
2021/11/12(金) 21:16:34.84ID:1KWt8wEr
>>623
has()が例外投げる代わりにFalseを返せばいいんでは?
2021/11/12(金) 21:25:29.92ID:1KWt8wEr
loopのelse句はGuidoも後悔してる機能
https://mail.python.org/pipermail/python-ideas/2009-October/006157.html
2021/11/13(土) 00:44:08.28ID:fE0qo4YR
>>621
グイドは禅を守る為に戦ってるんだよ
628デフォルトの名無しさん
垢版 |
2021/11/13(土) 01:57:43.67ID:PnBDGE+q
そりゃ後悔するわな
629デフォルトの名無しさん
垢版 |
2021/11/13(土) 04:38:52.17ID:qYaZF+ZS
Web Designing 2021年12月号
>入門〜上級まで本気で勉強したい人必携。Pythonの利点からWebビジネスで活きる仕組みまで丁寧に解説!
630デフォルトの名無しさん
垢版 |
2021/11/13(土) 17:33:14.40ID:kgYXWGHf
sqlのスレのほうがいいのか迷いましたがこちらで。
psycopg2で重複させずにinsertをする方法を知りたいです。

import psycopg2
#データベースにいれるurlのリスト
url_list1 = ['url1', 'url2', 'url3', 'url4', 'url5',]
url_list2 = ['url1', 'url2', 'url6', 'url7', 'url8',]
# PostgreSQL Server へ接続してカーソルを取得
conn = psycopg2.connect('host=localhost port=5432 dbname=urlman user=urlman password=urlmaniscool')
c = conn.cursor()
#urlを保存するテーブルの作成
c.execute("""
CREATE TABLE url_table(
"url_name" text,
"count" integer default 0
)
""")
631デフォルトの名無しさん
垢版 |
2021/11/13(土) 17:33:37.48ID:kgYXWGHf
#url_list1のデータを挿入
for url in url_list1:
c.execute('INSERT INTO url_table (url_name) VALUES(%s)',[url])
conn.commit()

#入ったか確認
c.execute('SELECT url_name FROM url_table WHERE count=0')
urllist = [row[0] for row in c.fetchall()]
print(urllist)
632デフォルトの名無しさん
垢版 |
2021/11/13(土) 17:33:55.87ID:kgYXWGHf
#新たに取得したurlのうち重複してないurlを挿入
#これのやりかたがよくわかりません
for url in url_list2:
c.execute('INSERT INTO url_table (url_name) VALUES(%s)',[url])
conn.commit()

#入ったか確認
c.execute('SELECT url_name FROM url_table WHERE count=0')
urllist = [row[0] for row in c.fetchall()]
print(urllist)

#コネクションを閉じる
conn.close()
633デフォルトの名無しさん
垢版 |
2021/11/13(土) 17:36:19.84ID:kgYXWGHf
上記でprint(urllist)の結果を['url1', 'url2', 'url3', 'url4', 'url5','url6', 'url7', 'url8']にしたいのですが、
['url1', 'url2', 'url3', 'url4', 'url5','url1', 'url2', 'url6', 'url7', 'url8']になってしまいます。
2021/11/13(土) 17:56:44.89ID:vJfZgOKN
入ったかどうかを select で確認してるんだから
入ってたら除外すればいい
635デフォルトの名無しさん
垢版 |
2021/11/13(土) 18:09:47.53ID:kgYXWGHf
>>634
今回は練習で入ったかどうかを確認しているのですが、
最終的にはurlをどんどん目視確認なし重複なしで入れていくようにしたいです
2021/11/13(土) 18:13:41.77ID:Mehg38vB
url_nameを主キーにすればいいんじゃないの
2021/11/13(土) 18:18:47.95ID:x1CN7sQN
>>630
c.execute('INSERT INTO url_table (url_name) VALUES(%s) on conflict (url_name) do nothing',[url])

ただしon conflictで指定する列はuniqueでないとダメなので

CREATE TABLE url_table(
"url_name" text unique,
"count" integer default 0
)

にしないとエラーになる

>>634,636
今どきupsertやmergeも知らないのはどうかと思うぞ
2021/11/13(土) 18:21:14.00ID:6FXvjqIK
pythonロジックでセレクトかけてインサートするかどうか決めたり或いは
インサート文にwhere条件入れてもいい
ただ設計的なはなしでいうなら、最初から重複すべきではないなら
テーブル定義の重複NGにキー制約かけたほうがベスト
その際、インサートで主キーだぶるとdbms側で例外吐くので、例外処理のpythonロジックを追加する必要がある

規模が大きいシステムだと、最後のやり方をまず一番最初に考慮する必要がある
上二つのやり方は考え方としてはほぼ一緒で
実装としてSQL文として一筆書き出来ますよと言うはなしでしかない
範囲が限られた業務ロジックのなかでなら有効に使える
2021/11/13(土) 18:22:14.25ID:pRVx8AyR
1件ずつexecuteせずまとめてinsertしたほうがいいよ
2021/11/13(土) 18:27:23.32ID:6FXvjqIK
>>637
>>636は設計として推奨する場面が多いからな
本来重複しちゃいけないデータが大量にdb上にあると
ほかの業務ロジックでも想定外のデータを取ったり
テーブル結合時に直積による組み合わせ爆発がおこってシステムが停止する可能性もある
数行しか期待してないクエリから数万〜数十万のデータが取れてしまうことになりかねない

基本的に、セレクトででてくるデータは写像であって実体ではない
これをまず理解してないと、組み合わせ爆発まで考えが行き届かないことになりやすい
641デフォルトの名無しさん
垢版 |
2021/11/13(土) 18:42:45.91ID:kgYXWGHf
>>637の内容で入れてみます!!!
データベース勉強しはじめでよくわかってなくて申し訳ない。
upsertは調べてみたのですが、重複した場合、内容を更新するとなっていてやりたいことと違うのかと思いました
2021/11/13(土) 18:46:41.57ID:6FXvjqIK
>>641
マージ文でググればでてくるけど
じつはアレ、アップデート文書かなくてもちゃんと期待どおりに動くぞw
インサートやって、出来なければスルーしたいならOR UPDATEの部分だけ書かなければいい
643デフォルトの名無しさん
垢版 |
2021/11/13(土) 18:55:43.88ID:kgYXWGHf
>>638
最初は、pythonで重複の比較して重複してないやつを入れることも考えたんです。
c.execute('SELECT url_name FROM url_table WHERE count=0')
urllist = [row[0] for row in c.fetchall()]
で持ってきたurllistをurl_list2と比較して重複してないやつを入れるみたいな
url_list2 = set(url_list2)-set(urllist)とかで?
でもせっかくデータベースの勉強してるのでそっちでやってみたいなって感じです
>>640
すまん、話してることが難しくてよくわからない
644デフォルトの名無しさん
垢版 |
2021/11/13(土) 18:58:26.95ID:kgYXWGHf
ぽまいらなんでこんなに詳しいんだ
挫折しながらもpythonちょっとできるようになってきて、
csv辞めてデータベースに入れてみたいってなって、
postgresqlの勉強始めたら挫折して、挫折しかしてねえぞ俺
645デフォルトの名無しさん
垢版 |
2021/11/13(土) 18:59:24.51ID:kgYXWGHf
>>642
これから637と642どっちも試してみるです!!
2021/11/13(土) 19:00:45.55ID:x1CN7sQN
>>641
> upsertは調べてみたのですが、重複した場合、内容を更新するとなっていてやりたいことと違うのかと思いました
upsertやmergeはDBMS毎に書き方違うから調べにくいよね
まあおいおい調べていけばいいと思うよ
あと、例外出してPython側で処理するとかPostgreSQLにないマージ文とか言ってるアホは無視でいい
2021/11/13(土) 19:08:25.74ID:6FXvjqIK
すまんw
postgresもどうせ普通にANSI規格やろと思ったら未実装やったんかい
648デフォルトの名無しさん
垢版 |
2021/11/13(土) 19:16:23.51ID:kgYXWGHf
637のやりかたでできたぞです!
ありがとう。

642も試してみる
2021/11/13(土) 19:27:37.20ID:6FXvjqIK
>>648
postgresでは使えなかったので試さんでいいです
ごめん
650デフォルトの名無しさん
垢版 |
2021/11/13(土) 19:54:50.55ID:kgYXWGHf
>>646,647
マージ文?ないってレスに今気づいたありがとう。
2021/11/13(土) 21:24:55.56ID:wUFaz/ce
辞書のキー名から動的に値を取得したいのですが
https://ideone.com/yTqdAv
これってforの内包表記とか即実行関数で
一行でかけないものでしょうか?
652デフォルトの名無しさん
垢版 |
2021/11/13(土) 21:58:49.17ID:diWAL6lC
>>651
import functools
d={"a":{"b":{"c":{"d":111}}}}
ary=["a","b","c","d"]
print(functools.reduce(lambda d, k: d[k], ary, d))
2021/11/13(土) 23:36:54.00ID:wUFaz/ce
>>652
なるほどそんな便利なものがあったんですね
ありがとうございました
654デフォルトの名無しさん
垢版 |
2021/11/14(日) 00:17:07.01ID:MXTEWU7A
静的にキーを定義してる時点で動的とは言えないのでは
2021/11/14(日) 01:36:39.78ID:ZInZl5Ie
ええもちろん実際は
>ary=["a","b","c","d"]
の部分は動的生成ですよ >>654
ちなみにどう書いてあると良かったでしょうか
今後質問するときに参考にします
656デフォルトの名無しさん
垢版 |
2021/11/14(日) 01:47:41.70ID:MXTEWU7A
>>> d={"a":{"b":{"c":{"d":111}}}}
>>> def get_value(dd): return dd if isinstance(dd, int) else get_value(list(dd.values())[0])
>>> print(get_value(d))
111

lambda使って頑張ればいける?無理かな
2021/11/14(日) 02:13:49.47
>>656
それ、目的が「111を取得する」ことになってね?
もしdが
d={"a":{"b":{"c":{"e":222,"d":111}}}}
とかだったら、222になっちゃうよ
2021/11/14(日) 04:27:10.93ID:PiYGiFgV
>>644
挫折と言うのは努力した人がするもんだ
2021/11/14(日) 08:05:21.74ID:8oLu5/jW
>>655
> ちなみにどう書いてあると良かったでしょうか
> 今後質問するときに参考にします
一部の変な人が無駄に絡んでるだけ
元の書き方で普通わかるから気にしなくていいよ
2021/11/14(日) 13:36:33.18ID:E00roTgy
そもそも日本語が不自由っぽくて
何をしたいのかが良く判らん
2021/11/14(日) 13:40:46.75ID:E00roTgy
と思ったが画像観てなかったわω
関数名 search_tree とか search_node の方が良いんじゃね
2021/11/14(日) 14:59:17.47
相手の日本語を疑う前にまず抽象化して考えた方が良いと思うわ
質問者の質問には、期待部分とコード部分が分かれてるわけで。
コード部分だけみて文字通りコードだけみて
「何したいかわからん」っていう人いるけど
全部同じ人だとしたら、ずっとネタでやってんのかと思ってたけど
返しがガチアスペっぽいんだよなぁ・・

例えば if True:とか書くと
「Trueだと当たり前じゃん、何がしたいかわからん」
みたいな返しの人いるじゃん
これまじでネタでやってんのかと思ってたけど
安定して登場してるんでどうもネタでやってないっぽい
2021/11/14(日) 15:01:10.51ID:ckxtWecQ
画像?
人の日本語にケチつけるレベルじゃないだろw
664デフォルトの名無しさん
垢版 |
2021/11/14(日) 15:06:35.08ID:L6aMQe6P
>>651
ここまでいくつか挙がってるが、そのコードが一番いいよ
無理やり1行にすると後で見た時に意味不明になるよ
コードゴルフが目的なら言うことはないが
2021/11/14(日) 15:38:37.79ID:vfrWY536
それあるわ
苦労して一行にまとめたコードだが、
何をしているのかを解説するコメントが10行くらい必要になって
これやらない方がよかったなって経験がある
2021/11/14(日) 15:41:51.67ID:mFG9NQD5
>>644
YouTube で有名な、雑食系エンジニア・KENTA のサロンの、Ruby on Rails 初心者用コースでは、

Rails, Linux, Docker Compose, Node.js(Webpack, Babel), Bootstrap
VSCode(Remote Container, WSL2 ならRemote WSL), Heroku, CircleCI、データベース(DB)

バックエンド技術者の大前提として、基本情報処理資格も必須。
DBも、第3正規形まで入る

さらに、データベース技術者資格・ミックの本も読んだ方がよい
2021/11/14(日) 16:58:12.67ID:tkHjD9h1
>>657
例が悪い
2021/11/14(日) 18:18:34.52ID:XvRnuZG1
質問は割とまともでも
最初に付いたレスが頓珍漢だと
頓珍漢な質問者だということにされる好例
669デフォルトの名無しさん
垢版 |
2021/11/14(日) 18:40:23.82ID:+PJrsOCi
ただ絡みてえだけのバカが数人常駐しとるでな
2021/11/14(日) 19:22:31.60
>>667
コード例は関係ない
>>651質問者の期待は
>辞書のキー名から動的に値を取得したい
であって
「キー名a,b,c,d順の最期の値を取得したい」
ではない
質問者の期待とコードを見た上で抽象化すれば
「あー、search_dict()にselectors(キー名の入ったリスト)入れて検索したいのね」
「dやaryが他の場合も対応しつつ」
ってのが一般回答者なら意識しなくてもわかる

「コードが{"a":{"b":{"c":{"d":111}}}}ってなってる!!
しかも出力が111だ!
さらには["a","b","c","d"] と静的に定義されてる!!
いやいやそもそもa→b→c→dの順で検索するコード書けばいいじゃねえか!!」
とはならんだろ・・
だからアスペっぽいなぁと感じる所以
で、ネタならただの荒らしなんでそれはそれでいいが
ネタじゃないっぽいガチアスペっぽいやつがいるんだよな
2021/11/14(日) 19:31:47.93ID:6/4ZgoB5
教えてください。
開いているメモ帳などに、言葉を複数回入力したいのですが、

pyperclip.copy(text)  #textは変数
でクリップボートにコピーしたものを、メモ帳に貼り付けるため

hwnd = win32gui.FindWindow(None, "〇〇 - メモ帳")   # "〇〇 - メモ帳"は例えです
win32gui.SetWindowPos(hwnd,win32con.HWND_TOPMOST,0,0,0,0,win32con.SWP_NOMOVE | win32con.SWP_NOSIZE)

で、常に最前面にした状態で、

pyperclip.paste()
を実行しても貼り付けできません。
pyautogui.typewrite(text)
でも、メモ帳をアクティブにすれば、日本語はダメですが英語だと貼り付けできます。

@メモ帳をアクティブにする方法 PID指定でもいいです
A日本語を貼り付け可能にする方法

よろしくお願いいたします。
2021/11/14(日) 19:41:02.30ID:r+uJUw0M
最前面にあるのとフォーカスがあるのは一緒じゃない
673デフォルトの名無しさん
垢版 |
2021/11/14(日) 19:58:23.61ID:qsoauoys
コードが全然わからず困ってます。
有料のサブスクで勉強しているんですが、説明が分からなくて困ってます。
def から何をしているのかさっぱりわかりません。
DataFrame の処理の問題です。

コメントの15文字までを切り出して列(SlicedComment列)に格納する処理をSeries.apply()を使って実行します。
まず実行したい関数(ここでは、get_sliced_str関数)を実装します。
その後、Series.apply()に引数として実装した関数を渡すと、Seriesの各データが実装した関数の引数として渡された結果をシリーズとして返します。

# 前回のプログラムの読込
%run 2.ipynb
def get_sliced_str(x):
return x[:15]
# 関数を使って作成
df['SlicedComment'] = df['Comment'].apply(get_sliced_str)
df
# strアクセサを使って作成
df['SlicedComment'] = df['Comment'].str[:15]
df
2021/11/14(日) 20:19:49.33ID:y/dqGNjn
コードが意訳でなくコピペなら引用の範疇かが気になるし有料ならそっちで聞いた方がよくない?
前後の流れもあるだろうし
2021/11/14(日) 20:23:34.90ID:sz2Sy1tN
そもそもpyperclip.paste()とpyperclip.copy()はクリップボードの中身をどうこうするために存在するのであって
なんかの画面に貼り付けるために存在するのではない
結論としてはpyautogui.hotkey()にctrlとv渡せ
2021/11/14(日) 20:26:13.01ID:6/4ZgoB5
>>672さん
ありがとうございます。
理解しました。そうですよね。よく考えれば当然でした。

Aの貼り付けは、
pyautogui.hotkey('ctrl', 'v')
で解決しました。

で、メモ帳にフォーカスをあてるには、バーチャルマウスでクリック等はあったのですが、
直接指定してフォーカスする方法があればお教えください。
2021/11/14(日) 20:51:40.87ID:sz2Sy1tN
タスクバー上の配置を固定しておいてwin+数字キー
2021/11/14(日) 21:23:31.50ID:qmSPgrdk
>>673
説明の何がわからないのかもう少し細かく考えてみては?

defが何かわからない?
「コメントの15文字までを切り出して列に格納する」という日本語の意味がわからない?
スライスやSlicedの意味がわからない?
x[:15]が何をしてるかわからない?
シリーズが何かわからない?
「Series.apply()に引数として関数を渡す」という日本語の意味がわからない?
などなど
2021/11/14(日) 21:58:02.31ID:u3eAdyh4
>>651
1行じゃ無いけど再帰は要らなくね?
def search_dict(target,selectors):
c = target
for k in selectors:
c = c[k]
return c
2021/11/14(日) 22:31:49.77ID:bHC3qkkE
コードゴルフしてるんで一行でお願いします
2021/11/15(月) 01:36:18.56ID:5MYJc3th
>>678
アドバイスありがとうございます。
シリーズがよく分かっていなかったのと、apllyもよく分かっていませんでした。ノートに書きながら色々実行したら何となくわかりましたが、x[:15]がよく分かりません。
コメントを渡して最初の15文字をなぜ切り取れるんでしょうか
682デフォルトの名無しさん
垢版 |
2021/11/15(月) 02:57:55.17ID:/1nodzje
>>681
お前はまず初心者向けの本を一冊読んでから出直せ
683デフォルトの名無しさん
垢版 |
2021/11/15(月) 03:02:41.97ID:r/fnyP+y
まあ超初心者用とはいえ論外だわ
クジラ飛行机の入門書でも読めや
あれプログラムしたこと無い人がスタートラインに立てるようになるから
2021/11/15(月) 03:13:21.02ID:x301xsWW
誰に吹き込まれていきなりこんな課題やってんのかな
詐欺メッセージに騙されてコンビニでアマギフ券買ってしまうくらいのIQと見た
2021/11/15(月) 03:25:27.36ID:hipLkLbw
>>681
まずPython自体の習熟度に問題があるな
(Pythonは文字列そのままスライスできる書き方がある)
Pandasに触る前に、先にそっちやらないと構文的に分からない所が多々出てくる

最低ラインとして入門書1冊か、根気があるなら公式チュートリアルをまずやるのが先決

実行する時にもデバッグのブレークポイント使って、
1個ずつ処理をステップ実行で見ていくのもいい、何をやってるのか分かる
686デフォルトの名無しさん
垢版 |
2021/11/15(月) 03:44:37.20ID:/1nodzje
多分だけど
有料だから手取り足取り教えてくれるだろうという認識なんじゃないかな
違うんよ
有料で、その分野(python)の専門的な領域(pandas)を解説する講座なんじゃて

その講座の入門条件は「pythonが一通り使える」よ
明言しない講座も悪いんだろうが今のままじゃ金をゴミ箱に捨てるのと大差ない
def(関数定義)も分からないんじゃ、class出てきたら即死するでせう

っていう、超初心者スレが現状の>>681にできる最大限のアドバイス
受け取れ
2021/11/15(月) 05:51:22.02ID:OfX77+Sf
KENTA, 2021/2

Web系エンジニアを目指す人のためのプログラミング学習ロードマップ
https://www.youtube.com/watch?v=0TABrlhci5M

この動画は、Ruby on Rails で、ポートフォリオを作って転職するためのものだけど、

HTML/CSS, JavaScript, Ruby, RDB/SQL などは、
Progate, Dot Install で学ぶと言ってる

多分、Python も同じじゃないの?
2021/11/15(月) 09:01:49.22ID:EiiKCwr/
>>681
長さが決まっててインデックスアクセスができる型をPythonではシーケンスと呼ぶんだけど
シーケンスxに対してx[:15]と書くとxの0番目要素から14番目要素までを切り取ったもの(スライス)が返される

x[:15]はx[0:15]と書くのと同じで開始位置の0番目を省略した記法
list, tuple, range, strなどがシーケンス
https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range

SeriesはDatatFrameの1行や1列のデータを表現するPandasの型で1次元配列とラベル情報を持ってる
SeriesやDataFrameもシーケンスなのでリストや文字列と同じようにスライス可
2021/11/15(月) 14:23:06.05ID:2H0KJ/Z9
scheduleって同期処理なんですね・・

import schedule
import time

def sleep1():
 print('start sleep1')
 time.sleep(10)
 print('end sleep1')
def sleep2():
 print('start sleep2')
 print('end sleep2')

schedule.every(3).seconds.do(sleep1)
schedule.every(1).seconds.do(sleep2)

while True:
 schedule.run_pending()
 time.sleep(1)

sleep2が1秒おきのスケジュールだとしても
sleep1内のtime.sleep(10)を待ってしまいます
どうにか非同期的に処理できないものでしょうか
2021/11/15(月) 14:48:29.66ID:P/PCEOHq
>>689
sleep1/2を非同期処理で書けばいいやん
scheduleが機能持つと重複だし作法が縛られるからよろしくない
PyPIにいけばasyncioをラップしたスケジューラはありそうだけどね
691デフォルトの名無しさん
垢版 |
2021/11/15(月) 14:58:38.85ID:i/3H6iLT
threading
thread
2021/11/15(月) 16:08:12.68ID:2H0KJ/Z9
>>690,691
sleep12を非同期で処理するとスケジュールタイマーが機能せず
スケジュールタイマーを機能させるとsleep12が互いに処理を待つ
みたいな、こちらを立てればあちらが立たず状態です
2021/11/15(月) 16:35:56.57ID:P/PCEOHq
>>692
もし非同期処理のなかでtime.sleep()してるならストップ・ザ・ワールド
https://docs.python.org/ja/3/library/asyncio.html
とくにこだわりないなら今はasyncioで書くのがいいよ

https://docs.python.org/ja/3/glossary.html#term-global-interpreter-lock
あと処理のなかでGILつかんでるならプロセスベースにするのが単純な解決方法
2021/11/15(月) 16:41:25.31ID:nBoI3p59
>>692
「三秒おきに『10秒待つ』をループする処理」
と「一秒おきに『即時実行』をループする処理」
のふたつをアウェイタブルオブジェクトとしてつくって、せーので流す
が、ぱっと思い付いた

他にかっこいいやり方ありそうやけど
2021/11/15(月) 16:55:34.42ID:zyhNM4DJ
10秒待ちと1秒待ちを非同期にするだけなら簡単そうだけど
3秒待って10秒待ちの場合13秒待ちで非同期にすればええのか
最終的にどういう関数動かすかによるけど
3秒ごとに10秒待ちも非同期なん?
2021/11/15(月) 17:23:28.77ID:2H0KJ/Z9
>>693,694
なるほどとりあえずschduleは置いといて作ってみることにします
>>659
def sleep1()とdef sleep2()の内容に関わらずとりあえず非同期実行したい感じですね
極端な話、[sleep1を3秒おき,sleep1を1秒おき,sleep2を1秒おき,sleep2を3秒おき,sleep1を3秒おき・・・]
みたいなタスクを登録して、スタートさせれば
3秒おきに登録した分だけのsleep12が非同期に実行(もし3秒後にsleep12が処理中であっても関係なし、重複非同期実行)
1秒おきに登録した分だけのsleep12が非同期に実行(もし1秒後にsleep12が処理中であっても関係なし、重複非同期実行)
みたいな極簡単な処理だと思ってましたが
scheduleを使いつつ非同期させるやり方がわかりませんでした
2021/11/15(月) 17:25:52.78ID:2H0KJ/Z9
訂正 >>659 → >>695
2021/11/15(月) 20:29:39.63ID:WP/h0dcw
ヘッダーありのcsvファイルをpandasで読み込んでlist化する際にデータをいじることって可能ですか?

data = pd.read_csv("csvファイル名").values.tolist()
print(data)

上記の結果が、
[['¥2,680','ストアA','yes'],['¥680','ストアB','yes'],['¥6,890','ストアC','no']]だった場合に下記にしたいです。
[[2680,'ストアA','ストアA'],[680,'ストアB','ストアB'],[6890,'ストアC','佐川急便']]

ヘッダーは価格、ストア名、配送者です。
スマホから手打ちしたのでズレてたらごめんなさい。
699デフォルトの名無しさん
垢版 |
2021/11/16(火) 00:23:59.11ID:2pODoVjh
import re
data = pd.read_csv("csvファイル名")
data[‘価格’]=data[‘価格’].map(lambda x:int(re.sub(r’[,\\]’, ’’, x)))
data=data.values.tolist()
700デフォルトの名無しさん
垢版 |
2021/11/16(火) 00:25:14.03ID:2pODoVjh
yes/noはどうなって欲しいかよくわからん
2021/11/16(火) 02:34:34.04ID:Z03AZUuJ
>>700
yesのときはyesをストア名で置換して、noのときは佐川急便に置換したいです。
2021/11/16(火) 05:47:58.24ID:gIvqaGJY
Ruby で作ってみたけど、
ひょっとして、この\ は、逆スラッシュ\ と異なる文字を使っている?
"a5"なんて、使う?

p "\".ord.to_s( 16 ) #=> "a5"
p "\\".ord.to_s( 16 ) #=> "5c"

require 'csv'

options = { :headers => true } # ヘッダー有り

# CSV ファイルを、1行ずつ処理する
result = CSV.foreach( "input76_4.csv", options ).map do |row|
# 「,\」を削除してから、整数型へ変換する。
# 注意。この\ は、逆スラッシュ\ と異なる文字です
row[ "価格" ] = row[ "価格" ].tr( ",\", "" ).to_i

if row[ "配送者" ] == "yes"
row[ "配送者" ] = row[ "ストア名" ]
else
row[ "配送者" ] = "佐川急便"
end

row
end

p result
puts result
703デフォルトの名無しさん
垢版 |
2021/11/16(火) 09:54:19.33ID:OREEnQL3
windowsだと円マークとバックスラッシュに5Cを当ててるけど
Macなんかはちゃんと区別してるってことじゃないの
2021/11/16(火) 11:25:27.35ID:5D9mKY7b
>>679
末尾再帰とループは同値だとあれほど
2021/11/16(火) 11:28:28.42ID:5D9mKY7b
>>698-699
apply
2021/11/16(火) 11:35:50.32ID:mF3NnymR
>>704
いや、わかりにくいって話な
2021/11/16(火) 12:05:42.27ID:wraX66B2
Ruby有識者早くきてくれー!
2021/11/16(火) 17:14:17.96ID:jfdNp8v5
>>707に召喚されたので…

>>651
https://ideone.com/WA4rsx
709708
垢版 |
2021/11/16(火) 17:30:31.28ID:jfdNp8v5
いらぬおせっかいかもしれぬが、関数型プログラミングの正しい知識があれば、
Python でも標準ライブラリ関数 reduce を使って一行で書けるハズ
なお、内包表記は map/filter の構文糖だから、還元(あるいは畳み込み)機能の
実装である reduce の代替にはならない
これは Pyhthon の問題ではなく内包表記の限界だから、例えば Haskell でも同じ
2021/11/16(火) 18:30:31.88ID:2/DPJM9H
>>708
dig・・・
2021/11/16(火) 18:39:12.08ID:GJIVmbG1
スレタイに超初心者用って書いてあるやん
超初心者相手に知識マウント取って楽しいか?
2021/11/16(火) 18:44:06.19ID:ndL262TB
無駄無駄
Pythonって単語が入ってしまってる以上どうやっても好き勝手パイ雑談したがるやつが出るから。ルールってそんなもん
Pythonお勉強スレと両方見ててスレの流れだけ見てどっちのスレか区別もなくレスしてる奴がほとんどだろう
713デフォルトの名無しさん
垢版 |
2021/11/16(火) 19:04:24.15ID:2pODoVjh
関数型プログラミングのメリットって何ですか?
714デフォルトの名無しさん
垢版 |
2021/11/16(火) 22:37:11.33ID:iw6chFt8
パイ雑談て😅
715デフォルトの名無しさん
垢版 |
2021/11/17(水) 07:06:55.40ID:ytfPCTgK
seleniumについて質問です
特定のサイトで起こるわけではないのですが、
たまにdriver.get(url)を実行してページ遷移した画面でフリーズすることがあります。

driver.get(url)
wait = WebDriverWait(driver=driver, timeout=30)
wait.until(EC.presence_of_all_elements_located)
で実行していて、要素が確認できてないから待機してるのかと思っていましたが、
driver.get(url)
print("待機中でごわす")
wait = WebDriverWait(driver=driver, timeout=30)
wait.until(EC.presence_of_all_elements_located)
で実行してもフリーズする際は"待機中でごわす"が表示されないので、
driver.get(url)でページ遷移した状態で固まってると思います
716デフォルトの名無しさん
垢版 |
2021/11/17(水) 07:09:40.02ID:ytfPCTgK
同じurlで繰り返しためしてみても正常に処理できるときがほとんどで
極稀にdriver.get(url)でページ遷移した後の画面でフリーズするので原因がわかりません。
対応策とか分るかた入れ歯教えてください
717デフォルトの名無しさん
垢版 |
2021/11/17(水) 07:10:50.45ID:ytfPCTgK
あとはdriver.get(url)の次の処理が60秒間の間に始まらなければエラーを返すみたいな処理が可能でしたら教えてほしいです
2021/11/17(水) 07:34:30.83ID:CbT8HrOI
https://stackoverflow.com/questions/28131038/selenium-webdriver-driver-geturl-hangs-sometimes
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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