【まず1嫁】くだすれPython(超初心者用) その54at TECH
【まず1嫁】くだすれPython(超初心者用) その54 - 暇つぶし2ch736:デフォルトの名無しさん
21/09/02 12


737::59:54.32 ID:DVH2qPZi.net



738:デフォルトの名無しさん
21/09/02 16:02:33.72 L8dQJCTS.net
初めてwindows使うんですがcondaとpipってどっちがいいんでしょうか
今まではノリでpip使ってたんですがググるとcondaもいいと言われて迷ってきました
主な使用用途は簡単なスクリプトからデータ計算、セキュリティの勉強や自分用のまとめ表作りなど本当に様々です

739:デフォルトの名無しさん
21/09/02 16:15:26.22 4vWPiFe2.net
>>730
原因を調べたいのだったら追及すれば良いけど
そうじゃないならVPNとかSoftEtherとかでProxy無しで外に出れるフェイク環境を作ると解決
>>731
pip
ただしcondaが共存してるときはcondaで先に探して
見つからないときだけpip使うようにしてる

740:デフォルトの名無しさん
21/09/02 19:59:47.57 bRMdZZsN.net
>>727
URLリンク(search.yahoo.co.jp)

741:デフォルトの名無しさん
21/09/02 20:21:57.15 PLPQmXRE.net
>>731
pip
condaいらん。無駄なことしたくなかったら入れないほうがいい

742:デフォルトの名無しさん
21/09/02 20:32:53.62 lSTkj0Rg.net
URLリンク(twitter.com)
(deleted an unsolicited ad)

743:デフォルトの名無しさん
21/09/02 20:41:46.54 t+wDMqp+.net
クラス変数に順次アクセスする方法はありますでしょうか。(define代わりにクラス直下に変数が複数ある状態)
__dict__.valuesで取れるとあったのでリストに入れてforで回そうと思ったのですが、変数以外にいろんな属性がついてきてしまいます。

744:デフォルトの名無しさん
21/09/02 20:55:57.53 DVH2qPZi.net
>>732
原因分かったわ。
世の中に配布されてるcertifiのcacert.pemっていうファイルにこの環境で使ってる独自の証明書のpemファイルの中身を追記したら繋がった。
コピペは避けたいから2ファイル読ませられないかとcertifiを調べたけどcacert.pemが決め打ちだから無理っぽい。
ついでになぜか3.8.5までしか動かない問題をチェックしたがそっちは解消されず。
3.9にすると同じ方法でも繋がらないどころかconda自身のアップデートもできない。
openssl周りじゃないかと思うけど諦めた。

745:デフォルトの名無しさん
21/09/03 11:02:01.16 qtGmv/9F.net
>>736 こういうこと?
URLリンク(stackoverflow.com)


746:of-a-class-in-python https://stackoverflow.com/questions/5607307/get-the-list-of-a-classs-variables-methods-in-python



747:デフォルトの名無しさん
21/09/03 13:14:44.01 QJ/1j3Lw.net
>>738
出先なんで試せてないですが、そんな感じです。厳密には変数名ではなくて値を取りたいです。

748:デフォルトの名無しさん
21/09/03 21:55:16.43 T2V+s1mX.net
>>738
差集合とるのか。なるほどな
URLリンク(ideone.com)

749:デフォルトの名無しさん
21/09/05 13:43:56.65 LaSEjliV.net
tzinfoが設定されているdatetimeオブジェクトを、時差が適用された状態で文字列か新しいdatetimeオブジェクトに変換したいです
具体的には↓のコードのlocal_dtから日本時間に変換したdatetimeオブジェクトが欲しいです
↓のコードではpublishedは最初UTCで、それをAsia/Tokyoのlocal_dtに変換しています
しかしlocal_dtのmonthやdayなどを参照しても日本時間になっていません
時差の実際の適用は手動でやる必要があるのでしょうか?
def get_published(self, obj):
print('tzinfo', obj.published.tzinfo) # UTC
tz = pytz.timezone('Asia/Tokyo')
local_dt = obj.published.astimezone(tz)
print('conv tzinfo', local_dt.tzinfo) # Asia/Tokyo
return local_dt

750:デフォルトの名無しさん
21/09/05 14:51:07.53 LgQhIBwq.net
localtime()

751:デフォルトの名無しさん
21/09/05 14:53:32.33 lJqHVJAL.net
>>741
特に問題なさそうだけど
URLリンク(paiza.io)

752:デフォルトの名無しさん
21/09/05 15:54:14.08 LaSEjliV.net
>>742
timeモジュールのですか?
>>743
????
同じコードをこちらの環境(Linux)でも実行しましたがうまくいきました
Djangoでコードを動かすとなぜかうまくいきません
なんで?

753:デフォルトの名無しさん
21/09/05 16:08:51.59 lJqHVJAL.net
>>744
URLリンク(docs.djangoproject.com)

754:デフォルトの名無しさん
21/09/05 19:53:30.08 ejEr4mJx.net
リストの結合について質問です
リストの先頭要素を末尾に移動したいとします
ex)[0,1,2]→[1,2,0]
コマンドラインで以下のように書いたところ
2行目で can only concatenate list (not "int") to list というTypeErrorが発生してしまいました
li = list(range(3))
li[1:] + li[0] # TypeError
結果として
li[1:] + li[:1]
としたら問題なく通ったのですが、先に書いた方がエラーになるのはどうしてですか?
li[0]は0(int型)なので、スライスを使用して取得したリスト(li[1:] で得られる [1, 2]、リスト型)とは加算演算できない、という認識で良いですか?
で、li[:1]で取得できるのはリスト型の[0]なので加算可能ということでしょうか

755:デフォルトの名無しさん
21/09/05 20:47:37.17 DaMQ65LY.net
>>746
大体そんな感じ
"+ (加算) 演算は、引数同士の和を与えます。引数は双方とも数値型か、双方とも同じ型のシーケンスでなければなりません。前者の場合、数値は共通の型に変換され、加算されます。後者の場合、シーケンスは結合 (concatenate) されます。"
URLリンク(docs.python.org)

756:デフォルトの名無しさん
21/09/05 20:51:43.82 ejEr4mJx.net
>>747
ありがとうございます
参考URLもどうもです

757:デフォルトの名無しさん
21/09/06 12:19:20.10 5X8quI1P.net
ファイル読み込み時に入力セパレータを改行から他の文字列に変える事は出来ないのでしょうか?
perlなら$/='\n\n'みたいに入力のレコードセパレータを改行2個にしたり出来るのですが
今はファイル一括で読み込んでsplitしてるので読み込み時間がえらく掛かってしまいます
1行ずつ連続した改行がくるまで読んで連結するとかはあまりスマートじゃないのでなにか上手い方法知ってらっしゃる方いましたら教えて下さい

758:デフォルトの名無しさん
21/09/06 12:45:22.69 n3QcSaSA.net
csvとして読み込め

759:デフォルトの名無しさん
21/09/06 12:47:18.91 FistWoaj.net
open関数のnewlineパラメータでできそうだけど速くなる気がしない

760:デフォルトの名無しさん
21/09/06 14:44:42.59 DsY+3+kX.net
>>743
変数名や引数名の付け方が最低だな

761:デフォルトの名無しさん
21/09/06 14:46:25.44 DsY+3+kX.net
>>746
li[1:] + [li[0]]

762:デフォルトの名無しさん
21/09/06 14:48:25.79 DsY+3+kX.net
>>749
>一括で読み込んでsplit
本当にこれが原因だと思ってるなら
2行ずつ読めば良い

763:デフォルトの名無しさん
21/09/06 15:11:11.17 h2TdR+zH.net
first_value = li.pop(0)
li.append(first_value)
実行速度を気にするならdequeとか使うんかね

764:デフォルトの名無しさん
21/09/06 15:25:00.95 5X8quI1P.net
>>754
すみません、2行ずつ読む意味が分からないんですがgzip化された25万行くらいのファイルでも読み込むと
d = fp.read()で一括で読んだ時は6秒程度、d = fp.readlines()やd = [x for x in fp]で1行毎に読んだ時は0.3秒程度と読み込みだけで結構な差が出てますので一括が原因だと考えてます。
やりたい事は下記のような必ず改行2連続で区切られたデータひと固まりをリストの1要素として取得したいわけですが、これを下記のようにやると読み込みに時間が掛かってしまうので先の質問に至ったわけです
d = fp.read()
s = d.split('\n\n')
aaa
bbb ここのひと固まりの行数は可変
ccc
ddd
eee
fff
ggg
hhh

765:デフォルトの名無しさん
21/09/06 16:49:12.87 cl/YIp9D.net
人間の発想だと改行が2個続くことを条件に分割してやれば早いって思えるけどpythonのあるべき書き方だと違うやり方の方が早いこともありそうな気がするね。
例えばだけど1行ずつ読んでkeyを行番号にvalueにして中身は条件判断せずにテキストを読み込み切ってからvalueを縦に走査して改行のみが入ったところで区切りの処理をするみたいな形にしたら早まらんかな。
元の質問の狙いとしては改行が2個続いたときに普通は使われない文字(例えば▲とか)に1回置換してそこからまた▲を行区切りとして読めば短縮されるのでは?というように見える。
けど756を見るとその置換処理の時点で6秒かかって意味なさそうに見えるわな。

766:デフォルトの名無しさん
21/09/06 16:53:07.95 VKhiLpUq.net
>>756
その程度なら次の行読んで
・データがあるならリストに追加
・空か末端ならリスト終了
でええやん
あるいはBufferedReaderつかってリスト毎に返すioを実装

767:デフォルトの名無しさん
21/09/06 17:15:24.45 5X8quI1P.net
>>757
質問の意図としては一括払い読み込みのread()は遅いので使いたくない
読み込みが速い1行ずつの処理で行いたいが、perlのようなファイル読み込みセパレーターが改行2個に出来れば
純粋な1行読み込みみたいにループ処理の際に改行のみのデータが来るまでリストや文字列を連結すると言った事をしなくて良いのでその方法があったら知りたいって事です
>>758
やっぱりリスト追加とかやるしか無いんですかね
bufferdReaderとかってヤツは知らないので調べてみます

768:デフォルトの名無しさん
21/09/06 17:34:12.87 cl/YIp9D.net
ファイル開くときのopenでnewlineに改行2個入れてみたら?

769:デフォルトの名無しさん
21/09/06 17:35:55.31 cl/YIp9D.net
>>760
エラー出たわ

770:デフォルトの名無しさん
21/09/06 18:22:41.52 5X8quI1P.net
なんか調べてたら公式のissue152248で任意の区切り文字での読み取りの話を色々やられてたんで、それ通りやればとりあえずは望み通りの動きが出来ました
まあ知らない記述やらモジュールとか使ってるんで全く内容理解してませんが
長々と失礼しました、回答頂いた方ありがとうございました

771:デフォルトの名無しさん
21/09/06 23:20:11.85 lLs6oVSG.net
よろしくお願いします
tqdmのプログレスバーがリストの長さだけ改行されてターミナル上で表示されてしまいます
これを1本のバーが更新されて表示されるようにしたいです
python3.7.9, VScode, windows10です

772:デフォルトの名無しさん
21/09/06 23:39:42.63 ek7WdP0s.net
1行の長さを適当に100文字と考えて50MB程度しかないのに、buffer(あるいは行)に分割しないだけでそんなに遅くなるもんかな?

773:デフォルトの名無しさん
21/09/07 10:32:46.11 SoS5+Qbw.net
うちのpython3.8.5のシェル、pip install sympyが通らないからおかしいなーと思ってpip installを実行したらこれも通らないんだけど何故?
>>> pip install sympy
File "<stdin>", line 1
pip install sympy
^
SyntaxError: invalid syntax
>>> pip install
File "<stdin>", line 1
pip install
^
SyntaxError: invalid syntax

774:デフォルトの名無しさん
21/09/07 10:50:57.04 SgLDDegk.net
>>765
それはシェルじゃなくてPythonのインタプリタ
pip installはbashやzshみたいなシェルに入力するコマンド
Pythonのインタプリタは基本的にPythonのコードを入力するところ

775:デフォルトの名無しさん
21/09/07 11:05:44.28 E5TDGgcH.net
>>764
色々試してみましたが、読み込みと言うよりメモリに一括で入れるのが原因で遅くなる感じのようです
d = fp.read() や d = ''.join(fp) や d = ''.join([x for x in fp])とか色々試しましたけど、これらの場合は遅くて
下記のようにfor文で連結させたら早くなりました
ネットとか見てもjoinの方が速いとか書いてるんですけどね
d = ''
for s in fp:
d += s

776:デフォルトの名無しさん
21/09/07 12:03:40.05 E5TDGgcH.net
>>767
自己レスですけどマシンの問題のような気がします
Linuxでやってるとread()がめっちゃ遅いんですが、windowsだと変わらないくらい速いです。
寧ろ+=で代入とかしてる方はクソみたいに遅すぎて、なんでここまでの差が出るのか意味分からないくらいです

777:デフォルトの名無しさん
21/09/07 12:18:31.34 hE/CNaTP.net
>>767
どう考えても計測方法・計測環境の問題
キャッシュか空きメモリの影響

778:デフォルトの名無しさん
21/09/07 13:57:15.69 6nMAIx0t.net
メモリ周りだとありがちなのは初回だけ遅くて2回目は早い(python用にメモリ空間を囲うから)だけどそうでもないならOSのファイルシステムの根っこのあたりが腐ってるとかかもな。
個人的に作ってるようなものだったらgoogle colabとかのクラウド実行環境でサクッと検証してみては?

779:デフォルトの名無しさん
21/09/07 14:25:01.03 QthkAqNV.net
>必ず改行2連続で区切られたデータ
readlines() でループ回して一回ずつ飛ばせば良いだろうね

780:デフォルトの名無しさん
21/09/07 15:00:03.49 GNL8Ud6q.net
改行3連続があった場合は?

781:デフォルトの名無しさん
21/09/07 15:48:04.56 2tb+Xun1.net
>>741
ですが解決しました
sqlite3使ってたせいだったみたいです

782:デフォルトの名無しさん
21/09/07 18:18:55.32 SoS5+Qbw.net
>>766
ありがとうございます。今度はシェルでpip install sympyが通ったんですが
pip installが通りません。
>pip install
ERROR: You must give at least one requirement to install (see "pip help install")

783:デフォルトの名無しさん
21/09/07 18:42:45.52 o/q1by9H.net
>>774
単純にpip install <インストールしたいパッケージ名>
っていう構文だから
ッケージ名を書いてなかったら、そりゃエラーメッセージ通りのエラーが出るぞ

784:デフォルトの名無しさん
21/09/07 18:46:56.75 9ZJa/YC2.net
d = ''
for s in fp:
__d += s
これは一番ダメな実装でしょ。
文字列はイミュータブルだから、メモリコピー量が2乗で増えていくことになる。
それでもマシンの能力が「十分」なうちは、他の実装より速いこともありうる、ってだけ。

785:デフォルトの名無しさん
21/09/07 19:35:15.63 yHN0q2ka.net
>>776
ねーよ

786:デフォルトの名無しさん
21/09/07 19:36:34.77 u7xHCyux.net
>>773
sqlite3とどう関係が・・・??

787:デフォルトの名無しさん
21/09/07 19:59:43.49 6nMAIx0t.net
>>776
随分昔(※Java1.5の頃)から、「文字列結合は"+"ではなく、StringBufferを使うと処理が高速化する」ということが既に広く知られていました。
URLリンク(qiita.com)
みたいな話かな。
pythonだとどうなんだろ。

788:デフォルトの名無しさん
21/09/07 20:23:56.12 SoS5+Qbw.net
>>775
え、インストールしたパッケージ一覧が出てくるんじゃないですか?
誤情報ですかね・・・

789:デフォルトの名無しさん
21/09/07 20:25:59.15 yP3cXAjd.net
pip list

790:デフォルトの名無しさん
21/09/07 20:26:41.96 o/q1by9H.net
>>780
節子、それやりたいならpip listや

791:デフォルトの名無しさん
21/09/07 20:33:41.53 YcIWO4/P.net
Elixir は片方向リストで、immutable だから、
先頭への追加ではコピーされないけど、
末尾へ追加するとコピーされる
つまり、先頭のみ最適化される
だから未だに、文字列を追加していく方法が分からない

792:デフォルトの名無しさん
21/09/07 20:37:37.38 eKv4jfBm.net
>>776
今時はよほどループ回さんとたいして違わない
URLリンク(qiita.com)

793:デフォルトの名無しさん
21/09/07 21:31:13.42 8Blsw2sW.net
CPythonでは最適化が入っていてO(n)になるんだけど使うなとPEP8に書いてある
URLリンク(www.python.org)
For example, do not rely on CPython's efficient implementation of in-place string concatenation
or statements in the form a += b or a = a + b. This optimization is fragile even in CPython
(it only works for some types) and isn't present at all in implementations that don't use refcounting.
In performance sensitive parts of the library, the ''.join() form should be used instead.

794:デフォルトの名無しさん
21/09/07 23:20:45.23 Cp1uuQsT.net
>>779
それってJavaの処理系がさぼっているだけだよねね

795:デフォルトの名無しさん
21/09/08 00:39:17.00 jISXv5nw.net
>>786
スレチだからあれだけど、一応はJDK11で大分改善されたぞ
(それでも+結合が一番遅いけど)

796:デフォルトの名無しさん
21/09/08 15:36:42.18 sW5ieu31.net
>>732
>>734
大変遅くなりましたがありがとうございました
助言通りpipにします

797:デフォルトの名無しさん
21/09/08 15:56:50.49 45GUJlB8.net
重いcondaら

798:デフォルトの名無しさん
21/09/08 16:50:53.30 B2IhbCSc.net
勉強するだけならcondaが便利
でも他システムと繋げにくい

799:デフォルトの名無しさん
21/09/08 17:27:10.26 tJQkvu8J.net
formatで
0.1未満なら "5.2%"
0.1以上~1.0未満なら "5.1%"
みたいに、全体の桁数は固定で値によって少数点以下を調整してくれるような簡易な方法ってないですか?(%だけでなく、fなんかでも)
formatだと丸められるので、単純に
if x >= 0.1 とかはできないので、一旦formatかけてからlenで桁が溢れてないかチェックしてるんですが、もうちょっとスマートな方法が無いものかと。

800:デフォルトの名無しさん
21/09/08 17:42:49.27 s8bChe9P.net
単に関数作っとけばいいんでないの?

801:デフォルトの名無しさん
21/09/08 17:50:12.13 QqH5BAVe.net
何回か読み直したが
難解過ぎて俺には文章の意味がわからなかったよorz

802:デフォルトの名無しさん
21/09/08 17:51:41.60 45GUJlB8.net
ruby 使ってると馬鹿になりゅよ

803:デフォルトの名無しさん
21/09/08 17:53:59.73 s8bChe9P.net
>0.1未満なら "5.2%"
>0.1以上~1.0未満なら "5.1%"
ここが逆になってるんだろ?
小数点以下が0.1以上の場合は全て0.2に統一って事じゃ無いの?
そうでないとしたら俺も理解不能だわ。

804:デフォルトの名無しさん
21/09/08 18:59:48.32 XUjypBYd.net
condaはバックアップ取ったりcloneできるのが便利。

805:デフォルトの名無しさん
21/09/08 19:32:05.85 aHZlxj+w.net
master.py上に実行したいスクリプトtestxx.py(xxは数字)がたくさんあります。
os.systemで引数を渡してtestxx.pyを実行しているのですが、testxx.pyからの戻り値を受け取る場合はどうしたら良いのでしょうか。標準出力の値なら取れるみたいな記述を見ましたが、実行中にprintを多様しているため、任意の戻り値のみを取得したいです。

806:791
21/09/08 20:04:49.50 tJQkvu8J.net
分かりにくくてすみませぬ
{x:5.2%} {x:5.1%} というformatで
xが0.1=10%、1.0=100% なので、
10%未満なら9.99% まで少数点2桁、
10%以上100%未満なら99.9% まで 少数点1桁
で表示してほしい、という意味です。
全体桁固定で少数点だけ変動するようなformatの表記、あるいはやり方は無いかなという質問です

807:デフォルトの名無しさん
21/09/08 20:42:07.84 s/O0A+9w.net
こんなんで
x = 12.125
f'{x:.2f}'[:4]

808:デフォルトの名無しさん
21/09/09 01:16:22.36 YDItKt7x.net
numpyのメソッドzerosやonesなどは引数をタプルで指定することになっていますが、リストで指定しても実行できています。
特に問題ないように見えるのですが、タプルで指定した方がいい理由などあるのでしょうか?

809:デフォルトの名無しさん
21/09/09 02:10:35.73 1BTdIMLT.net
タプルは普遍だけれども、リストはそうでないから成長することを想定して必要以上の領域が確保されちゃうぶん効率が悪いとかあるんじゃね?知らんけど

810:デフォルトの名無しさん
21/09/09 02:34:23.48 OKDvztcs.net
sequenceの操作しかしてないから実際はlistでもOKないんじゃない?
onesの説明には
> Parameters: shape: int or sequence of ints
とあるしzeros側のメンテ漏れとか

811:デフォルトの名無しさん
21/09/09 08:14:59.88 Ubp0J8aB.net
>>799
%だと末尾に%が付くので…

812:デフォルトの名無しさん
21/09/09 08:44:11.31 1BTdIMLT.net
>>803
つければいいだろ…
f'{x:.2f}'[:4] + '%'

813:デフォルトの名無しさん
21/09/09 14:16:43.72 3sOE3L2f.net
>>797
subprocess
popen

814:デフォルトの名無しさん
21/09/09 14:54:22.16 MjE68I3R.net
>>798
こういう事?
x = 0.5
print(f'{x*100:.2f}'[:5]+'%')

815:デフォルトの名無しさん
21/09/09 16:50:44.90 Ur+lRPYu.net
これで良くない?
str_formatted = f"{val:.2%}"[:4] +"%"

816:デフォルトの名無しさん
21/09/09 16:58:17.08 MjE68I3R.net
>>807
それだとうまくいかんよ。
>>>val=0.5
50.0%
>>>val=1.5
150.%

817:デフォルトの名無しさん
21/09/09 17:03:24.41 s2e04Gy+.net
>>808
> 10%未満なら9.99% まで少数点2桁、
> 10%以上100%未満なら99.9% まで 少数点1桁
って言ってるのにわざわざ150%とか出してきてドヤるのは頭になんか障害でもあるのか?

818:デフォルトの名無しさん
21/09/09 17:16:30.91 MjE68I3R.net
>>809
>>798
別にドヤってないし、>>807に値を渡した結果を書いてうまくいかない旨を示しているだけだが?
俺も同じようなの試してうまくいかなかったのでうまくいかないと書いただけ。
急に絡んでキレるのは頭に障害でもあるのか?

819:デフォルトの名無しさん
21/09/09 17:32:52.06 3PF/LFW4.net
その>>798から引用してるんだけど…
マジでお前が読めよw

820:デフォルトの名無しさん
21/09/09 17:35:57.82 MjE68I3R.net
すまん。なんか勘違いしてたわw
>>807で大丈夫だな。
俺のだと、こうだわ。print(f'{x*100:.2f}'[:4]+'%')

821:デフォルトの名無しさん
21/09/09 18:13:06.28 Ur+lRPYu.net
100%の値を渡した時に表示がおかしくなる書き方した俺が悪かった、すまん
境界値テストをちゃんとやってなかった証拠だな、マジでごめん
(実務でも似たような事やらかすからマジで反省しとる……)

822:デフォルトの名無しさん
21/09/10 04:40:44.86 uZ6rg4vc.net
>>781
>>782
遅くなり申し訳ありません。ありがとうございました。

823:デフォルトの名無しさん
21/09/10 08:23:56.80 oazR15lu.net
質問とは趣旨違いだがコマンドラインアプリでもGUIでめプログレスバーや%進捗表示はまず回避してどうしてもって言われたら超シンプルにしろって昔言われたな。
境界値の扱いでバグりやすい。
ただ本質的なバグではないのに99.9%で完了するとか100.1%まで行くとかのバグ指摘を受けやすい。
あと業務のこと分かってない情シスが仕事してるフリするために何かレビュー指摘しようとして手をつけやすい。
(1%刻みで出力するけど10の倍数だけ太字にして目立たせろとか)

824:デフォルトの名無しさん
21/09/10 08:26:12.15 oazR15lu.net
もっとも最悪なのは残り時間予測だけどな。
windowsですらあと5分ですって出してから30分かかったり30秒で済んだりするくらいだからよほど単純な処理じゃないと間違える。
テキストファイルのロードみたいな単純な処理でもメモリ圧迫するような挙動だとだんだん重くなるみたいなことあるし。

825:デフォルトの名無しさん
21/09/10 11:45:28.24 NVBgm1WL.net
今までに作ったclassの中で一番行数が多いのってどれぐらいですか?
350行程度のclassでもちょっとわけ分からんようになってきたよ

826:デフォルトの名無しさん
21/09/10 16:59:22.38 1odBdOt6.net
それはこのクラスにはこの系統の処理を置くよ という役割分担が上手くなくて
読むときに負荷がかかってるからだと思うぬ

827:デフォルトの名無しさん
21/09/10 22:42:11.14 VqIPySM9.net
Austria, Croatia, Republic of, Congo, Democratic Republic of the
上記のような文字列があってそれをリストと化したいんだけどカンマでsplitしたりすると
'Croatia, Republic of', 'Congo, Democratic Republic of the'ではなく
'Croatia', 'Republic of', 'Congo', 'Democratic Republic of the'になるけど解決方法がわからないので教えてください。c

828:デフォルトの名無しさん
21/09/10 23:04:37.11 6R6RVOqf.net
>>819
国名はそれそれ、Austria, Croatia, Congoで処理したいということ?
もともとのデータはリストだったの?

829:デフォルトの名無しさん
21/09/10 23:35:10.00 VqIPySM9.net
AustriaとCroatia, Republic ofとCongo, Democratic Republic of theの3つに分けたい
元々のデータはブラウザから手動で引っ張ってきてコピペした文字列なのでリストではないです

830:デフォルトの名無しさん
21/09/10 23:52:18.65 LLuPU2aV.net
機械的に処理するルールを決めることがプログラミングだよ
とりあえずコンマで分けたあと小文字単語があれば前とくっつける、とやってみたいけど
それで全部うまくいくかね

831:デフォルトの名無しさん
21/09/10 23:58:48.69 HeVTXR4t.net
オーバースペックだけど
英名の住所は正規化するAPIやモジュールがあるから
それつかった方が楽だし応用効くよ

832:デフォルトの名無しさん
21/09/11 00:22:54.56 ZpRElCEp.net
国名とそれ以外を分ける必要があるけど
別途国名のリストを拾ってきて、要素を検索しつつ仕分けすればできそう
まぁ、国名リストって時点でアンチョコ使ってるみたいですっきりしないのはおいといて…

833:デフォルトの名無しさん
21/09/11 06:02:28.90 Ka5OzmL8.net
あんちょこって何?

834:デフォルトの名無しさん
21/09/11 08:06:33.32 A67k4NSD.net
pythonスクリプトを直接python test.pyって実行すると動くんですが、
bashからtest.pyを起動しようとすると「No module named websocket」と表示され失敗します。
sys.path.appendすると今度は「No module named selectors」と表示されます。
どなたか対処法をご存知でないでしょうか?
環境はCloud9のAmazon Linux 2です。

835:デフォルトの名無しさん
21/09/11 09:44:22.44 IblrjkB0.net
そのエラーメッセージで検索すれば?

836:デフォルトの名無しさん
21/09/11 10:00:36.84 Dj6rAQzj.net
>>826
モジュール関係でエラーが出た時は
それぞれ一回をsys.pathを出力させて、モジュールの参照先がどうなってるか調べる
(大方実行時に参照してるライブラリのパスが変わってる)

837:デフォルトの名無しさん
21/09/11 17:38:25.32 YCQOaCey.net
>>825
カンニングみたいなニュアンス
この場合は、国名を分離するのに国名リスト使ったらそりゃうまく行くが、国名は200数個に限られているからその辺にいくらでも正しいデータ源が転がっているからいいけれど、
データ源を揃えきれないだろう世界の県名とかだったら成り立たず、うまくいかないだろうからモヤモヤするよねって感じだと思う
元のお題は自動処理するにはもともと筋悪だと思うけどね、バラになっちゃったやつを人間がチェックして結合するのが一番時間かからなくて確実そう

838:デフォルトの名無しさん
21/09/11 18:26:28.45 A67k4NSD.net
>>828
ありがとうございます
確かに直接実行した時とbashから呼び出した時でパスが違っています…
何か違う環境として実行されているということなのか…

839:デフォルトの名無しさん
21/09/11 18:31:53.67 A67k4NSD.net
bashから実行した時はなぜかpythonパッケージのパスが2.7になっているようです

840:デフォルトの名無しさん
21/09/11 18:59:07.20 Dj6rAQzj.net
>>831
LinuxとかMac環境で実行しようとしてるなら
python test.py ⇒Python2で実行する
python3 test.py ⇒Pyhthon3で実行する
っていう動きになる
とりあえずpython3 --version
を使って、そもそもpythonの3系が入ってるかを見た方が良い
入ってたら必要なライブラリをpython3 pip install~で入れればOK

841:デフォルトの名無しさん
21/09/11 19:02:25.20 A67k4NSD.net
>>832
ありがとうございます
python3指定で実行するようにしたら成功しました!

842:デフォルトの名無しさん
21/09/12 02:01:20.44 ysmJ7kfO.net
linuxなんかだと、pip3とかできないの?

843:デフォルトの名無しさん
21/09/12 11:08:57.22 PNU8wIel.net
> お前は毎朝起きるたびに俺に負けたことを思い出すよ^^
あー、ホンッとに思い出すなあ(笑)
キチガイの嘘つきの低レベルFランの、
朝鮮ゴキブリBot君は、
チョン独特の「なにもできないけど俺のほうがジャップより偉い!」的な
ことはよーくわかったよ。
ホントなにもできない朝鮮ゴキブリBot君!
クソチョンw

844:デフォルトの名無しさん
21/09/15 19:05:12.55 0q0CE+HI.net
スクレイピングすると地獄へ落ちるって本当ですか?

845:デフォルトの名無しさん
21/09/15 20:38:57.55 IoiHiFbB.net
392 名前: デフォルトの名無しさん (ワッチョイ 696a-dGLa) [sage] 投稿日: 2021/09/15(水) 19:01:39.47 ID:fHmj5hYp0
スクレイピングすると地獄へ落ちるって本当ですか?
9 名前: デフォルトの名無しさん (ワッチョイ 696a-dGLa) [sage] 投稿日: 2021/09/15(水) 19:02:48.45 ID:fHmj5hYp0
スクレイピングすると地獄へ落ちるって本当ですか?
294 名前: デフォルトの名無しさん (ワッチョイ e57f-dGLa) [sage] 投稿日: 2021/09/15(水) 19:07:23.60 ID:0q0CE+HI0
スクレイピングすると地獄へ落ちるって本当ですか?

846:デフォルトの名無しさん
21/09/16 00:25:58.50 i5BIJ4kk.net
君の人生はもう地獄行きが確定してそうだから不安がるなよ

847:デフォルトの名無しさん
21/09/16 09:38:24.19 I3VTO38j.net
5ちゃんに一日1000回書き込むと極楽浄土が約束されます

848:デフォルトの名無しさん
21/09/16 12:46:14.58 AVL/loTg.net
sphinxのスレってwebpg板にもweb製作板にもここにも無いのか

849:デフォルトの名無しさん
21/09/16 12:56:20.01 ebDt5W+H.net
1)abc
みたいな文字列を")"の位置でsplitで分割したいとき、
1) と abc
のように分割文字も残したい場合、スマートな方法ありますか?
)でsplitして後から )を足す、という方法もあるかと思いますがなんかスマートでは無いですよね
re.splitならできるのかな?

850:デフォルトの名無しさん
21/09/16 14:15:16.89 AVL/loTg.net
re.findallでやってる例がググられた

851:デフォルトの名無しさん
21/09/16 14:18:35.84 Q5AMtJ/i.net
re.findall(r'(.+\))(.*)', '1)abc')
[('1)', 'abc')]

852:デフォルトの名無しさん
21/09/16 14:22:48.45 AVL/loTg.net
と思ったらそのサイトの下のほうに
python3.7からre.split()で行けると
a="alpha,beta,gamma"
import re
re.split("(?<=,)",a)

853:デフォルトの名無しさん
21/09/16 17:59:54.65 13aXyCX3.net
CentOS7(armv7l)
python3.6
/usr/localにgcc10.1.0インストールして/usr/lib/libstdc++.so.6を6.0.19→6.0.28に張り替えてある
pandasのバージョン下げたりしてみたけどimportの段階で駄目でした
誰か原因分かりますか?

$ LD_PRELOAD=/usr/local/lib/libstdc++.so.6 pipenv run python3 test.py
成功
$ pipenv run python3 test.py
失敗

import pandas._libs.window.aggregations as window_aggregations
ImportError: /usr/local/lib/libstdc++.so.6: undefined symbol: libiconv
<test.py>
import pandas as pd
url = 'ヤフーファイナンスのurl'
print(pd.read_html(url))
$ ls -l /usr/local/lib/libstdc++.so.6
/usr/local/lib/libstdc++.so.6 -> libstdc++.so.6.0.28

854:デフォルトの名無しさん
21/09/16 18:14:47.89 TQVwbqUl.net
nm でそのlibをスキャンしてみたら?
libiconvはどこにつながっている?

855:デフォルトの名無しさん
21/09/16 18:59:56.78 13aXyCX3.net
>>846
libiconvはUで確かに未定義でした

856:デフォルトの名無しさん
21/09/16 23:14:17.32 KHTFd4df.net
pyton3上で地図に棒グラフを立てたいと思い、cesiumpyにたどり着きました。
インストール後、import cesiumpyを実行したことろ、
AttributeError: partially initialized module 'cesiumpy' has no attribute 'data' (most likely due to a circular import)
と出ます。回避方法等ご教示くださいませ。

857:デフォルトの名無しさん
21/09/16 23:18:50.22 wbqs1W10.net
マイナーなライブラリについて質問しても答えてくれる人いないよ
circular importとか書かれてるけど、まさかそのファイル名がcesiumpy.pyだったりしないよね

858:デフォルトの名無しさん
21/09/16 23:31:37.25 KHTFd4df.net
>>849
ファイル名は違うものですが・・・マイナーなものは難しそうですね。
ご助言ありがとうございました。

859:デフォルトの名無しさん
21/09/17 08:59:56.61 UtF7UwZj.net
>>848
dependencyは満たしているか?

860:デフォルトの名無しさん
21/09/18 01:57:16.35 lb+sAgRD.net
スクレイピングの勉強するのですが、下手するとF5アタックになるとかの法的リスクと回避法を重視している入門書ってありますか?
今の所やりたいことは、特定の市町村の5年分気温気象データを収集して自分用に加工
近所のコインランドリーの稼働データを集計して空いてる確率が高い時間帯を調べるの2つです
前者は膨大なデータを取得する必要があります
後者は10分から20分おきにアクセスすることになります

861:デフォルトの名無しさん
21/09/18 02:04:45.09 75qnM2AM.net
>>852
自治体とコインランドリーに許可を取れ
ちゃんと筋を通せば金になるかもしれんぞ

862:デフォルトの名無しさん
21/09/18 08:28:17.55 bA/qQPAi.net
>コインランドリーの稼働データを集計して空いてる確率が高い時間帯
台風の最中は空いてそうだ

863:デフォルトの名無しさん
21/09/18 08:29:01.24 BxqtlgPJ.net
正攻法は>>853だけど裏技的にやるんだったらMVNOのSIM契約してipとかUAを変えながらスクレイピング。
向こうも機械アクセスだと気づきにくくなる。
ただカムフラしてまでやろうとしたということで相手に迷惑かけるかもって気持ちが入ることになるから訴えられたときには不利になる。

864:デフォルトの名無しさん
21/09/18 08:41:27.45 +7IeVSKz.net
>>852
図書館の例があるから無許可はもう何しても危ないよねっていうのが共通認識だと思うよ

865:デフォルトの名無しさん
21/09/18 09:09:44.75 2a7FPWkS.net
フォルダ内のファイルをenumerate()で一括連番リネームします
リネーム後の名前が既存かもしれないとき
1回目のループでexistsならパスとリネームを記録,大丈夫ならリネーム
2回目のループで記録したパスをリネーム
これで重複回避して全件リネームできますか?
手元ではできてる気がするんだけど,例外パターンがあるような気がする
(windowsのロングパスとか編集不可属性とか並び順の話は置いといてください)
--
元 : 新
000.txt → 1.txt
00.txt → 2.txt
1.txt → 3.txt
3.txt → 4.txt
こういうことがしたいのです

866:デフォルトの名無しさん
21/09/18 09:33:30.24 jUwIv+ht.net
e.txtがすでに存在していたらどうするん?

867:デフォルトの名無しさん
21/09/18 09:34:02.57 jUwIv+ht.net
3.txtの間違い

868:デフォルトの名無しさん
21/09/18 09:44:49.40 lb+sAgRD.net
>>853-856
回答ありがとうございます
心配性なので許可を取る以外のリスク回避策も知りたいのです
例えば、プログラム書いてもバグでF5アタックレベルの猛烈なアクセスをすることってありえますよね
そういうのが起きないような安全装置の作り方
自前で作ったサーバにも同時にアクセスしてアクセス頻度を証明するログを取る(v6共有IP巻き添え捜査対策)
何らかの理由で訴えられたとき勝つための材料を集めておく
などの方法を教えてくれる書籍がないかと探しています

869:デフォルトの名無しさん
21/09/18 09:46:54.79 BxqtlgPJ.net
.netだとtempのファイル名を持ってくるメソッドがあったな。
個人用途でリネーム中に他人がファイル名を変更するという懸念がない条件ならランダム英数字の中間ファイル名を経由してリネームすればいいんじゃない?
企業ユースとかでしっかりやる必要のある処理かつリネーム中の障害とかまで考えるなら安直なリネームは処理中の状態が不安定だから禁忌だと言われるね。
ファイルコピーすると同時に名称変更してリネーム後のファイル群を作り完成したところで元ファイルを削除みたいな動作にする。
(もちろんスピードやディスク容量とかの要件とも相談)

870:デフォルトの名無しさん
21/09/18 09:56:28.76 dDlDUvsj.net
対象フォルダにtmpフォルダ作ってそこにリネームして入れていけばいいんじゃ

871:デフォルトの名無しさん
21/09/18 09:56:58.79 9Dfq3hh+.net
>>857
その方法だと下の3行のリネームも無理じゃね
0.txt→ 1.txt
1.txt→ 2.txt
2.txt→ 3.txt
俺は、1回目でリネームできないときは
uuid.uuid4().hex を付加してリネームして
2回目で、uuid.uuid4().hexを付加したファイルを、目的のファイル名にリネームしてる

872:デフォルトの名無しさん
21/09/18 10:04:11.39 bA/qQPAi.net
>>857
000.txt -> 1.txt -> 2.txt -> 3.txt -> ... って無限に繰り返す危険は0と言い切れる?

873:デフォルトの名無しさん
21/09/18 10:44:49.91 2a7FPWkS.net
>>863
あーそうか…
じゃあexistsのときはunique_suffix付きでリネームして
最終的にケツ削る感じにします
uuid知らなかったんですが、いいですねこれ
今回は259文字制限下なのでアレだけど勉強になりました

874:デフォルトの名無しさん
21/09/18 12:17:29.33 9Dfq3hh+.net
>>865
ちなみに、existsするのがフォルダだった場合処理できないよ
2.txtみたいな名前のフォルダ・・・

875:デフォルトの名無しさん
21/09/18 13:21:25.11 IiEq2a0h.net
>>852
素人は、本番サーバーでテストしてはいけない。
素人のアプリは、バグで無限ループして、何万回もアクセスするから
必ずダウンロードして、自分のPC 内でテストしないといけない
それと本番サーバーに、100回とか繰り返しアクセスする場合は、
必ず、相手のrobots.txt を遵守すること!
または、相手と契約して、API を使うこと
基本、スクレイピングは営業妨害との戦い。
どの本にも、そう書いてある。
スクレイピングを推奨する本はない
必ず、robots.txt 遵守か、許可を得る、または契約すべき
山浦清透、2021/6
【作業工程フル公開】エンジニアが30万円案件の制作過程を公開
www.youtube.com/watch?v=tYbVl6N8oxI
この動画では、Laravel で、マイナビ転職をスクレイピングしている。
27:40 から、robots.txt を調べている

876:デフォルトの名無しさん
21/09/18 13:56:07.34 LBCfu3j9.net
どの本にも〜とか言う割に本は挙げないのな

877:デフォルトの名無しさん
21/09/18 15:25:34.95 ZDaB5e5K.net
selenium(ChromeDriver)で
すでにbuttonのWebElementまで取得している状態で、単にそれがクリック可能になるまで待つときはどう書けばいいの?
イメージは↓こんなだけどWebElementは引数に与えられないみたい。
WebDriverWait(driver, 5).until(
EC.element_to_be_clickable(button)
)

878:デフォルトの名無しさん
21/09/18 15:34:01.38 aJjTmiOO.net
改めて locator を与えればいいんじゃね?

879:デフォルトの名無しさん
21/09/18 15:58:23.33 9lUPAjpA.net
ある条件を満たした時にプログラムを再起動したくて
subprocess.call(__file__, shell=True)
と記述してるんですが挙動がおかしいです
どうおかしいのかと言うと、プログラムを強制終了したい箇所で
sys.exit()
と記述してるんですが、そこでも再起動されてしまいます
どう改善したら良いでしょうか

880:デフォルトの名無しさん
21/09/18 16:03:37.86 ZDaB5e5K.net
>>870
WebElementオブジェクトからlocarorって取得可能?
今回のbuttonが、findで一意に特定できないエレメントだから、Waitの例でネットによく書いてあるBy.xxxの書き方だと、複数のbuttonがWaitの対象になってしまうんだよね
特定の1つのエレメントだけをwaitの対象にしたいのだが

881:871
21/09/18 16:03:39.53 9lUPAjpA.net
>>871の補足です
subprocess.call(__file__, shell=True)
で、一度再起動した後で、
sys.exit()
を実行すると、強制終了しないで再起動してしまう挙動を何とかしたいということです

882:デフォルトの名無しさん
21/09/18 16:17:13.98 9lUPAjpA.net
自己解決しました
>>871>>873の質問は撤回します

883:デフォルトの名無しさん
21/09/18 17:09:13.84 jUwIv+ht.net
どう解決したのか書くのが礼儀やで

884:デフォルトの名無しさん
21/09/18 18:13:33.17 J85RgKD5.net
頭のおかしい人に以下のようなことを言われました
>>基本、スクレイピングは営業妨害との戦い。
>>どの本にも、そう書いてある。
>>スクレイピングを推奨する本はない
具体的な書籍名を教えてください

>>5ch は、マルチポスト禁止!
>>同じ質問を、複数のスレや外部のサイトに書いてはいけない
どこでそんなルールが決まっているのでしょうか?

885:デフォルトの名無しさん
21/09/18 18:30:17.02 6JilEPez.net
マルチポストすんな

886:デフォルトの名無しさん
21/09/18 18:53:11.55 b0edjBZj.net
>>876
お前頭悪そうだな

887:デフォルトの名無しさん
21/09/18 18:54:45.08 +/kaLHzE.net
>>876
> どこでそんなルールが決まっているのでしょうか?
決まってないよ
ただ普通の頭持ってたらマルチポストが回答者に失礼だと言うことはわかるはず

888:デフォルトの名無しさん
21/09/19 04:35:52.74 rCAdh0cW.net
>>876
Rubyガイジに頭悪いと指摘されるとか相当だぞ
肉塊の方が賢いまであるなw

889:デフォルトの名無しさん
21/09/19 05:44:05.93 yvbuOcQZ.net
肉塊って何?

890:デフォルトの名無しさん
21/09/19 06:35:05.82 XiUCEd2G.net
>>872
カスタム待機条件を作って elem.is_enabled() を返すのは?

891:デフォルトの名無しさん
21/09/19 15:05:50.16 snblcpQq.net
>>882
なるほど、カスタム待機条件というのがあったか。
これでエレメント引数にした待機できた。ありがとう

892:デフォルトの名無しさん
21/09/22 08:26:17.31 ykk+hhl9.net
Python3.9.7で、テキストボックスに右クリックメニューをつけたいのですがうまくいきません
input1 = tk.Entry(root,textvariable = x1_str, width = 5)
def show_right_click_menu(e):
____w = e.widget
____right_click_menu.entryconfigure("切り取り",
____command=lambda: w.event_generate("<<Cut>>"))
____right_click_menu.entryconfigure("コピー",
____command=lambda: w.event_generate("<<Copy>>"))
____right_click_menu.entryconfigure("貼り付け",
____command=lambda: w.event_generate("<<Paste>>"))
____right_click_menu.entryconfigure("削除",
____command=lambda: None if 0 else w.delete(w.index("sel.first"),w.index("sel.last")))
____right_click_menu.entryconfigure("すべて選択",
____command=lambda: w.select_range(0, "end"))
____right_click_menu.tk.call("tk_popup", right_click_menu, e.x_root, e.y_root)
選択していない状態で削除を実行すると下記エラーがコンソールにでます
_tkinter.TclError: selection isn't in widget .!entry
エラーが表示されないようする方法をご教示いただけませんか
エラーが表示されるだけで問題なく動いていますが気持ち悪いので

893:デフォルトの名無しさん
21/09/22 16:50:16.15 wN494UoL.net
pythonで、いわゆるDBのコネクションプールのような、限られた複数資源をプールにして使い回す基本的な仕組みって何かありますか?
DBで使うわけではないので汎用的なものを想定してます
たとえば資源として5つのインスタンスがあり、要求側はそれのいずれかが空いていれば排他的に1つのインスタンスを獲得し、すべて獲得済みの場合は任意の時間待機させる、というイメージです
要求側は必要な処理が終わればインスタンスをプールに返します
キューを使ってできそうな気がしますがもう少し実装しやすいものとかありますかね?

894:デフォルトの名無しさん
21/09/22 20:35:20.60 N9zBagLQ.net
>>885
しったかで書く
PyPIで多数ヒットするけど逆にこれってのはないからインターフェイスの好みで選択
どうせ中身はQueueかdeque
DB接続でいうとドライバやミドルウェアにだいたい専用のが付いてくる

895:デフォルトの名無しさん
21/09/22 23:15:37.85 rplKfx8l.net
>>886
ヒントありがとう
PyPIで見たら確かにだいたいqueueで実装されてた。ソース参考にして実装してみます

896:デフォルトの名無しさん
21/09/23 01:31:50.40 ERg2ncYO.net
Pythonも最近ではそんな真面目な用途でも使われそうな感じになってきてるのか。
おじさんびっくりだわ。

897:デフォルトの名無しさん
21/09/23 02:31:58.77 GanDJT5R.net
独学プログラマーを読んで勉強始めた方いますか?
Amazonレビュー見ると意味不明なURLや冗長な表現など初心者を惑わせる表記があるようで
初心者向けとは言えないような印象を受けますが、通しで読むとちゃんと初心者向けになってるのでしょうか?

898:デフォルトの名無しさん
21/09/23 09:05:11.72 aonnyzzk.net
self taught programmerは英語版をパラパラと眺めた程度だけど、悪い本じゃないと思う
どの教材にも欠点はあるから、多少のことは気にせずにさっさと取り掛かったほうが良いと思う
初心者が自分にとって完璧な教材を見つけるのは無理
他の本のほうが良さそうなら他のでもいいし、無料のweb教材でもいいし

899:デフォルトの名無しさん
21/09/23 09:37:27.55 aonnyzzk.net
ちなみに『独学プログラマー』は「自力でプログラムを覚えて仕事を始めるまで」が一番大きなテーマであって
pythonのことを手取り足取り教える目的で書かれたものではない
単純にpythonの基本を学びたいだけなら、もう少し狭い内容を扱った他の本が良いかもしれない

900:デフォルトの名無しさん
21/09/23 11:14:45.24 zah9lHsX.net
そもそも独学出来るようなプログラマーならそんな本読まなくても出来るからな

901:デフォルトの名無しさん
21/09/23 12:55:36.27 aonnyzzk.net
>そもそも独学出来るようなプログラマーならそんな本読まなくても出来るからな
これはその通りで、基礎的なことは全部ネットに無料で落ちているので、わざわざ本を買う必要はない。
本で学ぶのが好き、って人もいるだろうから全否定するつもりはないけど。

902:デフォルトの名無しさん
21/09/23 13:12:18.93 3iEJN86R.net
spring bootは本買わないと無理あのntt data様が出してる奴

903:デフォルトの名無しさん
21/09/23 15:24:28.97 Hq81xlZ0.net
>>888
LAMP(Linux,Apache,MySQL or MariaDB,PHP or Perl)のPがPythonに移行されつつある
DBの方もPostgreSQLに変わりつつある

904:デフォルトの名無しさん
21/09/23 15:26:56.89 xxtNZLaL.net
LAPP?

905:デフォルトの名無しさん
21/09/23 15:40:45.97 w4tdfW/t.net
ApacheもNginxに移行

906:デフォルトの名無しさん
21/09/23 15:50:02.39 Ru7FlOs1.net
Apache も Nginx に移行してるから LNPP かな?

907:デフォルトの名無しさん
21/09/23 15:55:26.37 Sp5Iyysf.net
いまさらPostgresが主流になるような感じはしないがな。
DBMS全体でPostgresのシェアは上がってきているがMySQLも同様にシェアを拡大している。
そもそも普及率が倍くらい違うし。

908:デフォルトの名無しさん
21/09/23 16:00:23.97 Hq81xlZ0.net
MySQLはOracle→MySQLに意図的にOracleが動いてるみたいね

909:デフォルトの名無しさん
21/09/23 16:18:46.38 Ru7FlOs1.net
まあ倍半分違う(対数スケールなので注意してね)からそうそう主流が入れ替わることはないと思うけど PostgreSQL と MongoDB が頑張ってるな
URLリンク(news.mynavi.jp)

910:デフォルトの名無しさん
21/09/23 16:20:47.11 /gKnAjHi.net
postgreSQLは最近覚えたけどそこまでメリットは感じない
pythonから叩くにあたってmysqlから面倒くさい部分は増えた

911:デフォルトの名無しさん
21/09/23 17:48:30.88 LWGez+JK.net
pip listでsympyが確認できるのに
>>> import sympy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'sympy'
となるのはなぜですか?

912:デフォルトの名無しさん
21/09/23 18:00:58.85 3iEJN86R.net
インタープリターに入らずにpip install sympyだって前ここで誰かが言ってた気がする

913:デフォルトの名無しさん
21/09/23 18:05:30.32 cmFu96z6.net
実行したpipはver2系だったってのは(俺が)割とよくやるミス

914:デフォルトの名無しさん
21/09/23 18:08:54.09 Hq81xlZ0.net
>>902
PostgreSQL用ドライバ必要だからな

915:デフォルトの名無しさん
21/09/23 18:23:39.46 QMUWvoXV.net
>>905
同じく
そのためのpip3だけどね

916:デフォルトの名無しさん
21/09/23 19:48:46.26 ERg2ncYO.net
MySQLは単純かつ高速に動かしたい時は鉄板

917:デフォルトの名無しさん
21/09/23 20:52:10.59 LWGez+JK.net
>>904
>>905
pipでもpip3でももうインストールされていますみたいなメッセージが出ます

918:デフォルトの名無しさん
21/09/23 22:25:39.27 Ok65a0lv.net
>>884
自己解決しました
def show_right_click_menu(e):
____w = e.widget
____def show_right_click_menu_delete():
________nonlocal w
________try:
____________w.delete(w.index("sel.first"),w.index("sel.last"))
________except:
____________pass
____right_click_menu.entryconfigure("切り取り",
____command=lambda: w.event_generate("<<Cut>>"))
____right_click_menu.entryconfigure("コピー",
____command=lambda: w.event_generate("<<Copy>>"))
____right_click_menu.entryconfigure("貼り付け",
____command=lambda: w.event_generate("<<Paste>>"))
____right_click_menu.entryconfigure("削除",
____command= show_right_click_menu_delete)
____right_click_menu.entryconfigure("すべて選択",
____command=lambda: w.select_range(0, "end"))
____right_click_menu.tk.call("tk_popup", right_click_menu, e.x_root, e.y_root)
tkinterがよく分からない
次は、undo redo をなんとかしたい

919:デフォルトの名無しさん
21/09/24 00:17:26.60 wqDlteq1.net
>>867
レス遅れてしまい申し訳ありません
時間つくっていくつか書籍を立ち読みしてみましたが
訴えられる前提でスクレイピングする本は当たり前のようにありませんでした
テストサーバでプログラム作ってから、相手に連絡した上で動作させるのが最低限のマナーで
あとはもう自分で創意工夫して逮捕防ぐしか無いですね

920:デフォルトの名無しさん
21/09/24 08:20:48.10 KibxKmAg.net
>>730
このpython3.8だとproxy繋がるけど3.9だとダメになる問題は自分自身で解決しますた。
URLリンク(github.com)
こことかそのリンク先に書いてある。
社内環境でセキュリティのためproxyでHTTPS通信を復号化してるんだけどそんな特定条件で起こるらしい。
.condarcのhttpsのproxyをサンプルを真似してURLリンク(hogehoge)って書いてたけどhttpに修正したら繋がるようになった。

921:デフォルトの名無しさん
21/09/24 08:36:42.56 EhTNSQ6t.net
ニシキヘビともんごイカか
LNPyM

922:デフォルトの名無しさん
21/09/24 09:00:12.81 sjjiTDvK.net
pandasで下の様なデータフレームOLD,NEWがあります。
df_OLD
 商品名 価格 種類
0 バナナ 100 フルーツ
1 トマト 150 野菜
df_NEW
 商品名 価格 種類
0 バナナ 120 フルーツ
1 トマト 130 野菜
OLDとNEWを商品名で比較して、一致した場合にNEWの値と置き換えたいときってどの様にしたら良いのでしょう?
一気に比較してくれる方法とかあるんでしょうか?
1行ずつ比較しないといけないのでしょうか?

923:デフォルトの名無しさん
21/09/24 09:05:37.12 wqUtxwi5.net
>>914
価格の値を


924:更新すれば良いのかな? pandas.DataFrame.update でいかがでしょう 公式 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.update.html 日本語の参考記事は適当に検索すれば出てくる



925:デフォルトの名無しさん
21/09/24 09:08:51.13 KibxKmAg.net
updateは?

926:デフォルトの名無しさん
21/09/24 09:29:05.87 sjjiTDvK.net
>>915-916
後出しみたいになって申し訳ありません。
update試しましたが、同一行を置き換えるのですね。
やりたいこととしては、NEWの方は並び順は一致せず、
さらに新規データの追加やキーとなる列(商品名)以外の内容の変更もしたいのです。
df_NEW
 商品名 価格 種類
0 スイカ 150 野菜
1 バナナ 120 フルーツ
2 トマト 130 野菜B

927:デフォルトの名無しさん
21/09/24 09:37:04.32 wqUtxwi5.net
やりたいことが良く分からないんだけど
(1) df_NEW のデータは全て保持したい
(2) df_OLD にあるもので、df_NEWに無いものはdf_NEWに追加したい
という解釈でも良いのかな?
それなら df_NEWと df_OLD の差分をとって、そのうちdf_NEWに欠けているものをdf_OLDから追加するという方法でも良い?

928:デフォルトの名無しさん
21/09/24 09:38:42.26 sjjiTDvK.net
>>918
わかりづらくてすみません。
・OLD側に同じ商品名があればNEWの内容で更新。
・ NEWにしか無い商品はOLDに追加です。

929:デフォルトの名無しさん
21/09/24 09:43:23.68 wqUtxwi5.net
>>919
df_NEWというのはすでにpandas.DataFrameの形で持っているということで良いですか?
その場合、df_NEWに入っている値は全て正しい(更新する必要はない)ということになりますよね。おそらく。
それならdf_OLDを更新するという発想にこだわる必要はなくて、NEW無いものをOLDから追加するという発想に転換しても良いのでは?
その場合、私ならmergeを使うと思います。
URLリンク(pandas.pydata.org)

930:デフォルトの名無しさん
21/09/24 09:46:08.06 sjjiTDvK.net
>>920
ありがとうございます。なるほど、そっちの考え方の方が良さそうですね。
ちょっと試してみます。わからなかったらまた質問させてください。

931:デフォルトの名無しさん
21/09/24 10:15:48.12 sjjiTDvK.net
現状のままだと、希望結果=NEWになってしまうので少し変更して試しました。
df_New2=pd.merge(ldf_New ,ldf_Old,on=['商品名'],how='outer')
df_Old**************************************************
商品名 価格 種類
0 バナナ 100 フルーツ
1 トマト 150 野菜
2 人参 50 野菜C
df_New**************************************************
商品名 価格 種類
0 スイカ 150 野菜
1 バナナ 120 フルーツ
2 トマト 130 野菜B
df_New2**************************************************
商品名 価格_x 種類_x 価格_y 種類_y
0 スイカ 150.0 野菜 NaN NaN
1 バナナ 120.0 フルーツ 100.0 フルーツ
2 トマト 130.0 野菜B 150.0 野菜
3 人参 NaN NaN 50.0 野菜C

932:デフォルトの名無しさん
21/09/24 10:16:10.57 sjjiTDvK.net
しかし希望する結果は以下のとおりです。
この様にしたい場合どうしたら良いのでしょう?
df_New2**************************************************
商品名 価格 種類
0 スイカ 150.0 野菜
1 バナナ 120.0 フルーツ
2 トマト 130.0 野菜B
3 人参 50.0 野菜C

933:デフォルトの名無しさん
21/09/24 10:17:19.90 sjjiTDvK.net
すみません。式は以下です
df_New2=pd.merge(df_New,df_Old,on=['商品名'],how='outer')

934:デフォルトの名無しさん
21/09/24 10:34:25.61 KibxKmAg.net
日本語で仕様が決まったらまたご相談くださいって感じかな。
その場合はこうして欲しいってのがコロコロ変わりそう。

935:デフォルトの名無しさん
21/09/24 11:00:59.24 +y7bOBPx.net
正規表現のfindall()の挙動について質問です
内線を含む電話番号に対する正規表現パターンを用意(現在使用している参考書のコピペ)し、
適当な番号を与えfindall()で取得したリストを出力しました
コードは↓に
URLリンク(techiedelight.com)
結果としては print(regex.findall('012-345-6789 x 123')) に対し、出力が
[('012-345-6789 x 123', '012', '-', '-', ' x 123', 'x')]
 だったのですが、何故こうなるのか解りません
'012-345-6789 x 123', '012', '-', までは解るのですが、なぜそのあと '345' や '6789' が取得されず、
また、'x 123' の取得後に 'x' だけが取得されるのでしょうか

936:デフォルトの名無しさん
21/09/24 11:27:05.39 fM0vlPdr.net
必要な部分は()で囲え
不要な部分は(?:)にしろ

937:デフォルトの名無しさん
21/09/24 12:00:20.17 +y7bOBPx.net
>>927
あ~~途中の \d{3} などは () で囲われてないからグルーピングされてないために弾かれちゃってたんですね
以下のようにして
URLリンク(techiedelight.com)
以下の出力結果を得ることができました
[('012-345-6789 x 123', '012', '-', '345', '-', '6789', ' x 123', 'x')]
最後に取得されている x については (?:) を使用するんでしょうか?
(?:) という記法についてまだ知らないので調べてみます
レスありがとうございました

938:デフォルトの名無しさん
21/09/24 12:10:24.86 sjjiTDvK.net
いろいろ試して、以下で思う様な結果を得る事ができました。
アドバイスありがとうございました。
df_New2=pd.merge(df_New,df_Old,on=['商品名'],how='outer',suffixes=("","_d"))
df_New2['価格'].fillna(df_New2['価格_d'], inplace=True)
df_New2['種類'].fillna(df_New2['種類_d'], inplace=True)
df_New2.drop(['価格_d','種類_d'], axis=1)
上記2行目と3行目ってまとめて書いたり、”_d”で終わる列とかで指定できるのでしょうか?

939:デフォルトの名無しさん
21/09/24 12:12:56.73 /f3Q922M.net
>>923
それだったら、同じ商品名のデータを上書きするっていう考え方じゃなくて、
oldだけに有ってnewに無いデータだけ抽出して
それをnew側のdfにくっ付けるってやり方があるかな
一応、想定通りには動くけど
大分不細工なやり方になっちゃったから許して……
URLリンク(ideone.com)

940:デフォルトの名無しさん
21/09/24 12:23:17.91 sjjiTDvK.net
del_old_df = old_df[old_df["商品名"].isin(new_df["商品名"])]
こんなこともできるんですね。ありがとうございます。
こっちの方がてっとり早いですね。

941:デフォルトの名無しさん
21/09/24 16:46:18.89 EhTNSQ6t.net
sympyがあれば中学の数学の基礎までなら

942:デフォルトの名無しさん
21/09/24 17:00:32.91 41w/BiYs.net
>>909
pip show sympy
のLocationと
import sys, pprint
pprint.pprint(sys.path)
を見比べてみよう

943:デフォルトの名無しさん
21/09/24 17:01:28.66 ZghczHx7.net
ファイルの最後の行に
return 1
と書くと、「SyntaxError: 'return' outside function」
というエラーが出てしまいます
ファイルの最後の行に書く必要はないってことですか?

944:デフォルトの名無しさん
21/09/24 17:02:20.29 LxZpM9VS.net
書く必要がないではなく書いてはいけない

945:デフォルトの名無しさん
21/09/24 17:06:17.94 ZghczHx7.net
関数の最後の行には書くのに
ファイルの最後の行に書いちゃいけないのは何故ですか?

946:デフォルトの名無しさん
21/09/24 17:13:47.22 YQZl96Xn.net
どこに戻るんだよ?

947:デフォルトの名無しさん
21/09/24 17:15:32.95 ZghczHx7.net
では、親プロセスに戻る時に
どうやって戻り値を返すんですか?

948:デフォルトの名無しさん
21/09/24 17:36:24.36 TJ6IbgR5.net
sys.exit()

949:デフォルトの名無しさん
21/09/24 18:11:39.61 ZghczHx7.net
>>939
そうやるんですか
ありがとうございます

950:デフォルトの名無しさん
21/09/24 19:58:52.71 cH5BLcev.net
もしかして
1 名前順並び
2 ファイル名は任意
という条件で
指定したファイルの1つ下に新規ファイルを保存する
って難しいですか?
makeChildPathName()みたいな関数が作りたい
URLリンク(i.imgur.com)
2番目のファイルパスを指定したら2番目と3番目の間に新規ファイルを挿入保存したいということです

951:デフォルトの名無しさん
21/09/24 20:28:15.14 zSlDj9mb.net
任意のフォルダ下のファイル名を取得して自分で並べ替えて挿入すればいいじゃん。
自分だったらWindowsのファイルの並び順の仕様を調べてPython側で同じように並べ替える。
それがめんどくさければsubprocessでDIRの結果を取ってくる。
「間に入るように」の部分は仕様が不明確だから答えようがない。
もし仕事なら_001とかつければいいと思ってるなら危険。
挿入されるファイルの規則に沿ったファイルがあらかじめ存在した場合にどうすればいいのかとか元のファイル名がパス260文字のギリギリまであったらどうするかとかまで詰めないと。

952:デフォルトの名無しさん
21/09/24 21:20:10.36 /dwjMJ8P.net
>>942
path1<new<path2
になる文字列の自動生成でしょ
無理じゃないか
windowsは仕様公開してないし

953:デフォルトの名無しさん
21/09/24 21:53:51.05 Kyc5NeAQ.net
>>943
元のファイル名は、数字のみといった規則があればできるかも
汎用的なのはリネームしないと挿入できないケースもあるしめんどいね
パスの長さの規則もないと辛い

954:デフォルトの名無しさん
21/09/25 06:29:33.65 dHZYhTax.net
plot_surfが僅か3600座標の描画で20分以上掛かる
点の散布図なら100万座標でも1分未満だが

955:デフォルトの名無しさん
21/09/25 11:31:35.29 lBxoEpbF.net
windowsはcmdプロンプトでdirした順番と
explorerで観れる順番がそもそも違うし
sortしても解決しないω

956:デフォルトの名無しさん
21/09/25 11:32:33.68 lBxoEpbF.net
>>945
meshにしてる?

957:デフォルトの名無しさん
21/09/25 14:13:18.95 hl+7wKHR.net
>>946
explorerでってんだからAPIソート1択でしょ。そこは

958:デフォルトの名無しさん
21/09/27 19:04:05.97 EG3c4N9U.net
辞書のkeyに対するリスト型のvalueを使いやすいように良い感じに分解したい、または取り出したいんですがどうやれば良いんでしょう?

959:デフォルトの名無しさん
21/09/27 19:15:37.57 UiRgP5VH.net
ちょっと何言ってるかわかんない

960:デフォルトの名無しさん
21/09/27 19:23:20.36 EG3c4N9U.net
値がリストなんですよ

961:デフォルトの名無しさん
21/09/27 19:26:32.30 h2Q4WFZZ.net
ただの2次元データだから
keyとリストのindexで2回解決したら任意のデータにはたどり着けるけど
どう扱いたいのか目的がわからんとなんとも

962:デフォルトの名無しさん
21/09/27 19:38:34.45 E71fEMCh.net
>>951
リストなら分解する必要なくね?

963:デフォルトの名無しさん
21/09/27 21:43:37.37 EG3c4N9U.net
分解しないでどうやって辞書の値のリストを取り出せば良いのですか?

964:デフォルトの名無しさん
21/09/27 21:45:21.63 hDBwg8Mc.net
>>954
>>950

965:デフォルトの名無しさん
21/09/27 21:48:03.64 NoJANVQi.net
どっかのサイトからパクってきた
data = { "in_channels": [1024, 1024, 512, 256, 128], "out_channels": [1024, 512, 256, 128, 64], "upsample": [True, True, True, True, True], "resolution": [8, 16, 32, 64, 128], "attention": { 8: False, 16:False, 32:False, 64:True, 128:False } }
for seq in zip(*(v.values() if type(v) is dict else v for v in data.values())):
print(seq)

966:デフォルトの名無しさん
21/09/27 21:55:01.96 NoJANVQi.net
>>954
ああこういうこと?
arr = {key1: [1, 2, [['target', ...], ...], ...}
print(arr[0][2][0])

967:デフォルトの名無しさん
21/09/27 22:01:54.51 h2Q4WFZZ.net
取り出すというのが削り出すの意味なら
>>> d = {2: [21,22], 3: [31,32,33], 4: [41,42,43,44]}
>>> d.pop(3)
[31, 32, 33]
>>> d
{2: [21, 22], 4: [41, 42, 43, 44]}

968:デフォルトの名無しさん
21/09/27 22:05:54.30 NoJANVQi.net
間違えた
arr = {'key1': [1, 2, [['target', ], ], ], }
print(arr['key1'][2][0])
私も勉強中です

969:デフォルトの名無しさん
21/09/27 22:10:19.33 EG3c4N9U.net
全然わかんないっす…w
イメージ的には辞書に、test1とtest2というキーがあって、
test1のvalueがリスト形式で
name, tanaka
age, 30
のときに
printでnameとtanaka を表示させたいです

970:デフォルトの名無しさん
21/09/27 22:21:28.01 2GjWPTj5.net
>>960
URLリンク(ideone.com)
ここにその辞書データを書いてきて

971:デフォルトの名無しさん
21/09/27 22:33:02.74 jqnAXCBZ.net
>>960
実際のデータ構造をちゃんと書いてもくれんと全く分からんぞ
レス通りの内容だとこんな感じになるけど、明らかにデータ構造が変だし
URLリンク(ideone.com)

972:デフォルトの名無しさん
21/09/27 23:04:44.30 EG3c4N9U.net
おお、こんなサイトあるんですね
ちょっと勉強がてら実データ入れてやってみます!ありがとうございます

973:デフォルトの名無しさん
21/09/28 00:08:18.44 6t0zGqaE.net
>>962
>>> for _, name, _, age in data.values():
... print(name, age)
...
tanaka 30
suzuki 28
>>> for key, [_, name, _, age] in data.items():
keyがほしれば

974:デフォルトの名無しさん
21/09/28 08:23:37.75 QDSiHXp+.net
>>960-961
この流れ完璧に各地の現場で毎年繰り返される先輩と後輩の間のやりとりだな。
こうしたいんですって説明させることで質問者の脳みそが活性化されて問題の90%くらいは解消される。
残り1割は便利なメソッドややり方を知ってるかどうかだけという。

975:デフォルトの名無しさん
21/09/28 12:44:54.83 EdXmOL1P.net
openpyxlで指定の範囲例えばA1:C5のセルの外枠だけ罫線引くのはどうすれば良いですか?

976:デフォルトの名無しさん
21/09/28 14:22:03.09 nD0g4rLv.net
URLリンク(excel-ubara.com)
URLリンク(qiita.com)
URLリンク(sites.google.com)

977:デフォルトの名無しさん
21/09/28 15:05:35.43 EdXmOL1P.net
>>967
んー、あまり参考にならなかったんですけど結局はセルの1つずつでしか罫線引けないんで
複数範囲のセルの外枠のみを引こうと思うとforで回して上下左右辺のみの時だけ対象の罫線引くって処理にするしか無いんですかね

978:デフォルトの名無しさん
21/09/28 15:19:16.11 936Pqhrd.net
だったら最初から1発で線引くことできますか?って聞けや

979:デフォルトの名無しさん
21/09/28 15:28:04.89 EdXmOL1P.net
すみません、openpyxlで指定の範囲の外枠のみの罫線を1発で引く方法ありますか?

980:デフォルトの名無しさん
21/09/28 16:13:38.41 hcEOSxvd.net
ライブラリ純正のやり方ではない。
こういうの発明してる人がたくさんいるから見栄えが良いのを適当にどうぞ。
URLリンク(stackoverflow.com)

981:デフォルトの名無しさん
21/09/29 11:36:55.19 H8LnbJn1.net
pythonのコマンドライン引数にJSON.stringifyした辞書を含む配列を渡すと、
辞書の中身が配列として分割されてしまいます。どうしたら辞書をそのまま渡せるのでしょう?
VSコードに渡した引数
"args":["[{¥"test¥":¥"a¥",¥"testB¥":¥"b¥"}]"]
argv[1]:'["test":"a"]'
argv[2]:’[“testB”:”b”]’

982:デフォルトの名無しさん
21/09/29 12:33:40.08 vWqip1VL.net
普通はコマンドライン引数に、JSON などのオブジェクトの構造物を渡さない。
構造物はファイルにまとめて、アプリ内で、そのファイルを読み込む
コマンドライン引数は、「a b c」みたいな空白区切りの文字列だけ

983:デフォルトの名無しさん
21/09/29 13:02:17.67 H8LnbJn1.net
ありがとうございます。
配列のみだと問題なかったので、大丈夫かと思っていました。
一旦書き出してから読み込むことにします。

984:デフォルトの名無しさん
21/09/29 22:33:50.89 J7GS4Ln7.net
AnacondaのidleがC:\~~\[username]\Anaconda3\Scripts\の中にあるのを
今更知ったw
多少のファイルを作りながら動かすなら一々JupyterやらSpyderやらを
重いなあと思いながら開かなくても良かったって事か

985:デフォルトの名無しさん
21/09/30 03:50:39.98 qnQatXiV.net
実はidle好きの俺もこれには歓喜!

986:デフォルトの名無しさん
21/09/30 10:29:01.81 rsDh5L5E.net
base64使えば良い

987:デフォルトの名無しさん
21/09/30 10:30:11.82 rsDh5L5E.net
>>975
Anaconda prompt も一緒にインストールされるだろ?ショートカットも出来てるだろ?

988:デフォルトの名無しさん
21/09/30 12:37:26.63 c7qiSj6D.net
>>977
この返しはベテランの香りがしますねぇ。
base58にすると通っぽいけど余計な混乱を巻き起こすから滅多なことでは使ってはいけない。

989:デフォルトの名無しさん
21/09/30 14:22:25.86 W8iUKo94.net
Anaconda promptだとファイルを作りながら実行って考えるならidleより面倒

990:デフォルトの名無しさん
21/09/30 15:06:50.08 HC7iXZId.net
base64と言っても
. とか / とか使うパターン以外に
+ とか - とか使うのもあるし
都合が悪ければ適当にコマンドラインで安全なキャラクターを選んで良い
base64 の亜種

991:デフォルトの名無しさん
21/09/30 17:28:17.23 uM1Dq10V.net
idleってコメントをPEP8準拠(# )にできないの?

992:デフォルトの名無しさん
21/09/30 20:12:26.79 afPZA96P.net
パソコン上で選択中のフォルダかファイルのパスを取得したいんだけど
各種ダイアログ経由しない方法ってありますか?
例えばGUIにコピペボタンを実装しといて
エクスプローラーでファイルクリック
GUIボタンクリックでその場に複写 みたいなことがしたいです

993:デフォルトの名無しさん
21/09/30 21:15:31.19 BqDA7lQW.net
SHIFTを押しながら右クリック→”パスのコピー”をクリック

994:デフォルトの名無しさん
21/09/30 22:37:34.91 Q+Yf9LrK.net
> お前は毎朝起きるたびに俺に負けたことを思い出すよ^^
あー、ホンッとに思い出すなあ(笑)
キチガイの嘘つきの低レベルFランの、
朝鮮ゴキブリBot君は、
チョン独特の「なにもできないけど俺のほうがジャップより偉い!」的な
ことはよーくわかったよ。
ホントなにもできない朝鮮ゴキブリBot君!
クソチョンw

995:デフォルトの名無しさん
21/10/01 00:29:07.44 753Hv+uI.net
>>983
簡単にできるかと思ったけど難しい気がする

996:デフォルトの名無しさん
21/10/01 01:24:45.73 b9bDtpSh.net
macのFinderなら割りと簡単だけど
Explorerだと拡張書くか探すことになりそう
Pythonだけでは書けないし

997:デフォルトの名無しさん
21/10/01 03:14:59.71 4hZQhWFc.net
エクスプローラーは選択されてる状態でCTRL+Cでもクリップボードにフルパス入るから
キー入力メッセージ送ってクリップボード読めばいいんでね

998:デフォルトの名無しさん
21/10/01 03:45:28.03 LRVjWXLk.net
ドラッグアンドドロップじゃダメなの?

999:デフォルトの名無しさん
21/10/01 06:32:34.44 753Hv+uI.net
要件はオブジェクトクリック、GUIクリックでしょ
間で操作入れるなら普通にダイアログ出せばいい

1000:デフォルトの名無しさん
21/10/01 07:07:02.57 S6tJEmA+.net
その要件が普通じゃ無いこと気づけよー
エクスプローラーが複数立ち上がってたらどうするの?
ファイル選択できるのはエクスプローラー限定なの?
Windows のマナー通り、ファイル選択ダイアログを
出せば済む話だと思うんだが。

1001:デフォルトの名無しさん
21/10/01 10:20:54.28 5A2oAz4+.net
>>975
VSCodeのPythonのpath欄にAnaconda(の特定環境の)python.exeのあるフォルダのアドレス(世に言うpath)を
入力すればいいだけ

1002:デフォルトの名無しさん
21/10/01 10:42:33.79 js1izThg.net
エクスプローラーからSendToかドラッグ&ドロップだな
SendToはショートカットも割り当てられるのでキーボードだけでも操作可能
ただ起動中のGUIで受け取るためにはそれ用の受け口を用意しておく必要がある
コピペはUXとして微妙なので人に使わせるアプリならやめたほうがいい気がする

1003:デフォルトの名無しさん
21/10/01 11:18:02.98 PaEGpo5A.net
例えば、デスクトップにショートカットを作って、Ruby スクリプトを起動する。
Explorer からファイルとフォルダを、ショートカットへdrag & drop すると
リンク先
C:\Ruby25-x64\bin\ruby.exe C:/Users/Owner/Documents/Ruby/desktop/a.rb
スクリプトの内容は、
puts ARGV # 配列
sleep # 出力したコマンドプロンプト画面を閉じないようにする
出力
C:\Users\Owner\Documents\あ.txt
C:\Users\Owner\Documents\a

1004:デフォルトの名無しさん
21/10/01 11:25:55.56 b9bDtpSh.net
Ruby 2.5
status: eol
release date: 2017-12-25
EOL date: 2021-03-31

1005:994
21/10/01 12:53:42.59 PaEGpo5A.net
WSL2, Ubuntu 18.04 には、
日本人が作ったanyenv で、Ruby 2.6.6 をインストールしているけど、
Windows 用のMSYS2 のRuby では、Ruby 2.6 以降、
巨大なコンパイル環境を入れないと、コンパイルできないモジュールがあるので、やっかい
それで、Windows用Ruby は、2.5 を使っている
また、WSL2 には、drag & drop できない

1006:デフォルトの名無しさん
21/10/01 13:11:48.98 q6100VNR.net
>>983
でけたよ。
あらかじめpip install pywin32しておいてね
import win32com.client as win32
shell_app = win32.Dispatch('Shell.Application')
for win in shell_app.Windows():
print(win.LocationName)
for item in win.Document.SelectedItems():
print(f' {item.Name} ({item.Path})')

1007:デフォルトの名無しさん
21/10/01 14:43:29.34 QbIBSCAW.net
>>997
たいへん感謝しております
URLリンク(stackoverflow.com)
URLリンク(timgolden.me.uk)
この辺も読んで精進します

1008:デフォルトの名無しさん
21/10/01 15:25:02.82 xAAYN8E1.net
Rubyはオワコン

1009:デフォルトの名無しさん
21/10/01 15:37:18.54 xAAYN8E1.net


1010:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 113日 18時間 31分 34秒

1011:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch