Pythonのお勉強 Part66

■ このスレッドは過去ログ倉庫に格納されています
2021/11/12(金) 07:48:11.11ID:vp8lzav70
!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://codepad.org/      ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Pythonオフィシャルサイト http://www.python.org/
◇まとめwiki ttp://python.rdy.jp/

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

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

次スレの建立は>>985が挑戦する。(980通過して24h後も落ちなくなった)
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2021/12/08(水) 02:08:39.64ID:uCheTDCk0
Pythonで組みなおしています
デフォルト関数も多そうだし条件分岐とかが簡単そうですが
外部ツール起動に対するオプション調査中です
ファイル名を取得してその名前でディレクトリを作成するところまではできました

import sys
import os
import subprocess

for i in os.listdir(sys.argv[1]):
file, ext = os.path.splitext(i)
os.mkdir(sys.argv[2]+file)
2021/12/08(水) 07:20:30.37ID:OmzTkGs60
>>367
参考になるかも
https://qiita.com/shota243/items/91660ece72b5e84c3adb
2021/12/08(水) 13:19:52.67ID:uCheTDCk0
外部ツールに抽出ファイルをかけるのが難しいですね

%Tool% -i %%f -o "%2\%%~nf\%%~nf.〇〇〇" -a -e
この処理をPythonでどうやるのか?
subprocess.runあたりを使うっぽいのですがその後の書き方や処理方法が不透明
ターミナルにパイプして処理する?とかになるなら結局バッチかパワーシェルで
統一した方が早いのでしょうか
2021/12/08(水) 13:33:21.38ID:5HATgl/c0
標準出力を取得して、とかやるとそれ用のことを書かないといけないけど、
実行させるだけなら超シンプル

subprocessから取得したデータをパイプでffmpegに渡して、
とかやらせてちゃんと動くとちょっと嬉しい
2021/12/08(水) 13:43:19.97ID:lsXABI8+d
ニコ生のえっちなやつ録画したいニキおつ
2021/12/08(水) 15:21:18.60ID:M4uEosNe0
>>370
バッチで用が済むなら終わりでいいのでは
汚いスクリプトなんてプログラミングの勉強にならないし
2021/12/08(水) 16:12:58.05ID:5HATgl/c0
m = re.search('pattern', str)
if m:
  item = m.group(1)

みたいには書けるけど、ifの中にmの取得を一緒に書けない?
そうでないと、if elif elseで書けない
2021/12/08(水) 16:16:26.00ID:Z7ccVyDn0
昔のpythonでは書けなかったんですが
python3.8からassignment expression := ができるようになりました
2021/12/08(水) 16:22:47.75ID:5HATgl/c0
おおー、できるのか
でもうちのは3.7だからできないわ
会社のは3.6だからもっとできない

変な互換性のなさを作り込むよりは、3.6でもやれる方法を考えよう
2021/12/08(水) 16:31:06.57ID:cmZgcxZR0
>>370
各変数を別途取得して、subprocess.runで起動するアプリの引数として与えるだけ
自分で引数をオプションとして与えたいなら、argparseを使う
2021/12/08(水) 16:31:50.71ID:lsXABI8+d
item = data.get(1)
if item:
id(item)

#3.8
if item:= data.get(1):
id(item)
2021/12/08(水) 16:51:20.77ID:e5XneN8e0
pythonの野郎宗旨替えしやがったのか
2021/12/08(水) 17:00:08.30ID:cmZgcxZR0
>>374
スコープの話なら、関数こさえてreturnで拾うという手もあるけど、めんどくさいね
2021/12/08(水) 17:02:23.43ID:5HATgl/c0
無駄な処理は増えるけど
m1 = re.〜
m2 = re.〜
としておいてから、
if m1:
elif m2:
なら書ける

代入が評価もできる仕組みは、書き間違えてバグるからというよりは、
単純に読みにくくなる
2021/12/08(水) 17:12:25.01ID:+2BbFlMUa
Pythonのifのスコープは脳に優しくないな
2021/12/08(水) 17:22:50.60ID:aaXV5Kk80
プライベートだと思っていた彼女のホールがグローバルだった
2021/12/08(水) 19:30:48.14ID:5HATgl/c0
入力行をsplitして取り込む
arg1, arg2, arg3 = line.split('\t')
みたいな感じ

でも、入力がちゃんとしてなくて数が多くても少なくてもエラーになる
そこはよしなにやって欲しい
足りない部分はNoneで埋めて、余った分は捨てていい

というええかげんなことをしようと思ったら、ええかげん関数を作るしかないのかな
2021/12/08(水) 19:35:03.01ID:lsXABI8+d
hash = {'ぐれ':1, 'ぷ':2}

matched = m.group(1)

if not hash.get(matched):
print('i want to write else case')
elif hash[matched]== 1:
print('do 1 case')


???
2021/12/08(水) 21:14:52.99ID:/jR8/f4s0
>>384
arg1, arg2, arg3, *_ = line.split('¥t') + [None, None]
2021/12/08(水) 23:31:45.91ID:5HATgl/c0
+ でいいんだな
388デフォルトの名無しさん (ワッチョイ a601-CYhY)
垢版 |
2021/12/09(木) 02:15:13.68ID:WjLFVkiy0
すみません、質問なのですが、
newline= ってpython3じゃないと使えないのですか?
2021/12/09(木) 02:26:38.04ID:y+vTbIG00
調べてから質問してる?
390デフォルトの名無しさん (ワッチョイ a601-CYhY)
垢版 |
2021/12/09(木) 02:29:06.32ID:WjLFVkiy0
してる
2021/12/09(木) 05:36:26.42
"newline= を使う"ってなに?
文字列の中に改行コードは使えるか
って意味じゃないよね
それだとそっこーぐぐったら出てくるし。
なんかのライブラリやらフレームワーク的な話なのだろうか
2021/12/09(木) 05:39:43.24
あるいはクロスプラットフォームでのCRLFかLFかみたいな話かな
2021/12/09(木) 06:51:10.51ID:7v43kIFS0
openのオプションでしょ
2021/12/09(木) 08:02:22.78ID:I94H5Ioy
>>388
python3.8.1
https://techiedelight.com/compiler/?MQK2

python2.7.17
https://techiedelight.com/compiler/?lKam
2021/12/09(木) 08:48:12.08ID:zIpIn5ri0
beautifulsoupでattributeerror: nonetype nas no attribute stringが発生するんだけどnoneになることが想定される場合は一々いっこっこifでかこってやらないとだめなの?
2021/12/09(木) 08:56:56.15ID:zIpIn5ri0
ifっていうかtryか
2021/12/09(木) 08:59:10.31ID:7v43kIFS0
最大限何でも見つかるようにしとくから、緩めるのはユーザ側でやってね
という姿勢は間違ってないんだけどな
元から緩かったら厳しくしようがない
2021/12/09(木) 09:52:10.18ID:q+Lg0FmZ0
自分の管理できないデータを拾おうとする場合は
例外処理は必須だと思う
399デフォルトの名無しさん (ワッチョイ a601-CYhY)
垢版 |
2021/12/09(木) 10:42:48.76ID:WjLFVkiy0
>>394
ありがとうございます!!!
2021/12/09(木) 11:32:41.22ID:LJEXrIakM
>>395
ifかor

Pythonにはsafe navigation operatorがないからスクレイピングコードは煩雑になりがち
https://en.wikipedia.org/wiki/Safe_navigation_operator

要素がなければ空文字のようなデフォルト値を返す汎用的関数を自分で用意すると少し読みやすくなる
2021/12/09(木) 11:51:24.51ID:q+Lg0FmZ0
JSONなんかだと、get()で拾えばまぁ困らんな
2021/12/09(木) 11:58:39.98ID:LJEXrIakM
BeautifulSoupじゃなくてScrapyなら少しマシ
公式ドキュメントの質は段違い
2021/12/09(木) 12:37:45.04ID:LJEXrIakM
>>401
指定した要素がない状況を考慮する必要があれば階層ごとに自分でハンドリングが必要だからgetだけじゃダメなんだよね

safe navigation operatorがあればlodashのgetやrubyのdigのようなのが簡単に作れる

近いところでglomがあるけど処理を分割したり、つなげたりできないから使い勝手が悪い
2021/12/09(木) 14:43:48.67ID:kmW2UpC80
bsのドキュメントってなんであんな書き方なんかな
2021/12/09(木) 17:31:55.59ID:7v43kIFS0
クラスAを入力にしてクラスBに出力する時
a.process(b)
よりも
b.process(a)
の方が直感的だろうか
2021/12/09(木) 17:33:06.64ID:hfvG1WdLd
インスタンス作り直す
2021/12/09(木) 17:43:20.61ID:eEWQKJ8w0
>>405
processというメソッド名で二択ならまだ後者だけど直感的でない
どっちを主体にしたいかを決めてそれにあったメソッド名をつけるのが正解
2021/12/09(木) 17:47:49.86ID:y+vTbIG00
bの状態を変化させるなら後者かな
2021/12/09(木) 17:49:17.07ID:7v43kIFS0
名前をちゃんと付けると、データの抽出と設定を同時にやる訳だから
b.extract_data_and_write(a)
と書いたとしても、
from b to a なのか from a to bなのかは判らない
2021/12/09(木) 18:19:58.56ID:hfvG1WdLd
責任の所在はAにあるから
aの所有するメソッドがbを操作する、という書き方がいい
つまり前者
2021/12/09(木) 19:29:46.08ID:y36UsJ/D0
pythonって直感的ってより
少ない記述で書ける小型プログラムってイメージ
2021/12/09(木) 19:32:50.08ID:vdjQHUNbD
pythonって直感的ってより
コーディング規約みたいなのをなるべく減らすよう設計されてるイメージ
2021/12/09(木) 19:34:27.22ID:kmW2UpC80
イメージで語るな
2021/12/09(木) 20:11:20.59ID:lReNouCA0
すいませーん、入門したばかりなので低次元な質問ですけど教えてください。
DataFrameで行番号100以上のdf["hoge"]の値を全てNoneに置き換え、
って、どうやるんでしょう?
whereを使って列の値をキーにして置き換えみたいな記事はあちこちにあるんですけど、
うまく見つけられなくて…。
2021/12/09(木) 20:20:57.64ID:lReNouCA0
一応、出来たみたいです…。

df_subset = df2.query("index > 100")
df2.loc[df_subset.index, "hoge"] = None

2ステップになっちゃいました…。
もっと楽なやり方ってあるんでしょうかね?
416デフォルトの名無しさん (ワッチョイ 0a10-QDcv)
垢版 |
2021/12/09(木) 21:01:27.61ID:/XpwR6ak0
df.iloc[df.index>100,”hoge”]=None
417デフォルトの名無しさん (ワッチョイ 0a10-QDcv)
垢版 |
2021/12/09(木) 21:01:57.63ID:/XpwR6ak0
間違えた
df.loc[df.index>100,”hoge”]=None
2021/12/09(木) 21:09:37.78ID:7v43kIFS0
プロパティなんだよな
適当にネットのコードをコピーして改造して動いて、
後からよく見てなんだこれてなる
419デフォルトの名無しさん (ブーイモ MMcf-+02Y)
垢版 |
2021/12/10(金) 01:50:16.79ID:1XQlciewM
> お前は毎朝起きるたびに俺に負けたことを思い出すよ^^

あー、ホンッとに思い出すなあ(笑)
キチガイの嘘つきの低レベルFランの、
朝鮮ゴキブリBot君は、
チョン独特の「なにもできないけど俺のほうがジャップより偉い!」的な
ことはよーくわかったよ。
ホントなにもできない朝鮮ゴキブリBot君!

クソチョンw
クソチョンはウンコを食べる糞食人種w
朝鮮人はゲリ便をじゅるじゅると
うまそうに食うw
2021/12/10(金) 08:35:11.18ID:DV16xl6X0
>>416-417

有難うございます、いけました。

DataFrame操作、便利なのはわかってるんですが、記述方法がこれまでやってきた他の言語にはなかった感じでちょと戸惑ってます。
2021/12/10(金) 08:58:00.11ID:5w3ky6J90
インデックス操作はスライス使う方がオレは好きだな
df.loc[100:,”hoge”]=None
2021/12/10(金) 09:27:24.28ID:LdVcQX3X0
上の方に要らない行があるからそれを削る、みたいな時には使うけど、
インデックスを数字で指定することがそもそもレア
2021/12/10(金) 12:18:46.95ID:DV16xl6X0
>>421

それでも行けるんですね。
424デフォルトの名無しさん (ブーイモ MMcf-+02Y)
垢版 |
2021/12/10(金) 14:44:01.80ID:dPm+RZp8M
クソチョンw
2021/12/10(金) 19:48:42.58ID:LdVcQX3X0
try - finally
はwithで置き換える
自作withはcontextlibで作る
2021/12/10(金) 21:51:15.63ID:jufFO9Qq0
javaでもない言語でtry自体を使いたくない
2021/12/10(金) 22:21:38.64ID:LdVcQX3X0
exceptが素早くタイプできない
2021/12/10(金) 22:33:35.69ID:CbPmL2LvM
javaって言えば今日は大騒ぎだったなw
影響範囲で言えば2年前のstruts2 RCE祭りより酷い

pythonのloggerは大した機能なくてハァ〜〜ってため息が出ることが何度かあったけど
今日だけはチープな実装でホントよかったと思ったわ
429デフォルトの名無しさん (ワッチョイ bfda-ULLt)
垢版 |
2021/12/11(土) 01:52:28.49ID:ZK42YBmJ0
>>428
穴ってレベルじゃねえよな
2021/12/11(土) 06:02:34.65ID:2pyL4JiA0
でも今までなんも起こってないからそのままだったんよね?
2021/12/11(土) 07:12:39.38ID:T68Lqt3h0
だからjavaなんてやめとけって何度言ったか
2021/12/11(土) 07:13:22.50ID:V5XtH56o0
loggerがどれだけ高機能でも、記録するだけなら何も起きない
なんで実行するかな
433デフォルトの名無しさん (テテンテンテン MM8f-XjgK)
垢版 |
2021/12/11(土) 07:47:37.23ID:w4ZoaW0AM
すいません。Pythonプログラムでpyxelを使ったゲームを作ったんですが、それを友達に共有したいのですが、どうすればいいですか?
zipとかファイルで送りましたが起動できないと言っていました。
2021/12/11(土) 07:51:50.61ID:V5XtH56o0
仮想環境を作らせて同じ環境にする
exeにする
435デフォルトの名無しさん (テテンテンテン MM8f-XjgK)
垢版 |
2021/12/11(土) 07:53:43.18ID:w4ZoaW0AM
exeにしたんですが、クリックして開いたと思ったらすぐ消えてしまいました。
また、環境はpyxelをインストールするだけでいいのですか?
2021/12/11(土) 08:03:49.93ID:V5XtH56o0
不明ならば、pip freeze全部
2021/12/11(土) 13:56:36.55ID:y0niRYqP0
先日入門した他言語者ですけど、閉じ括弧書かなくていいの、地味に楽ですね。
Yamlと同じ楽さです。
2021/12/11(土) 14:40:50.75ID:2wBn3+dOM
手動でdedentが必要なのでむしろ地味に苦痛
2021/12/11(土) 14:58:15.21ID:V5XtH56o0
秀丸でインデント戻す正解がまだ見つからない
2021/12/11(土) 15:50:15.48ID:T68Lqt3h0
vscodeで選択した行まとめてスペースするには?
2021/12/11(土) 15:51:33.44ID:y0niRYqP0
>>438

{}でブロック定義する言語の場合、
今どきの初学者キッズ達の書くコード、まじでインデント滅茶苦茶ですからね。
『しつけ』という観点においてはPythonのインデント強制が矯正になっていいんじゃないかと思います。
2021/12/11(土) 15:54:49.98ID:V5XtH56o0
対応する括弧へのジャンプ機能でブロックの先頭に飛べて便利なのに

上に探して行って、今のインデントレベルに最初に何か書いてあるところまでジャンプ
みたいなマクロが要る
2021/12/11(土) 16:19:42.62ID:E/VsNyVn0
>>441
そういう根性論じゃなくてフォーマッタとか仕事を効率化する方法を教えてやるべきだと思うぞ
2021/12/11(土) 16:32:46.63ID:PhRtUMglM
>>441
一発でオートフォーマットできるからインデントがめちゃくちゃなコードでも何の問題もない
python以外ではね
2021/12/11(土) 16:33:59.54ID:SDIYylIRD
>>443
何のために を教えてやるのが先でしょ
446デフォルトの名無しさん (ワッチョイ 4733-8/hI)
垢版 |
2021/12/11(土) 16:34:44.72ID:lBTOlMPp0
>>443
インデントするかしないかなんて癖とか慣れみたいなもんだし、根性論がどうとかじゃないだろ
それこそ、インデントに限らず変数名のつけ方とかコメントの書き方とかも同じだよ
実際に書きながらじゃないと身につかん
2021/12/11(土) 17:21:54.24ID:E/VsNyVn0
>それこそ、インデントに限らず変数名のつけ方とかコメントの書き方とかも同じだよ
>実際に書きながらじゃないと身につかん

それが根性論。
わかりやすい変数名は自動じゃ付けられないがインデントは自動でできる。
限りある時間と頭は前者に注力するのが合理的ってもんだろう。
2021/12/11(土) 17:30:00.42ID:OP1TuqIU0
インデントずれてる奴は雑なんだろうな
安心して仕事任せられないわ
2021/12/11(土) 17:41:42.05ID:yK8FRSrA
根性が嫌ならもうコーディングは他人にすべてを任せて貴重な時間を経営やコミュニケーションスキル学習へ回した方が合理的
450デフォルトの名無しさん (ワッチョイ 4733-8/hI)
垢版 |
2021/12/11(土) 17:43:26.35ID:lBTOlMPp0
>>447
わざわざフォーマッタとか使わせるなら最初からまともな開発環境なりエディタなり使わせるわ
2021/12/11(土) 17:52:32.22ID:VpQySh8l0
今日の不毛な議論のテーマ「インデント」です。
結論が必要ない人だけ参加してください。
2021/12/11(土) 17:52:48.44ID:E/VsNyVn0
わざわざ手でインデントすることを強制するよりまともな開発環境使わせろと言ってたのはこっちなんだが
2021/12/11(土) 18:12:04.65ID:ujbkP3uUM
書くのは多少ぐちゃぐちゃでもいいけどレビューの時にはちゃんと整形しとけ
2021/12/11(土) 18:13:25.17ID:4ZOnX4zTa
すげーどうでもいい
2021/12/11(土) 18:27:24.02ID:OP1TuqIU0
ちゃんと整形できない人
ご飯クチャクチャ食べてそう
2021/12/11(土) 18:40:51.75ID:w5YNy+Wd0
プログラムなんて正しく動けばそれで良いのさ
2021/12/11(土) 18:51:29.07ID:FrF9wjhg0
止め跳ね払いさえしっかり書けてればいい
2021/12/11(土) 18:53:13.77ID:V5XtH56o0
つかblackかけるよね
2021/12/11(土) 18:57:33.01ID:w5YNy+Wd0
文豪と呼ばれる人たちの字は汚くて読みづらい
2021/12/11(土) 19:14:05.90ID:4ZOnX4zTa
インデントなんてリフォーマットで一発だし
変数名なんて設計の問題
2021/12/11(土) 19:18:13.33ID:WRoIyzpK0
blackってあの宗教臭いフォーマッタだっけ
2021/12/11(土) 19:22:22.43ID:WRoIyzpK0
フォーマットがしょっちゅう変わるからblameが使いにくくて
何だこれウンコだなって評価してたけど少しはマシになったのか?
2021/12/11(土) 20:11:30.93ID:7e/RY26Q0
インデントずれてるのにリフォーマットしたらロジック変わるんじゃ…
464デフォルトの名無しさん (ワッチョイ 47da-Z7Vi)
垢版 |
2021/12/11(土) 20:16:46.10ID:LVLvmhJV0
意味のない議論だよ
2021/12/11(土) 20:27:04.83ID:E/VsNyVn0
>>463
さすがにブロックや折り返しを正しく認識できない状態で強行するフォーマッタはないだろうし
正しく認識できている状態でフォーマットするならそれが変わることもないはず。
2021/12/11(土) 21:03:52.73ID:BEyyuamvM
自動フォーマットできる範囲がPythonの場合限定的って話でしょ
インデント間違ってたら動かないケースがほとんどなんだから
467デフォルトの名無しさん (ワッチョイ 7f10-LoL2)
垢版 |
2021/12/11(土) 21:04:38.10ID:hm3+CMnM0
こういう話題は盛り上がるんだなあ
自転車置き場の議論だっけか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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