Pythonのお勉強 Part68

■ このスレッドは過去ログ倉庫に格納されています
2022/09/15(木) 18:52:26.67ID:VqLViKoX0
!extend:default:vvvvv:1000:1024
!extend:default:vvvvv:1000:1024
↑スレ立てる毎に減るので、減ってたら3つに補充すること。

・当スレにRubyのソースコード類を書くことを禁ず
・Ruby等、Pythonではないプログラミング言語での回答類・質問を書くのも禁止
・「Ruby では」「Rubyでは」「Rails」正規表現→「^クソチョンw$」をNGワード登録推奨
・エラーを解決したいときは、かならず
 エラー文(勝手に省略orスクショうp等の横着禁止)と
 おま環(Pythonのバージョン番号+OS名とバージョン+IDE名)を書け。

★Pythonのソースコードを5ちゃんに直貼はインデントが崩壊するので、
  ↓等のコードうp用サイトに貼ってきてくだしあ。(スクリーンショットをうpる「横着」禁止)
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定がCなので、Pythonするには言語種選択ボタン押下がピコ手間かも。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Pythonオフィシャルサイト http://www.python.org/
◇Pythonドキュメント https://docs.python.org/ja/3/
◇まとめwiki ttp://python.rdy.jp/

●関連スレ● 自称初心者は↓へ
【まず1嫁】くだすれPython(超初心者用) その57
http://mevius.5ch.net/test/read.cgi/tech/1653225908/

〇前スレ〇
Pythonのお勉強 Part67
https://mevius.5ch.net/test/read.cgi/tech/1653540315/

次スレの建立は>>985が挑戦する。(980通過して24h後も落ちなくなった)
### END of TEMPLATE ### ​
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
103デフォルトの名無しさん (ワッチョイ 3733-6qsd)
垢版 |
2022/09/24(土) 11:18:28.18ID:4ctEaw520
君は悪くない、anacondaも悪くない
anacondaを進める入門的な書籍やサイトが悪い
2022/09/24(土) 11:29:33.35ID:8t4kL4/n0
pipでバイナリを配布できなかった時代ならまだしも、今そんな時代じゃないしな~
2022/09/24(土) 11:34:58.91ID:P3HsQQA/0
何かのツールをインストールするとpythonも一緒にインストールされるのはよくある
python2だったりもする
大抵は、自分用のバイナリを自分で使うだけなので迷惑はかけないけど、
行儀の悪い奴もいる
2022/09/24(土) 12:01:38.29ID:52DloiQc0
>>98
さすがにそれはアホすぎる
107デフォルトの名無しさん (ワッチョイ 372c-nvXy)
垢版 |
2022/09/24(土) 12:23:45.45ID:gdtERKOB0
未だにpython事始めで検索すると
無責任な入門サイトの「anaconda入れとけ☆」 ばっかり
いやべつにいいんだけどさあanacondaでも。オールインワンで便利なのも分かるけど
2022/09/24(土) 13:25:40.55ID:mEJjKZc00
anacondaでもpipでも両方使えばいいジャマイカ
2022/09/24(土) 13:33:00.23ID:+zHy6u5Kr
condaのコマンドで新しい環境作れるようにしたらスタンドアロンのpythonが外れた記憶ある
2022/09/24(土) 15:33:58.69ID:BGgCMaIl0
俺も初心者の頃はアナコンダ入れてた。
けど後から無駄も多く必要ないことがわかったのでアンインストールした。
pythonとVSCodeあれば事足りる。
2022/09/24(土) 17:32:16.78ID:nYu0cH9J0
ファイル名に使えない文字を全角に変換するコードってこんなに長くなるものなんですか?
https://qiita.com/kusunamisuna/items/a32679874afedc032158

name_ng = ["/","\",":","*","?","<",">","|"]
こんな感じでリストに入れてfor文の中で replace で置換すれば良いんじゃないかと思ったけど、リストにする段階でエラーになります

上記のURLの記述が最適解?
簡略化された書き方があったら教えてほしいです。
2022/09/24(土) 17:37:12.69ID:xsaou6hs
a=True
b=True

aかつbがTrue、それ以外の全て
の条件って
if not (a and b): でよかったっけ・・?
2022/09/24(土) 18:00:41.70ID:thjqxE2JM
>>111
translate使えばforすらいらない
2022/09/24(土) 18:29:31.09ID:LDtPUxey0
>>111
その記事が最適かどうかは別問題として、まず0x5cをちゃんとエスケープして、あなたの考えを動くコードとして完成させよう
その上で、記事のコードと分かりやすさや速度を気の済むまで比較してみればよい
2022/09/24(土) 19:22:50.96ID:nYu0cH9J0
>>113
調べて試してみます

>>114
そもそも ”\” は文字列としても単体では使うことができない感じですかね?
知らなかったです。教えてくれてありがとうございます
116デフォルトの名無しさん (アウアウウー Sa43-a1Je)
垢版 |
2022/09/24(土) 20:25:24.85ID:7pBAspe1a
r'hoge\hoge'
117デフォルトの名無しさん (ワッチョイ 127d-nvXy)
垢版 |
2022/09/25(日) 00:00:20.77ID:TfTFVrn20
>>112
if all([a, b]):
else
2022/09/25(日) 00:30:59.06ID:wq9M03AC0
allとanyは積極的に使おう
フラグを別に持つとか途中で抜けてループ変数を見るとか、
何でレガシーな言語はそれで満足してたのか判らん
119デフォルトの名無しさん (ワッチョイ b302-QcAE)
垢版 |
2022/09/25(日) 02:03:20.35ID:ouzeiwB30
今日からPython始めたんだけど、エラーが出て動かなくて悩んでたらインデントが原因だったw
調べたらインデント自体プログラム構造的に意味を持ってたんだな。。。
2022/09/25(日) 05:32:21.54ID:WCcUyzUQ0
少しコードが長くなってきたので、関数を定義してみようと思ったのですが
関数を使うくらいなら、最初からclassとmethodでやった方が後々便利ですかね?

それから現段階ではまだinstance変数を使うかどうかは不明ですが
classの最初に__init__は決まり文句として書いておいて良いのでしょうか?
仮に全く使わなかった場合にバグの元になったりするのでしょうか?
121デフォルトの名無しさん (ワッチョイ 372c-nvXy)
垢版 |
2022/09/25(日) 05:38:14.60ID:iEmY5l+s0
そのレベルならまず関数に慣れよう
classはそのあと
2022/09/25(日) 05:54:55.13ID:WCcUyzUQ0
了解しました
2022/09/25(日) 11:02:47.56ID:sQFmQmse0
classを使うほうが常に優れていると思ってるなら認識を改めたほうがいいよ。
classと関数両方使えるがpythonのメリット。
標準ライブラリだって両方共存してるのにどちらかを捨てるなんてもったいない
2022/09/25(日) 11:22:42.32ID:Sdaj2srm0
自己満だからといっていつも意識的にそれらを考えていかなければより良い設計はできないのかもしれない
2022/09/25(日) 11:43:23.68ID:rlnwElI30
クラスはメンバ変数にselfが強制だからコードが冗長になって嫌だわ
126デフォルトの名無しさん (オッペケ Sr47-d9EM)
垢版 |
2022/09/25(日) 12:37:00.29ID:uj3dGGMEr
>>125
インデントも深くなるし、状態持つ必要が無ければモジュール化で十分よな
2022/09/25(日) 12:49:19.19ID:wq9M03AC0
大仰なクラスを作ろうとするから
インスタンス変数が2つだけ、みたいなのでも十分役立つ
128デフォルトの名無しさん (ワッチョイ 1610-d9EM)
垢版 |
2022/09/25(日) 17:18:10.55ID:hs4ndUhv0
>>127
それくらいならNamedTupleでも良いかな
129デフォルトの名無しさん (ワッチョイ 372c-nvXy)
垢版 |
2022/09/25(日) 17:41:46.06ID:iEmY5l+s0
dataclassええで
2022/09/25(日) 17:54:34.18ID:AFTbeWYX0
クラスは実装の詳細を見せたくない時に限る
2022/09/26(月) 07:24:51.77ID:ciNDFZ6I0
クラス名をclass Hoge
ファイル名をhoge.py
インポートでimport hoge
インスタンス名何にしようかいつも悩む
??? = hoge.Hoge()
132デフォルトの名無しさん (ワッチョイ 2f97-5djn)
垢版 |
2022/09/26(月) 09:07:29.52ID:P9G+/qqR0
>>81
そもそも[0,1]のときにx[0]を2つ取り出したいのかどうかがよくわからないな
あと、最大(?)は[0,10]じゃないか?
[0,9]のときと[0,10]のときでどう処理を変えたいのかよくわからない
半開区間に含まれる最小最大を取り出したいなら、
for i in [idxs[0], idxs[1] - 1]でいいと思うのだけどこれは嫌?
133デフォルトの名無しさん (ワッチョイ 2f97-5djn)
垢版 |
2022/09/26(月) 09:12:30.59ID:P9G+/qqR0
木構造とかグラフ構造を自作したいなら(間々ある)、
クラスにした方が便利なときある気がするけどな。
get_tree_children(node)とかしだすなら、node.children()の方が名前空間がすっきりしていいし。
実装の詳細を見せたくないかどうかというよりは、関心の分離をしたいかどうかによるような気がするな。

確かにクラス作るまでもないようなことは多いけど。
2022/09/26(月) 20:32:27.38ID:b9hyANFk0
>>128
値が変えられないがな
2022/09/26(月) 23:15:54.08ID:QR+uVx8I0
python 3.9.10

a = (1, 2, 3)
b = a
c = (1, 2, 3)

print(a==b)
print(a is b)
print(a==c)
print(a is c) #True?

なぜ a is c が true になるのでしょうか?
2022/09/26(月) 23:17:59.46ID:QR+uVx8I0
>>135
ideone に貼っときます
https://ideone.com/yVmxfv

なぜでしょうか?
2022/09/26(月) 23:31:03.60ID:b9hyANFk0
a = 1
c = 1
の時と同じ理由
2022/09/26(月) 23:32:02.41ID:Gide+MMY0
>>136
ならない
2022/09/26(月) 23:33:01.37ID:Gide+MMY0
ほらよ
https://i.imgur.com/mESpBvj.jpg
2022/09/26(月) 23:49:19.92ID:eE4Lst2k0
>>139
それREPLでやってるからinterningが効いてないじゃないかな

>>135
Tupleはimmutableだからaとcが同じオブジェクトを指しても問題なくて
Pythonが最適化をした場合はa is cがTrueになるケースがある
「interning」でググってみて

例えばTupleを関数で返すようにすればinterningされずにFalseになると思う
def foo(x):
 return (x, x+1, x+2)

a = foo(1)
c = foo(1)
2022/09/27(火) 00:20:20.92ID:LFY5tutJ0
>>140
ありがとうございます、オプティマイゼーションの余地がある、ということですね、納得しました
142デフォルトの名無しさん (ワッチョイ 2f97-5djn)
垢版 |
2022/09/27(火) 19:02:24.07ID:zjZtbJ3M0
a is cが真になるかはかなりケースバイケースな気がするし、
中身を比較したいんだったら使うべきじゃないね

本当に同じtupleインスタンスかどうかを確認したいときだけにすべき
143デフォルトの名無しさん (ワッチョイ 3733-tX/F)
垢版 |
2022/09/27(火) 22:33:08.85ID:3OHfLHhN0
tupleだけの話ではなくてどの型でも同じだけどね
例えば文字列とか
2022/09/27(火) 23:35:04.66ID:tKd9rAjb
n=12345.67

小数点以下が何桁あるのか調べたいのですが
len(str(n).split(".")[1]) if isinstance(n, float) else 0
こんなんでいいですかね・・?
145デフォルトの名無しさん (ワッチョイ 3733-tX/F)
垢版 |
2022/09/27(火) 23:51:45.87ID:3OHfLHhN0
>>144
https://ideone.com/pSUvOH
146デフォルトの名無しさん (ワッチョイ 1610-DrlT)
垢版 |
2022/09/27(火) 23:53:56.84ID:+joc5Asc0
>>144
誤差で予想外の挙動しそうだからDecimal使う方がいい
2022/09/28(水) 02:27:12.38ID:OOL0jr8Q0
>>144
それだと
n=1.0 -> 1
n=0.00001 -> IndexError
になる

len(format(n,".17f").split(".")[1].rstrip("0"))
後ろのif isinstance(n, float) else 0も不要
n=1.0 -> 0
n=0.00001 -> 5
2022/09/28(水) 09:19:00.77ID:9I9ISsCh
>>145-147
たしかに
0.30000000000000004に対して17得られたのは正解だと思いますが
0.00001で1e-05になっててエラーでました
Decimalかformat使ってみようと思います
ありがとうございました
2022/09/28(水) 10:07:58.97ID:9I9ISsCh
やりたかったことは
受けとった1234.56や0.12345などの固定小数点数に
0.1とかを掛けたり足したりして計算、変形したのを
受け取った固定小数点数の整数部と小数部の数を維持したまま
固定小数点か文字列で処理したかったのですが
改めてやってみるとなんか勝手に桁数が変わってしまいますね・・

1234.56で受け取った場合、1.05を掛けたとき→1296.288ではなく1296.29
0.12345で受け取った場合、1.05を掛けたとき→0.1296225ではなく0.12962
1234で受け取った場合、1.05を掛けたとき→1295.7でもいいし1296でもいいし1296.0でもいい
みたいにしたかったのですが難しい・・
2022/09/28(水) 10:17:26.42ID:9I9ISsCh
from decimal import Decimal
str(Decimal(0.123456))
str(Decimal(0.123456)*Decimal(1.05))
#'0.1296288000000000015945911258'

あれ、そもそも0.123456の小数部の桁数はどうやって知るんだっけ??
てところで詰まってます・・
2022/09/28(水) 11:25:04.93ID:9I9ISsCh
冗長な気がしますがこんな感じにしてみました
何かバグが発生しそうな気がします
from decimal import Decimal
ary=[1234.5,165,0.34,0.0001,0.000001,3.00001,0.1*3,123456]

def f(n):
 s=format(n)
 return int(s.split("-")[1]) if "-" in s else len(s.split(".")[1].rstrip("0")) if "." in s else 0

r=1.05
for n in ary:
 d=f(n)
 c=Decimal(n)*Decimal(r)
 rs=c.quantize(Decimal("0."+("0"*d)))
 print(n,c,d)
 print("-->",rs,"\n")
2022/09/28(水) 11:30:47.23ID:9I9ISsCh
連投すみません 結果です
https://ideone.com/exojEw
2022/09/28(水) 13:38:45.48ID:E42G0/DqM
元々の桁数でroundしたいって感じなのかな
2022/09/28(水) 18:25:19.27ID:OOL0jr8Q0
>>152
format使うの提案したけど使わないほうがよさそう、誤差がでる

f(n): 負数で落ちる
s=str(n).lstrip("-")

c=Decimal(n*r) のところで
n*r で誤差がでる
c=Decimal(str(n)) * Decimal(str(r))

負数対応四捨五入 -0.015 を四捨五入して -0.02
rs=((c > 0) - (c < 0)) * abs(c).quantize(Decimal("0."+("0"*d)), rounding=ROUND_HALF_UP)

-0.015 を四捨五入して -0.01のようにしたい場合
rs=c.quantize(Decimal("0."+("0"*d)), rounding=ROUND_HALF_UP)

四捨五入したいのかよくわからんかった、roundingは好みのオプションでどうぞ
2022/09/28(水) 19:37:21.94ID:9I9ISsCh
>>154
ありがとうございます
やはり至るところで誤差が発生するのですね
四捨五入は今回の用途ではどちらでも良い感じです
せっかくなのでまとめてみました
https://ideone.com/JmTu06
ありがとうございました
2022/09/28(水) 19:42:02.44ID:o0cHd3Tq0
先にIEEE754読んでみては?
誤差に関しての勘所がわかるようになる
157デフォルトの名無しさん (ワッチョイ 2f97-5djn)
垢版 |
2022/09/28(水) 20:32:50.93ID:x5UMfEp40
Pythonに限らず浮動小数点数を使う場合は常に誤差の問題がつきまとう。
0.1というのがすでに二進数ではきっちり表現できない数字なので、有効数字を何桁にするのかというのは実装の段階で決めなくちゃならない。

https://docs.python.org/ja/3/tutorial/floatingpoint.html

正確に表現できるのは、0.5,0.25,0.125...と1を2で割っていった数とその整数倍のみ

0.1は1/(2×5)となり1/5が2進数では循環小数となり浮動小数点数では正確に表せない。

ということを念頭に置いてまず何がやりたいか考えた方がいいよ。

decimalモジュールは便利そうだね。
2022/09/28(水) 23:21:28.71ID:FDPwu/KN0
log2で有効桁数計算出来るでしょ
2022/09/29(木) 00:26:06.29ID:3C3gpnCY0
>>154
どちらの書き方でも
-0.015 を四捨五入したら-0.02だった、すまん
-0.01にしたい場合は自力でなんとかして
2022/09/30(金) 00:55:04.52ID:qun5+YRs0
昔から不思議なんだけど
何で分数で処理しないのかな?
最後に割り算を一回だけすれば
誤差がでないじゃないの
2022/09/30(金) 01:46:32.47ID:0IYvIpx66
掛け算でも足し算でも誤差が出るから
2022/09/30(金) 01:53:32.93ID:sForoGQI0
Pythonは整数側の桁数制限が無いのを利用して高精度にできそう
2022/09/30(金) 02:07:16.16ID:f+ZVHjVVa
>>160
似たような大きさの数字ならその発想もいいけどね
現実はコスパの悪い任意精度の演算が必要になることが多いのでは
2022/09/30(金) 03:11:26.40ID:FkDRVgM50
>>160
つ fractions
2022/09/30(金) 04:56:46.10ID:HxNT59pn0
だから誤差の話するならIEEE754読めよ
2022/09/30(金) 04:57:30.60ID:CfDFJOy00
>>160
昔GCD付きの分数クラス作ったけど
結局はdoubleになったことがある
2022/09/30(金) 05:21:28.14ID:oHn8O8ll0
>>160
四則演算だけならいいけど√とかsin( )とかはどうする?

>>161
掛け算、足し算で誤差がでるケースとは?
2022/09/30(金) 08:01:25.94ID:Gm4+1fgX0
sinとかも内部は四則演算
2022/09/30(金) 09:17:00.10ID:oHn8O8ll0
>>168
近似演算の話されても困るんだがw
2022/09/30(金) 09:23:23.51ID:k91OtGRla
三角関数の近似じゃない演算て
171デフォルトの名無しさん (ワッチョイ 2701-okKg)
垢版 |
2022/09/30(金) 10:05:45.64ID:EsKmogiV0
python chapelについて質問です。
情報があまりないので、チャペルについてお勧めのサイトがあれば教えてほしいです。
2022/09/30(金) 10:38:01.55ID:t/wNXSJY0
クヌースのTAOCP読むといいよ
コンピュータでの数値計算の全てが書かれてる
2022/09/30(金) 13:20:23.85ID:oHn8O8ll0
>>170
sinsin, cos のまま計算するって話だろ
数学不得意か?
2022/09/30(金) 13:47:23.87ID:k91OtGRla
>>173
そんなもん代数的な操作だろ
2022/09/30(金) 13:54:50.47ID:oSg68bQdM
>>160
遅いからだよ
2022/09/30(金) 14:09:07.38ID:oHn8O8ll0
>>174
話は>>160から始まってて途中は代数的な操作で最後に一回だけ演算することで誤差を抑えられるって話な
177デフォルトの名無しさん (ワッチョイ 1610-DrlT)
垢版 |
2022/09/30(金) 16:11:14.18ID:7g2iZKZC0
三角関数は二項演算じゃないから後も先もないだろ
2022/09/30(金) 16:39:44.93ID:du1MSukG0
ここまで有効数字の話なし
2022/09/30(金) 16:40:16.15ID:Gm4+1fgX0
有理数演算に有効数字は関係ない
180デフォルトの名無しさん (ワッチョイ 1610-DrlT)
垢版 |
2022/09/30(金) 17:02:40.52ID:7g2iZKZC0
実は誰も数値計算誤差について知らないのである
2022/09/30(金) 17:36:21.26ID:Gm4+1fgX0
組み込み系で、積算の量を保持していて
1秒毎に測定して何年というスパンで計算を続けると、
もう32bitでは精度が足りなくなる
182デフォルトの名無しさん (ワッチョイ 2f97-5djn)
垢版 |
2022/09/30(金) 18:26:40.60ID:J+iH2myB0
最後に浮動小数点数にして誤差を減らす方法は、代数的な計算ができる必要がある。
Mathematicaとか、SymPyだな。
ただ代数的な計算は上手いこと式を整理してやらないと簡単にならないことも多い。積分は公式を知らないと出来ない、というのと同じ。
有理数の四則演算だったら単なる有理数演算を逐次的に実行していけば問題ないだろうが。
183デフォルトの名無しさん (ワッチョイ 2f97-5djn)
垢版 |
2022/09/30(金) 18:28:54.96ID:J+iH2myB0
>>177
んなことないだろ。加法定理やら積和、和積の公式とか習わなかったのか。あの辺使うと極端な場合の誤差減らせるよ。
xが0に非常に近い場合のsin2x/sinxとかね。
2022/10/01(土) 03:53:03.59ID:SpYHa2lW0
お金の計算とかは
有理数しか出てこないんだから
分数で十分のような気がするんだが
2022/10/01(土) 05:23:12.47ID:9xFR6mUQ0
丸めたくない意図だと思うが加減算だけで速攻破綻する
2022/10/01(土) 05:55:22.47ID:jubCkgWp0
単にbit数が足りなくなるという話なので、
必要に応じてbit数を増やしていけばいい
無限に増えることは絶対ない
187デフォルトの名無しさん (ワッチョイ 8301-Umkq)
垢版 |
2022/10/01(土) 06:02:40.31ID:WTWdfTM50
質問です。
djangoの資格を作りたいとおもってます。
需要はありますか?
2022/10/03(月) 07:28:28.28ID:qHW/WFxU0
https://translate.google.com/

Google翻訳のページで、テキスト入力ボックスから「Tabキー」を1回押すと必ず「音声を聞く」のアイコンに移動するようにしたいのですが、Pythonで可能ですか?
通常は3回で行けるのですが、”原文の言語”や”もしかして”が表示されるとTabキーを押す回数が変わって面倒です。しかもリストが表示されててそのパターンなのか見えない。
Pythonで何とかしようとしてるのがそもそも間違っている気がして、簡単なHPをJavaとか?で作ったり、アドオンを組んだりとか別の手段が必要ですかね?
2022/10/03(月) 07:35:38.92ID:y8eCR1Dta
うるせえ
2022/10/03(月) 09:20:27.54ID:XqhFz79Ma
>>188
現在のフォーカスを取得することでTab回数制御できそうだけど
そもそも音声を聞く、のidありゃそこに飛ばせるやろ
2022/10/03(月) 10:02:57.41ID:qHW/WFxU0
>>190
seleniumを使ってプログラムを実行した時だけなら出来たのですが、普段使いで常にその状態にさせる方法が分からなかったです。
独自の簡単なChrome拡張機能を作る方向が一番良さそうな感じです。そっちで少しやってみます。お騒がせしました。
2022/10/03(月) 10:19:40.80ID:2xmZEmoH0
>>191
拡張起こさなくてもTampermonkey拡張でスクリプト書くだけ
2022/10/03(月) 10:33:51.18ID:vUZPctIIM
USWCとか使ってESCキーを押したら画像認識で再生ボタンクリックとかにすると簡単そう
ESCだと位置的に押しやすいし予測候補も消える
pyautoguiみたいなの使えばPythonでもUWSCと同じ事出来たはず
windows限定の話だけど
2022/10/03(月) 10:49:36.68ID:WjbJBDxU0
拡張する方向でやってもすぐに使えなくなったりするので、
キーやマウスの操作を発生させる方向でやるのが結局ベストだったりする
2022/10/03(月) 10:54:58.28ID:qHW/WFxU0
>>192-194
最初に調べるキーワードが出てこなくて分からないことが多いので情報助かります
頂いた情報を元に解決する方向でやってみます。ありがとうございました。
196デフォルトの名無しさん (スフッ Sd1f-0H1b)
垢版 |
2022/10/03(月) 10:55:37.39ID:S1BqvHYWd
>>169
>>173
複素数や四元数を使うのが割りとマジでお薦め
2022/10/03(月) 11:05:12.96ID:zOLlU4yCa
オイラーをほめたたえよ
2022/10/03(月) 18:00:29.25ID:pcuzjq2H0
>>188
Ruby, Selenium でも、JavaScript を使って出来たけど、

ソースコードの何かの単語がブロックされるので、
ここには貼れないので以下へ

https://jsfiddle.net/w3anscm6/
2022/10/03(月) 18:09:52.15ID:wCVa7NBkM
>>198
どーゆーこと?
2001 (テテンテンテン MM7f-kE2G)
垢版 |
2022/10/03(月) 22:09:32.24ID:yB/cj66NM
質問です
以下のプログラム(wikipediaの今日は何の日)をエクセルで起動させたときに最後の年号の()が取れてないとおかしいのですがどこのコードが間違っていますか?
優しい方教えてください

import requests
from bs4 import BeautifulSoup
import csv
import re

url="https://ja.wikipedia.org";
response=requests.get(url)
soup=BeautifulSoup(response.content,"html.parser")

top_entry=soup.find("div",attrs={"id":"on_this_day"})
entries=top_entry.find_all("li")

today_list=[]

for i,entry in enumerate(entries):
today_text=entry.get_text().replace("(","(").replace(")",")")
match=re.search("\(([1-9].*?)年\)", today_text)
if match:
today_list.append([i+1, entry.get_text(),match.group(1)])
else:
today_list.append([i+1, entry.get_text()])

with open("output.csv", "w", encoding="Shift_JIS") as file:
writer=csv.writer(file, lineterminator="\n")
writer.writerows(today_list)
2011 (テテンテンテン MM7f-kE2G)
垢版 |
2022/10/03(月) 22:11:29.02ID:yB/cj66NM
何度も本(スクレイピング・ハッキング・ラぼ)見返したけど間違ってないんです…
2022/10/03(月) 22:13:35.20ID:WjbJBDxU0
漢字コードとか?
2022/10/03(月) 22:15:49.89ID:phcGwi7g0
とりあえずこれに聞こうぜ
https://aiprogrammer.hashlab.jp/
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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