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

■ このスレッドは過去ログ倉庫に格納されています
2022/09/07(水) 10:33:53.50ID:RjZl78eW
当スレに★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(超初心者用) その57
https://mevius.5ch.net/test/read.cgi/tech/1653225908/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
44デフォルトの名無しさん
垢版 |
2022/09/18(日) 20:08:25.35ID:m9ZYpqjQ
>>43
ネストを浅くするという選択肢は無しですか?
2022/09/18(日) 21:31:28.79ID:/3elu/X8
そもそもその79文字縛りはどこから出てきたんだ?
4640
垢版 |
2022/09/18(日) 22:00:10.71ID:oIU/CVXy
レスありがとうございます

>>44
これ以上はきついです
全体をdefで囲って、その中にclassを定義して、その中にインスタンスメソッドを
定義する必要があるからです(現状ネスト6重)

>>45
慣習みたいなものだと捉えています(インデントは空白4文字、のような)
79文字を超えるとpycodestyleでも引っ掛かります
2022/09/18(日) 22:15:09.13ID:e9eIyLRS
内部関数はつかうけど内部クラスは使わんな
48デフォルトの名無しさん
垢版 |
2022/09/18(日) 22:31:15.96ID:m9ZYpqjQ
>>45
PEP8

>>46
>全体をdefで囲って、その中にclassを定義して、その中にインスタンスメソッドを
>定義する必要があるからです(現状ネスト6重)
なんで?
49デフォルトの名無しさん
垢版 |
2022/09/18(日) 22:44:35.75ID:m9ZYpqjQ
型ヒントを書くこととPEP8を守ることを強いられてる状況でどちらを無視していいですかって聞かれても答えなんてないよ
50デフォルトの名無しさん
垢版 |
2022/09/18(日) 23:07:19.20ID:m9ZYpqjQ
PEP8の79文字制限の理由ってデバイス上の文字数制限から複数のファイルを並べて開くことに変わってるんだね
今初めて知ったわ
51デフォルトの名無しさん
垢版 |
2022/09/18(日) 23:12:03.52ID:m9ZYpqjQ
デバイスが理由の制限なら、PEP8の79文字別に守らなくてもいいと思ってたのに
5240
垢版 |
2022/09/18(日) 23:21:48.72ID:oIU/CVXy
レスありがとうございます

>>47
そうなんですね
if __name__ == '__main__': の使い方について調べてみようと思います

>>48
クラス内にインスタンスメソッドを定義するのは分かって貰えると思います
あとは以前友人に、グローバル変数はなるべく使わない方がいいと指摘されたので、
全体をdefで囲みました

>>49
そうですか、困りました…
型ヒントは努力目標だと思っているので、今回は切りました
変数名から型はすぐに予想が付くはずなので
2022/09/19(月) 17:54:53.89ID:E0KKnE23
https://github.com/python/peps/commit/7dba60ceea8842f00641893295d22338d99cc958#diff-db417657713fab81e79cb425b07ca55ecb11fc01fc52627e2756d450e8ac6f04R11
PEP 8 modernisation

ここで色々変わっとるね
54デフォルトの名無しさん
垢版 |
2022/09/20(火) 08:50:13.39ID:2fXkGtCj
率直に申し上げると設計が間違ってる
2022/09/20(火) 17:23:28.05ID:2jStgl9j
aiohttpのsession.get()ってなんで、async with で書くのでしょうか?
単に response = await session.get()
でもよいような気がするのですが、何か必要な後処理があるのですか?
56デフォルトの名無しさん
垢版 |
2022/09/21(水) 06:21:14.49ID:Zz0+MRiM
if( !(10 <= n && n <= 20) ){}
pythonで↑の条件作るにはどう記述すればいいですか?

if not 10 <= n and n <= 20 だと違う条件になるよね?
2022/09/21(水) 06:57:53.80ID:1qKIyrZW
ド・モルガンの法則を使う時がついに来た!
2022/09/21(水) 07:09:14.26ID:757dNGj4
>>56
素直に
if not (10 <= n and n <= 20)
だとダメなの?
Python だと
if not (10 <= n <= 20)
でもいける
括弧を使うことはまかりならんとご先祖様に言われてるなら>>57の言うようにド・モルガン使って
if n < 10 or 20 < n
でいいかと
2022/09/21(水) 08:50:12.50ID:Zz0+MRiM
>>58
普通に()でくくれるんですね
pythonのifやforは()使わないのでそっちに意識引っ張られてました
ありがとうございます。
60デフォルトの名無しさん
垢版 |
2022/09/21(水) 09:51:53.99ID:OzlWXNmH
>>56
10<=n and n<=20は
10 <= n <= 20 でもおk
61デフォルトの名無しさん
垢版 |
2022/09/21(水) 18:14:53.47ID:E8IgYMeH
>>58
if 20 < n < 10: まで進化すると嬉しいな
62デフォルトの名無しさん
垢版 |
2022/09/23(金) 13:36:08.56ID:esyqbAqH
https://www.youtube.com/watch?v=bpVmMlUgPJM
63デフォルトの名無しさん
垢版 |
2022/09/24(土) 15:30:33.33ID:lPRg1Z9G
seleniumでのスクレイピングの処理を書いたpythonファイル1.py、2.py、3.py、4.pyを5.pyに下記の記載をして、
exec(open("1.py").read())
exec(open("2.py").read())
exec(open("3.py").read())
exec(open("4.py").read())
の形で順に処理を行っているのですが、この処理をマルチプロセスを使用して並列処理ってですか?

1.py〜4.pyはそれぞれ別のサイトからクローリングする内容で並列処理をしても過アクセスにならない状態です。
2022/09/24(土) 16:27:08.25ID:H5y6eeKG
なんの環境か知らんけどっですか
python 1.py &
python 2.py &
2022/09/24(土) 19:57:00.61ID:8t4kL4/n
微妙にくせがあるけどmultiprocessing使うとか
https://ideone.com/jC3U5x
2022/09/24(土) 21:07:38.32ID:xde+IjsE
独立プログラムならxargs -Pのが簡単だし柔軟
2022/09/24(土) 21:22:53.50ID:eArEwjby
os.startfile()
2022/09/24(土) 21:48:49.63ID:lPRg1Z9G
>>63
やってみたい内容はseleniumをマルチプロセス?で並行処理したいです。

1.pyはamazonをスクレイピングする内容で、2.pyはビックカメラを、3.pyはヨドバシを、4.pyは楽天をスクレイピングする内容になってます。

5.pyを起動すると1.pyから4.py順に処理するかたちとなってます。

現状
1.py処理開始
↓1時間で処理完了
2.py処理開始
↓1時間で処理完了
3.py処理開始
↓1時間で処理完了
4.py処理開始
↓1時間で処理完了
合計4時間で処理終了


やりたいこと
1.py~4.pyを同時に処理開始
↓1時間で処理完了
合計1時間で処理終了
2022/09/24(土) 22:46:02.65ID:8t4kL4/n
なんの環境か知らんけどって書かれているように
まずなんの環境か書いたほうがええよ
2022/09/25(日) 01:04:37.22ID:owlv0jBA
シェルスクリプトとかDOSバッチファイルとかPowershellとかで、Pythonの外で並列に立ち上げる感じやね
2022/09/29(木) 19:42:10.32ID:M7Fv3BQn
過疎ってんな
72デフォルトの名無しさん
垢版 |
2022/09/29(木) 19:58:43.90ID:2clVMJp5
Pythonでもsubprocess.Popenでできるみたいよ

https://qiita.com/desertfox_i/items/dbd6fd390f6db13fd3e4
2022/09/29(木) 21:33:42.74ID:pwfwLFeH
vscodeでjupyterの拡張機能いれて使ってたんだけど

from bs4 import BeautifulSoup
これを書くと
ModuleNotFoundError: No module named 'bs4'
となってエラーになる
普通に.pyファイル内で書いて実行するのはエラー起きないから、jupyterのなんやかんやがおかしいんだろうけどよくわからない
2022/09/29(木) 21:40:33.62ID:pwfwLFeH
すまん解決した
jupyterの拡張機能入れると2つの環境ができるっぽい
jupyter上で普通にコードを打つみたいにpip listを実行すればjupyterでの外部ライブラリのインストール状況がわかるんだな
そっち見たらBeautifulSoup4が欠けてた
2022/09/30(金) 15:18:46.35ID:SCTplp27
公式Python+PyCharm(ともに最新)を使っていて、PyCharmでF8キーでステップ実行をしてると、
ディスプレイがスリープモードになって、ディスプレイをOFF/ONしないと画面が復活しない現象が出てる。
ディスプレイはFHDと4Kのマルチで4K側がOFFになってしまう。
pythonのスクリプトはseleniumでChromeを動かすもので、Windowsのシステムをいじるものではないし、
イベントビューアーには何も出ない。
これってどこの悪いんだろう?
ビデオカード?ディスプレイ?PyCharm?
ディスプレイはHPの激安4Kの「HP V28 4K」
2022/10/02(日) 18:33:42.92ID:oEzc74vy
Windows上のPythonはどこから実行環境のタイムゾーン情報を取得していますか?
(環境: Windows10 Python 3.8)
素の状態でdatetimeでnative/aware、変換での時刻を取得表示すると以下のようになります
now_native = datetime.now()
-> 2022-10-02 18:14:56.061740 (=実際の日本時間)

now_aware_utc = datetime.now(timezone.utc)
-> 2022-10-02 09:14:56.061740+00:00

now_aware_local = now_aware_utc.astimezone()
-> 2022-10-02 18:14:56.061740+09:00

-----
しかし、下記TZ環境変数を追加すると、上記の値はそれぞれ以下のようになってしまいます
(全部UTCになり、astimezoneでもJSTに戻らない)
os.environ['TZ'] = 'Asia/Tokyo'
-> 2022-10-02 09:15:08.251324
-> 2022-10-02 09:15:08.251324+00:00
-> 2022-10-02 09:15:08.251324+00:00
(python上ではなく、OS側でTZを指定すると、なぜか夏時間分さらにずれます)

TZ無しだと正しく判別できている点と、TZありだとおかしくなる原因が知りたいです。
2022/10/02(日) 19:03:33.06ID:6gm07/Z2
ドキュメントによるとその形式はUNIX系だけなんじゃね?
"GMT+9"とかしてみれば
78デフォルトの名無しさん
垢版 |
2022/10/02(日) 19:11:31.40ID:QRKSlI6k
pytzが必要なんじゃない?

https://qiita.com/suzuki-navi/items/9ed7670aa4a93cf021d2
2022/10/02(日) 19:33:13.30ID:oEzc74vy
ありがとうございます。
環境変数が TZ=GMT-9 や TZ=JST-9 にしてみたところ正しく動きました(+9だとずれました)

なぜAsia/Tokyoの設定を書いたかと言いますと、
Google Firestoreにnativeなdatetime値をフィールドにセットすると、自動的にfirestoreのtimestamp型で保存されますが、
Asia/Tokyoでないと時刻がずれて保存されてしまいした。
ただ、よく確認したらTZ=Asia/Tokyoでも夏時間の+1時間ずれて保存されてしまっているようだったので、
素直にawareなdatetimeか、unixtime値で統一しようかと思います。
できれば、ローカル内ではタイムゾーン意識無し(datetimeもnative)で時刻を扱いたかったのですが。
2022/10/03(月) 11:21:26.86ID:BGisZcin
自分の使ってる環境やOS以外のOSの存在を想定しないタイプの質問者は多い
2022/10/03(月) 11:24:07.67ID:BGisZcin
>>75
PC(やノートPC)本体のF8機能は疑わないの?
2022/10/03(月) 11:27:44.02ID:BGisZcin
>>79
自分はログインするすべてのユーザーで起動時に TZ=JST-9 で動く様にしてる
まかせっきりにするより安定するから

>>78
pytz 便利だよね
2022/10/05(水) 20:07:09.37ID:0zm+Esby
(2^((2^(111-1))-1))*(2-(2^-2147483536))

https://ideone.com/3sxXF1

3.724173892452932703847578592653741500670543217015032981203746860583934456368392810496137951064109136E+390759275202710585594223439217007
になったんですが、誰か検算していただけないでしょうか?

なにしろ

(2^((2^(115-1))-1))*(2-(2^-4294967180))

https://ideone.com/MDO46W

1.369238871792785393062417227660788996255177387212550321383285600970027973012269329384152209543458491E+6252148403243369369507575027472121
誤差を発見したので。
2022/10/05(水) 20:11:20.53ID:uckusxLZ
octaveでも使えば
もしくはラズパイでmathematica
2022/10/05(水) 20:16:15.69ID:0zm+Esby
ちなみに
(2^((2^(23-1))-1))*(2-(2^-488))
の時点でウルフラム大先生には誤差が出る。
https://ja.wolframalpha.com/input?i=%282%5E%28%282%5E%2823-1%29%29-1%29%29*%282-%282%5E-488%29%29
10^(10^6.101269676953259)

正確には
10^(10^6.101269676953261)
2022/10/05(水) 20:57:07.65ID:0zm+Esby
これも確認お願いしたい。

log10(log10((2^((2^(115-1))-1))*(2-(2^-4294967180))))
https://ideone.com/jJgRf9
33.79602927803953145109997858464656262695562002580878769896892674125907270351639335872189806561303658

ウルフラム大先生は
(2^((2^(115-1))-1))*(2-(2^-4294967180))
https://ja.wolframalpha.com/input?i=%282%5E%28%282%5E%28115-1%29%29-1%29%29*%282-%282%5E-4294967180%29%29
10^(10^33.79602927803952)

と答えるが・・・。
87デフォルトの名無しさん
垢版 |
2022/10/07(金) 12:37:25.78ID:d4ub3t4L
IEEE 754
GMP
MPIR
2022/10/08(土) 17:57:13.27ID:qEj00saR
>>83
mpmathをVSCodeにインストールして計算した結果、問題なかった。

しかしVSCodeでmpmathを使う場合、いちいちコンソールでpythonと入力し、
1行ずつ実行している。
普通にpythonのソースを実行するみたいにできないのでしょうか?
2022/10/08(土) 18:15:23.92ID:UY8pCVsr
>>88
コマンドパレットで
python
っていれてみ
あと使う言語の機能拡張の説明くらいは読んどこ
ぜんぶvscodeの話やけどな
2022/10/08(土) 18:27:23.49ID:qEj00saR
>>89
ありがとう。「選択範囲を実行」で実行できるみたいだけどまだ不便だな。
91デフォルトの名無しさん
垢版 |
2022/10/09(日) 17:22:36.55ID:4KZMQjJb
psycopg2とpandasについて質問です。
質問1
下記のコードにて5日前から今日までのデータを取得したいのですが、
エラーが出てしまいます。何か方法を教えてください。

↓エラー
指定した名称と引数の型に合う演算子がありません。
明示的な型キャストが必要かもしれません。

conn = psycopg2.connect('host=localhost port=5432 dbname=situmon user=situmon password=situmon')
c = conn.cursor()
kakuninbi = datetime.date.today()-datetime.timedelta(days=5)
df = pd.read_sql(sql=f'SELECT "date" FROM situmon.situmondb2 WHERE "date">{kakuninbi};', con=conn)

dateに入っているデータは前日とかにdatetime.date.today()で取得した日付を入れてます。
テーブル作成時のコードは下記です。
c.execute(f'''
CREATE TABLE IF NOT EXISTS amazon."amazon_item_info"(
"date" date,
"JAN" text
)
''')
質問2
conn = psycopg2.connect('host=localhost port=5432 dbname=situmon user=situmon password=situmon')
c = conn.cursor()
df = pd.read_sql(sql='SELECT "JAN" FROM situmon.situmondb2 WHERE NOT "JAN">none;', con=conn)
列"none"は存在しません

"JAN"には文字列で13桁の数字か"none"が文字列で入ってます。

何か取得できる方法があれば教えてください。
92デフォルトの名無しさん
垢版 |
2022/10/09(日) 17:24:47.27ID:4KZMQjJb
(一部誤りがあったので修正です)
psycopg2とpandasについて質問です。
質問1
下記のコードにて5日前から今日までのデータを取得したいのですが、
エラーが出てしまいます。何か方法を教えてください。

↓エラー
指定した名称と引数の型に合う演算子がありません。
明示的な型キャストが必要かもしれません。

conn = psycopg2.connect('host=localhost port=5432 dbname=situmon user=situmon password=situmon')
c = conn.cursor()
kakuninbi = datetime.date.today()-datetime.timedelta(days=5)
df = pd.read_sql(sql=f'SELECT "date" FROM situmon.situmondb2 WHERE "date">{kakuninbi};', con=conn)

dateに入っているデータは前日とかにdatetime.date.today()で取得した日付を入れてます。
テーブル作成時のコードは下記です。
c.execute('''
CREATE TABLE IF NOT EXISTS situmon.situmondb2(
"date" date,
"JAN" text
)
''')
質問2
conn = psycopg2.connect('host=localhost port=5432 dbname=situmon user=situmon password=situmon')
c = conn.cursor()
df = pd.read_sql(sql='SELECT "JAN" FROM situmon.situmondb2 WHERE NOT "JAN">none;', con=conn)
列"none"は存在しません

"JAN"には文字列で13桁の数字か"none"が文字列で入ってます。

何か取得できる方法があれば教えてください。
2022/10/09(日) 22:28:02.26ID:8IIgp7pF
>>92
2つともクウォートの問題っぽいね
SQLをf-stringで組み立てるのはやめてプレースホルダーを使おう

pd.read_sql(sql='SELECT "date" FROM situmondb2 WHERE "date" > %s;', con=conn, params=(kakuninbi,))
pd.read_sql(sql='SELECT "JAN" FROM situmondb2 WHERE NOT "JAN" > %s;', con=conn, params=("none",))
2022/10/09(日) 22:54:48.71ID:t9JKJStV
>>88
VSCode の拡張機能・Code Runner で出来ないの?

右クリックメニューから、ファイル全体または選択したコード片を実行できる
95デフォルトの名無しさん
垢版 |
2022/10/10(月) 05:06:49.79ID:t2iZA/Es
>>91
エラーの内容も出てるのに、これでもわからないような人はプログラミングはやめた方がいいよ
96デフォルトの名無しさん
垢版 |
2022/10/10(月) 07:14:12.18ID:ST1YeHmA
>>93
ありがとうございます
いけました!
2022/10/10(月) 09:35:34.12ID:3yLYwmxt
>>93>>95の対応レベルの違いに鼻水噴いた
エラーメッセージって表面的なことしか指摘してくれないから
それ見て根本原因を見つけるのにはそれなりの経験とスキルが要るのよね
2022/10/10(月) 12:51:10.90ID:gz0/2IVP
なぜ、SELECT "JAN", WHERE NOT "JAN" と、列名を"〜"で囲むの?
囲む必要あるの?

'〜'は、文字列リテラルだけど、
"〜"は、かなりややこしい

>WHERE NOT "JAN">none
これは、WHERE NOT JAN > 'none' でしょ。
つまり、WHERE JAN < 'none' じゃないの?

'none' ではないのは、
WHERE JAN != 'none'
WHERE JAN <> 'none'

本当は、'none' よりも、NULL を使えば良かった

プロは、Ruby on Rails みたいなO/R マッパー・Place Holder を使う。
文字列を連結して使うと、SQL インジェクションされるので超危険
2022/10/10(月) 14:04:34.11ID:sJsMwDUU
>>98
> なぜ、SELECT "JAN", WHERE NOT "JAN" と、列名を"~"で囲むの?
列名(に限らず表名やビュー名等の識別子)は " " で囲むと空白とかを含む列名を指定できる、あと英字でも大文字小文字を区別するようになる
一昔前は漢字等でも囲む必要があったものもある
2022/10/10(月) 16:55:38.18ID:Xq5E773z
>>98
囲むのはdateが予約語でJANが大文字だから
JANをダブルクォーテーションで囲まないとpostgresは全部小文字に変換する
101デフォルトの名無しさん
垢版 |
2022/10/10(月) 18:54:20.90ID:EzlpT+F/
このスレにも終わったRubyを持ち出すキチガイがいるのか
2022/10/11(火) 08:21:30.06ID:1t/lVmf9
https://www.youtube.com/watch?v=pdy3nh1tn6I&t=2439s
この動画の49:00~辺りで、while loopの最後に return -1 と記述している箇所があります。
return -1 にはどういう意味があるのでしょうか?

動画内で解説がなく、コメント欄に寄せられている質問にも回答が無い状態です。
お教えいただけると幸いです。
2022/10/11(火) 09:25:47.83ID:yOX375hU
>>102
動画見なきゃいけないのか・・・
URLは40分で、問題の箇所は49分とな・・・
しかも動画自体は3時間オーバーか・・・

ソースコードは転記してくれたらいいなぁ
https://ideone.com/oFTFLN

二分探索での結果、見つからなかったを表すために-1を返してるんじゃないかな
英語聞き取れないので違うかもだけど

あとどうでもいいけど、endの意味が途中から変わっててバグってる
2022/10/11(火) 09:35:13.11ID:1t/lVmf9
>>103
回答ありがとうございます。また、お手数かけてすみません。
whileループと return -1 は経験者なら分かる使い方なのかと思ってコードを省略してしまいました。
以後気をつけます。
2022/10/11(火) 14:24:32.17ID:17+/w9Hg
作者は、正常終了を0 で、異常終了を-1 にしたのかも

よく見かける定義
2022/10/11(火) 15:07:01.27ID:+IdMirEn
>>105
なに言ってるんだよw
見つかったらlistの添え字
見つからなかったら-1
せっかく>>103が書き写してくれてるんだからコード見ろよ
2022/10/12(水) 23:04:39.44ID:UENmAu+H
任意の数の要素を持つリストをある数で初期化して生成したいんだけど
例えば、[-1, -1, -1, -1,-1]みたいなのを生成しようと思ったら
リスト内包表記で[-1 for i in range(5)]とやるのが一番シンプルかな?
2022/10/12(水) 23:11:27.62ID:RrsSoprO
数値にようにimmutableなら [-1] * 5 でもいいのでは
2022/10/12(水) 23:29:22.91ID:UENmAu+H
>>108
あ、その手があったかマジTHX
てか、リストの演算とか基本だよな。なんでそれ見逃してたんやろ
110デフォルトの名無しさん
垢版 |
2022/10/13(木) 11:23:55.91ID:mnydj+83
多次元リスト作る時に問題があるから内包表記を使ってる内に、一次元配列でも使うようになった
とか
111デフォルトの名無しさん
垢版 |
2022/10/13(木) 14:14:04.52ID:mnydj+83
リスト
112デフォルトの名無しさん
垢版 |
2022/10/16(日) 00:35:10.66ID:IrphczHF
seleniumで取得したhtmlからlxmlでスクレイピングしているのですが上手くいきません。
下記のような箇所があった場合に送料のみをスクレイピングしたいです。
<div class="_4XOXks36lqAR"><div class="Wc9xhLyHJ7_1 _9u8OtToEB0ql"><p class="_2DVqcNMgVZ15"><span class="_1yF7AMZ2DzcC">550</span><span class="_5apwL7hbOTJ8">円</span><span class="_2QEz7MA1vq6o">+送料550円</span></p></div></div>
<div class="_4XOXks36lqAR"><div class="Wc9xhLyHJ7_1 _9u8OtToEB0ql"><p class="_2DVqcNMgVZ15"><span class="_1yF7AMZ2DzcC">650</span><span class="_5apwL7hbOTJ8">円</span></p></div></div>
<div class="_4XOXks36lqAR"><div class="Wc9xhLyHJ7_1 _9u8OtToEB0ql"><p class="_2DVqcNMgVZ15"><span class="_1yF7AMZ2DzcC">740</span><span class="_5apwL7hbOTJ8">円</span><span class="zmh60VOMQOpy">送料無料</span></p></div></div>

souryou = [souryou.text_content() for souryou in html.cssselect('p._2DVqcNMgVZ15 > span:nth-child(3)')]
今得られる結果
['+送料550円', '送料無料']
欲しい結果
['+送料550円', '送料無料', '送料無料']

送料の記載がない箇所には送料無料を代入して取得したいのですが、
何かいい方法ありませんか?
2022/10/16(日) 08:06:17.10ID:P3u/guM2
内包表記せずにループで中身確認しながらリストにappendで追加で良さそう
今は2番目がスキップされてる状態だよね
2022/10/16(日) 08:08:28.26ID:P3u/guM2
ああごめん、取得した段階で2個になってるのか
115デフォルトの名無しさん
垢版 |
2022/10/16(日) 08:18:07.27ID:sGqT+v7u
>>112
価格のテキスト全体を取ってそれを加工するとか

kakaku = [p.text_content().strip() for p in html.cssselect('p._2DVqcNMgVZ15')]
# ['550円+送料550円', '650円', '740円送料無料']
souryou = [re.search(r"送料.+", s) for s in kakaku]
souryou = [s.group(0) if s else "送料無料" for s in souryou]
# ['送料550円', '送料無料', '送料無料']

あらかじめ「送料無料」のSPAN要素を追加しておくとか

for p in html.cssselect('p._2DVqcNMgVZ15'):
    lxml.etree.SubElement(p, "span").text = "送料無料"
souryou = [souryou.text_content() for souryou in html.cssselect('p._2DVqcNMgVZ15 > span:nth-child(3)')]
# ['+送料550円', '送料無料', '送料無料']
2022/10/16(日) 12:08:00.45ID:IrphczHF
>>115
これが1番良さそうかも
ちょっとやってみます
2022/10/19(水) 20:21:20.98ID:fx6wlbL4
asyncio.Task使ってます
Task側でキャンセルされたか判断したいのですが
cancel()を呼んでもcancelled()はTrueにはなりません。
asyncio.sleepを呼んでいるとCancelledErrorが発生するのでこれで判断するってことでんでしょうか
2022/10/19(水) 21:10:32.26ID:7AGdww0q
>>117
https://docs.python.org/ja/3/library/asyncio-task.html
そのまんまのこと書いてるやん
2022/10/20(木) 05:01:50.81ID:WKKXn2E+
>>117
3.6以前のマニュアルだとコードサンプルがない代わりに補足されているけど
> このメソッドが呼び出された直後は cancelled() は True を返しません (タスクがすでにキャンセル済みの場合は除く)。
> ラップされたコルーチンが CancelledError で中止されたとき、タスクは (cancel() が呼ばれなかった場合でも) キャンセル済みとマークされます。

つまる所cancel()はするというか要求なので、対象のタスクに制御が移らないと反映されない
Taskの側でcancelされたか判断するならawaitしてる箇所でCancelledErrorの捕捉だろう
外側でもcancel()後は何かしらawaitする、対象のtaskをawaitした場合はCancelledErrorが発生する
協調的マルチタスクなので何れにしても譲り合いの精神
2022/10/20(木) 21:49:43.09ID:USlJAvnt
listA = "AAABBBCCC","DDDEEEFFF"
こういうリストからそれぞれを最初の3文字だけ取る場合っていちいち
listA[0][:3]
listA[1][:3]
ってやらないとだめなの? つまりfor文内でやるかんじ?
一括でできる方法あるの?
121デフォルトの名無しさん
垢版 |
2022/10/20(木) 22:30:56.38ID:pNhy2w5w
>>120

> listA = "AAABBBCCC","DDDEEEFFF"
リストじゃなくてタプル

https://ideone.com/4PpCrp
高階関数とか内包表記使える
2022/10/21(金) 18:18:40.16ID:KJJV+zwc
>>121
ありがとう
123デフォルトの名無しさん
垢版 |
2022/10/22(土) 15:39:57.98ID:qZ/iI25s
プログラミングが長い為ここには書けませんでした。
7.gigafile.nu/1029-d987ca4deb3deafdb0df9198c08c32e58
上記のワードで書かれてますが
引用はコチラ。
rapids-ai/200-000x-faster-in-the-field-of-weather-analysis-with-cuda-python-numba-6ca03a694294
どうしてもエラーがでてしまいます。
お願いします。偉い人!
2022/10/25(火) 09:55:18.08ID:PmE1kXZ/
特定のサイトからデータを取得していたのですが、urlに()が入りました。
%28,%29 でエンコードしてもアクセスできません。何か方法はありますでしょうか。

http://a.com/(d(aaaa))/bbbbb

のようなurlです。

よろしくお願いします。
2022/10/25(火) 16:07:38.03ID:7A2ptHo2
どうやってアクセスしてるのかわからんけど
URLのエンコードなんて大概透過的に行われるので出来ないのは他の原因
126デフォルトの名無しさん
垢版 |
2022/10/26(水) 09:11:50.60ID:j7HiGILU
CUDA Python (Numba) を使用して気象分析の分野で 200,000 倍高速化する
medium.com/rapids-ai/200-000x-faster-in-the-field-of-weather-analysis-with-cuda-python-numba-6ca03a694294

cudaのやり方がわかりません。

この20万倍の高速化をやりたい!
127デフォルトの名無しさん
垢版 |
2022/10/26(水) 10:06:30.77ID:wzTCBV7y
>>126
めちゃ簡単そうじゃん、今度やってみよ。
具体的にどこがわからないの?
CUDAカーネル書かなきゃいけないんだったら理解できないってのもわかるけど。
2022/10/26(水) 17:01:49.64ID:UGwAmNJn
>>125
ありがとうございます。
括弧の部分を %28b%28bbbb%29%29 とエンコードしてみたのですが駄目でした。

subprocess.Popen([http://a.com/%28b%28bbbb%29%29]/)

サイトの開き方に問題があるもでしょうか?
2022/10/27(木) 00:12:49.83ID:fsnzTjBD
自分が書いたコードを、社会人の友人に批評してもらったら、
グローバル変数はあまり使わない方がいい(衝突する可能性があるから)
処理をぐるっとdefで囲んだ方がいい
と指摘されたんですが、クラスなどの定義部分も含めて全て囲った方が
いいでしょうか?
2022/10/27(木) 00:18:09.17ID:0CNViBMq
いいえ
131129
垢版 |
2022/10/27(木) 00:26:07.04ID:fsnzTjBD
>>130
レスありがとうございます

どんな感じで書くのがよいでしょうか?
2022/10/27(木) 00:30:17.64ID:0CNViBMq
よく知らんけど関数とクラスの集まりにして
トップレベルではmain()一発にすればいいんじゃない
2022/10/27(木) 00:50:38.01ID:HY0JJRbT
>>129
一人で趣味で書いてるんでしょ?
なら気にしなくてよい
自分の経験上、一人で書くコードで変数の衝突はあり得ない
自然と衝突しない名前を付けるものよ
134デフォルトの名無しさん
垢版 |
2022/10/27(木) 14:28:54.97ID:dynbemGf
pythonでbluetooth通信を使おうとしたら、pybluezっていうライブラリが必要みたいなんだけど、GPLライセンスなので気軽に使えない...

Web Bluetooth APIってやつをpythonから呼び出す方法とかって無いですか?
2022/10/27(木) 16:57:06.02ID:B91uqICs
もちろん無い
言語さえPythonならいいんだったらPyScript使ってブラウザで動かせばWeb Bluetooth使えるだろうけど、
ブラウザで動かす時点で当然JavaScriptの知識は必須だから諦めて普通にJavaScript書いたほうが遥かに簡単で手っ取り早いよ
136デフォルトの名無しさん
垢版 |
2022/10/27(木) 17:19:39.60ID:bJOX0XaJ
以下の4点を使わずに、PCとIoT機器で通信する縛りゲーがあったとしたら、どんな通信方法があると思いますか?

・クラウド
・Bluetooth
・Wi-Fiによるローカルネットワーク接続
・有線ケーブル
137131
垢版 |
2022/10/27(木) 17:35:29.25ID:fsnzTjBD
>>132
ありがとうございます

メインの処理を大きな関数にして、その前にクラスや関数を宣言しておくって
表記法は良くないですか?

>>133
ありがとうございます

今は確かに趣味レベルですが、後々仕事にしたいと思ってます
なので今から本来の記述法を知っておきたいなと思いました
2022/10/27(木) 18:41:13.82ID:2LX/1yOU
そもそも、Pythonに真の意味でのグローバル変数は存在せず、衝突が問題になることはチーム開発でもまずない。
トップレベル(何にも囲まれていないという意味)で宣言された変数はモジュール変数といって、
そのファイル(モジュール)の外からアクセスする際には明示的にインポートするか、モジュール名で修飾する必要がある。
実際の開発ではプログラムを多数のモジュールに分割して作っていくため、衝突は心配しなくてよい。
でトップレベルの変数の問題は衝突よりも状態が共有されてしまうことにあって、その辺はPython云々というよりオブジェクト指向の基本を学んできたほうがいい。
2022/10/27(木) 20:02:50.71ID:JZO81t2C
グローバル変数用のモジュール作ってg.でインポートすると便利
140137
垢版 |
2022/10/28(金) 00:18:09.86ID:wfZLZF+J
>>138-139
レスありがとうございます
参考にさせて頂きます
2022/10/28(金) 00:21:30.46ID:Rl5QKwW8
>>136
テレビのリモコンみたいな光通信とか、
任天堂みたいな赤外線リモコンとか

テレビのリモコンを作る記事は多い
2022/10/28(金) 00:25:04.49ID:IFcgEfiD
マイクもあるな
143デフォルトの名無しさん
垢版 |
2022/10/28(金) 01:33:50.96ID:/BO79IyH
>>136
QRコード表示してカメラで読み取る
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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