【まず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 ###
33デフォルトの名無しさん
垢版 |
2021/10/05(火) 20:47:41.95ID:UD2fraRe
>>28
import re
basename = ...
if m:=re.match(r'(.*)(\.([^.]+))|(.*)',basename):
. basename_without_ext = m.group(1) or m.group(4)
. ext_without_dot = m.group(3)
2021/10/05(火) 21:03:44.19ID:db3O09Qx
>>14
from pathlib import Path

p = Path('hoge.jpg').resolve().absolute()
ext_without_dot = p.suffix[1:]
basename_without_ext = p.stem
2021/10/05(火) 21:38:18.61ID:+YzW1gaU
>>33
少し書き換えましたが希望した動作をしています
勉強になりますた、感謝

import os, re
file = "C:\\test\\a"
#file = "C:\\test\\a.b"
#file = "C:\\test\\.b"
#file = "C:\\test\\..b"
basename = os.path.basename(file)
if m := re.match(r'(.*)(\.([^.]+))|(.*)', basename):
____basename_without_ext = m.group(1) or ""
____ext_without_dot = (m.group(2) or m.group(4)).removeprefix(".")
print("\""+basename_without_ext+"\"")
print("\""+ext_without_dot+"\"")
2021/10/05(火) 21:49:55.73ID:+YzW1gaU
>>34
"C:\\test\\.b"
の場合、うまくいきません
resolve() absolute() 等初めて見るものが多いので調べてみます
2021/10/05(火) 22:19:04.45ID:yMBvIvKg
3.8からのセイウチ構文は便利だと思うけど、見通し悪くなるしどうも好きになれない
先に変数にしたほうがわかりやすくないか?
if m := re.match(r'(.*)(\.([^.]+))|(.*)', basename):

m = re.match(r'(.*)(\.([^.]+))|(.*)', basename)
if m:
2021/10/05(火) 22:29:08.23ID:db3O09Qx
>>36
はい私の優勝w
p = Path(f).resolve().absolute()
stem = p.stem
ext = p.suffix[1:]
if stem.startswith('.') and not ext: #ファイル名が空の場合
stem, ext = ext, stem

basename_without_ext = stem
ext_without_dot = ext
39デフォルトの名無しさん
垢版 |
2021/10/05(火) 22:36:52.31ID:JbR3YU6O
おまいらマジでポンコツだなω
2021/10/05(火) 22:46:47.72ID:+YzW1gaU
>>38
stem, ext = ext, stem[1:] ですね。
最初に覚えた書き方から少しずつpathlibに書き換えてるけどまだ慣れない
os.pathが頭にこびりついてる
41デフォルトの名無しさん
垢版 |
2021/10/05(火) 23:11:06.33ID:UD2fraRe
>>36
basenameって書いてるのだからbasenameを渡して
2021/10/05(火) 23:34:48.42ID:+YzW1gaU
>>41
??
>>35
basename = os.path.basename(file)
でbasename渡してますが、??
>>36>>34へのレスですが
2021/10/06(水) 00:13:14.92ID:uIHfQozZ
こうやってみたら動いてる
単純になった

import os
file = "C:\\test\\.b"
basename = os.path.basename(file)
basename_without_ext = os.path.splitext("!" + basename)[0][1:]
ext_without_dot = os.path.splitext("!" + basename)[1][1:]
2021/10/06(水) 00:26:22.25ID:63dnmtAL
ドットファイル名だから
".b"が返らないとダメなのでは?
2021/10/06(水) 00:28:36.53ID:sqxilgxU
Ruby ではパス区切りに、/ も使える

require 'fileutils'

Dir.glob( 'c:/users/owner/documents/あ/*' )
.select { |full_path| File.file?( full_path ) } # ファイルのみ
.each do |full_path|
file_name = File.basename( full_path ) # ファイル名
file_extname = File.extname( file_name ) # 拡張子

puts "#{ file_name } : #{ file_extname }"
end

出力
あ.txt : .txt
い.csv : .csv
2021/10/06(水) 00:38:36.79ID:uIHfQozZ
>>44
LinuxではそうでもWindowsは違うと思うんですが・・・
2021/10/06(水) 00:53:55.80ID:63dnmtAL
>>46
今のWindowsはエクスプローラー上でドットファイルの作成が出来るようになってるし
WSLなんかでも困ることになるので、ちゃんとドットファイルとして扱ったほうがいいと思うよ
2021/10/06(水) 01:06:01.53ID:uIHfQozZ
>>47
不特定多数からファイル受け取るんです
エクスプローラー上でドットファイルの作成が出来るからなおさらドットファイルとしては扱えないんです
2021/10/06(水) 01:14:22.59ID:63dnmtAL
じゃあ、例えば以下のファイル名(パス)の場合、
どんな結果を期待しているの?

file = r'..txt'
file = r'test.txt'
file = r'test.tar.xz'
file = r'test'
file = r'.\test.txt'
file = r'c:\test.txt'
file = r'c:/test.txt'
file = r'C:\dir\.test'
file = r'C:\dir\.test.txt'
file = r'C:\dir\test'
5045
垢版 |
2021/10/06(水) 01:18:15.89ID:sqxilgxU
隠しファイルか?

Ruby のglob でも、. で始まる、directory, file を除くから、
こういうのを許すと、バグのもと

特殊ファイルを作らせたら、ダメ
2021/10/06(水) 01:22:00.09ID:uIHfQozZ
>>49
'.' txt'
'test' 'txt'
'test.tar' 'xz'
'test' ''
相対パスは扱わない、というか、basenameを処理
'test' 'txt'
basenameを処理
'' 'test'
'.test' 'txt'
'test' ''
2021/10/06(水) 01:27:53.38ID:uIHfQozZ
>>50
不特定多数にだめといってもしょうがないでしょう
受け取った後、問題ないファイル名にして、後続処理しますが
最初からドットファイル扱いすると処理抜けする
2021/10/06(水) 01:49:05.27ID:63dnmtAL
>>51
.test は ファイル名じゃなくて拡張子として扱うのかぁ
2021/10/06(水) 01:53:11.34ID:uIHfQozZ
>>53
そうです
windowsでは例えば、".jpg"は普通にjpegファイルとしてあつかわれるので
2021/10/06(水) 08:16:30.25ID:a6e48TNJ
確かにWindowsだと.testはファイル名じゃなく拡張子として扱うね、だからWindowsの場合だけそうすればいい

import os
from pathlib import Path
def hoge(f):
____p = Path(f).resolve().absolute()
____stem = p.stem
____ext = p.suffix[1:]
____if os.name=='nt' and stem.startswith('.') and not ext: # Windowsの場合
________stem, ext = ext, stem[1:]

____print(f'{p.name=}\n{stem=}\n{ext=}\n')
5631
垢版 |
2021/10/06(水) 09:26:58.81ID:lTl3I+RT
pywin32がPython3.10向けpipにない問題を自己解決したので一応報告

以下githubのpywin32レポジトリをクローンしてソースからビルドしてインストール
https://github.com/mhammond/pywin32

以下ビルドコマンドを実行
> python setup.py install --skip-verstamp
Visual Studio 2015 のビルドツールが必要なので、適宜Visual Studio Installer から 「MSVC v140 …」を追加インストール
レジストリ登録するらしく管理者権限も必要
57デフォルトの名無しさん
垢版 |
2021/10/06(水) 10:49:29.50ID:N2DvDSnL
[{'data': 'data123’, 'test': [{'testname': 'test123', 'testvalue': 'value123'}], 'date': '20211006}, {'data': 'data789’, 'test': [{'testname': 'test789', 'testvalue': 'value789'}], 'date': '20211007}]

上のようなかんじのデータ構造のデータがありまして、
forか何かでループして切り出して下のような感じに分割してデータを扱いたいんですがどうやればできますか?

[{'data': 'data123’, 'test': [{'testname': 'test123', 'testvalue': 'value123'}], 'date': '20211006}]

[{'data': 'data789’, 'test': [{'testname': 'test789', 'testvalue': 'value789'}], 'date': '20211007}]
2021/10/06(水) 11:06:28.93ID:YjJCqwIe
アップする前にちゃんとデータ検証しとけよ。
ary=[{'dict':'test'},{'dict':'test2'}]
for itm in ary:
__print(itm)
59デフォルトの名無しさん
垢版 |
2021/10/06(水) 11:17:52.70ID:N2DvDSnL
>>58
ありがとうございます
早速試したみましたがそれっぽいことができました
printした結果、前後の[ ]がなくなっていてリストではなくなっているようにみえるんですがこいつをリストにはできないですか?
2021/10/06(水) 11:23:52.33ID:YjJCqwIe
各要素には[ ]はもともと付いてないからな。
その程度がわからんようなら基本的な知識が不足しすぎ。

初めから各要素をリストにしとくか、[itm]にする。
つーか、なんで抽出してまた各々をリストにする必要があるんだよ。
2021/10/06(水) 11:35:16.77ID:lTl3I+RT
任意のjson文字列を読み込む必要があるとかかね?
62デフォルトの名無しさん
垢版 |
2021/10/06(水) 11:47:56.89ID:IkoUshwC
うーん、よくわからんっす
知識不足ってのはそうですね、まだpythonさわって3日目ですw
web apiに引数としてデータ渡す際にリストで渡さないといけないのです

最初の分解する前の状態でも渡せないことはないんですが全部一度に渡すと具合悪いので分割して一つずつ渡したい感じです
63デフォルトの名無しさん
垢版 |
2021/10/06(水) 11:48:29.59ID:IkoUshwC
あれipが変わってしまいました
64デフォルトの名無しさん
垢版 |
2021/10/06(水) 12:10:25.68ID:IkoUshwC
リストで渡す=json文字列で渡す
って意味なのかな?
そうならjson文字列で渡したいのです
2021/10/06(水) 12:23:59.95ID:YjJCqwIe
>>62
>うーん、よくわからんっす
[itm]がわからんてこと? 書いてあるママだが。
リストで渡せるならわざわざjsonにする必要はない。
その理解度でweb apiを触ろうとするのが逆にすごいな。
66デフォルトの名無しさん
垢版 |
2021/10/06(水) 12:28:38.78ID:IkoUshwC
for [itm] ってことですか?
エラーで返ってきますけど
2021/10/06(水) 12:31:24.23ID:YjJCqwIe
>>58
print([itm])だよ
もうちょい基本的なところから勉強したほうがいいよ
68デフォルトの名無しさん
垢版 |
2021/10/06(水) 12:40:42.74ID:IkoUshwC
なるほど!試してみますw
69デフォルトの名無しさん
垢版 |
2021/10/06(水) 12:49:00.18ID:IkoUshwC
できました!
すげえっす
めっちゃサンキューな
2021/10/06(水) 15:56:51.31ID:phrbWxHz
StreamlitからLiberoffice Base操作するってどうしたら良いですか?
2021/10/06(水) 21:08:11.15ID:cm9kobto
sqlalchemyでデータベースの検索やInsert処理をします。
挿入処理A、検索処理B、検索処理Cをそれぞれ並列処理したとき
session.close()するタイミングはどうやればいいのでしょうか
例えば
addしたいレコードが複数あるとき
#挿入処理A
for item in items:
_db.session.add(item)
_time.sleep(3)#あえてsleep
db.session.commit()
db.session.close()

この処理中に並列処理中の検索B、Cでの
(.commit()然り)db.session.close()がかぶる気がするのですが
2021/10/06(水) 21:26:27.63ID:xpgZiC6t
3.10来てるじゃねえか教えろよ


パターンマッチくらいか
あれば便利だけど取り立てて欲しい!って機能ではないなあ
2021/10/06(水) 21:31:05.16ID:xpgZiC6t
型の方はますますTypeScriptじみて来たな
もうTythonですよ
10年くらい前にTythonあったよね
7471
垢版 |
2021/10/07(木) 10:04:08.76ID:ZfelXN70
自己解決?しました
まだ確信は持てませんが結局commitとcloseの総数が適切なら
挿入処理Aのループ処理の途中で(他の並列処理B,Cが)commit、closeしようが
DB更新瞬間さえセキュアであれば関係ないっぽいですね
75デフォルトの名無しさん
垢版 |
2021/10/07(木) 11:50:22.62ID:YxBBlGj0
elifだと構文上subjectを固定できずコードが曖昧になってたからmatchたすかる
パターンマッチできるところが増えてくといいなあ
2021/10/07(木) 13:09:40.31ID:vIJYcTdp
Windowsの拡張子の取得をテストして気づいたこと
現代では拡張子は"."を含めるらしい
DOSの時代は含めなかったのに・・・
作成済みのプログラムの修正するか悩む
77デフォルトの名無しさん
垢版 |
2021/10/07(木) 15:39:01.76ID:UFWCdLE6
ドットディレクトリとかの影響かな?
2021/10/07(木) 16:16:39.36ID:vIJYcTdp
理由はよくわからないけど、LinuxやUNIX側の影響でしょうね
ドットディレクトリの、".abc"みたいなのは対応は簡単?なんですが
"abc."みたいなドットで終わるタイプのファイル名想定してませんでした
DOSではこんなファイル名付けられなかったもんで
2021/10/07(木) 19:30:33.12ID:vIJYcTdp
ドットで終わるファイル名
os.path.isfile(file) -> False
ドットで終わるディレクトリ名
os.path.isdir(file) -> False

ドットで終わるファイル名・ディレクトリ名
attribute = win32api.GetFileAttributes(file) -> 例外
2021/10/07(木) 19:43:13.97ID:vIJYcTdp
p_dir = pathlib.Path(dir)
p_files = list(p_dir.glob("**/*"))
1stのディレクトリを再帰読込しようとすると、下の階層のドットで終わるファイル名・ディレクトリ名で例外

1st --- 2nd1 -
_____|- 2nd2. -
_____|- 2nd.3

例外を発生させずドットで終わるファイル名・ディレクトリ名を読み飛ばすには、
自力で再帰読込するしかないのでしょうか?
2021/10/07(木) 20:07:13.59ID:vIJYcTdp
>>80
80 のコメント取り消します
さらに分析必要みたい
どうなっているのかまだ詳細不明
正常に動かないのは確か
2021/10/07(木) 20:30:18.08ID:vIJYcTdp
改めて質問します

p_dir = pathlib.Path(dir)
p_files = list(p_dir.glob("**/*"))
1stのディレクトリを再帰読込しようとすると、下の階層のドットで終わるディレクトリ名で例外

1st --- 2nd1
_____|- 2nd2. (ドットで終わるファイル)
_____|- 2nd3. (ドットで終わるディレクトリ) -> 例外 FileNotFoundError

例外を発生させずドットで終わるディレクトリ名を読み飛ばすには、
自力で再帰読込するしかないのでしょうか?

未検証のアイデアでも頂けたらうれしいです
2021/10/07(木) 21:02:20.97ID:xRnq/kAQ
やってみたらドットで終わるディレクトリ作れまへんがな
最後のドット消えてまうんやけど?
2021/10/07(木) 21:20:59.25ID:vIJYcTdp
>>83
エクスプローラーから作る方法は私も知りません
コマンドプロンプトで
copy "C:\test\a.txt" "\\?\C:\test\a."
md "\\?\C:\test\b."
みたいなかんじです
コマンドラインの知識が全くないかたは実験しないでください。
2021/10/07(木) 21:28:40.10ID:xRnq/kAQ
>>84
コマンドプロンプトでやってみたけど最後のドットが無いファイル/ディレクトリが作られるよ
OSはWindows10
2021/10/07(木) 21:40:15.30ID:UdQO/mXQ
> ID:vIJYcTdp
システム依存な話なのでよそでどうぞ
2021/10/07(木) 21:44:37.02ID:vIJYcTdp
>>85
こちらもWindows10です
ずっとコマンドプロンプトでやっていてできてます
今PowerShellでやってみましたが、PowerShellでもできました
\\?\C つけ忘れていませんか?
フルパスで "" もつけてください
ほかに条件あるのだろうか
2021/10/07(木) 21:56:31.61ID:xRnq/kAQ
>>87
\\?\Cは付けてませんでした。
調べたら最後にドットがあるファイルは削除できないとかアクセスできないらしい
やだー こわいからやらなーいw
2021/10/07(木) 22:01:48.59ID:vIJYcTdp
>>88
同様の方法で
del や rd で削除できます
2021/10/07(木) 22:02:37.28ID:vIJYcTdp
>>86
これでいいですか?

p_dir = pathlib.Path(dir)
p_files = list(p_dir.glob("**/*"))

で例外が発生する場合、該当ファイルを読み飛ばして処理を行う方法はありますか?
自力で再帰読込はできればやりたくありません
2021/10/07(木) 22:28:17.75ID:xRnq/kAQ
最後がドッドのアクセスできないディレクトリに入ろうとして例外が出るのかな?
これは自力で再帰読込するしかないよ、再帰はそんな難しくないと思うよ! がんばって^^
2021/10/07(木) 23:35:06.59ID:vIJYcTdp
超レアケースなのでルートのディレクトリ毎エラー処理することにします
できればファイル単位でエラー処理したかったのですが
93デフォルトの名無しさん
垢版 |
2021/10/07(木) 23:50:14.03ID:StWMkIYV
>>82
どうかな

import pathlib
p_dir = pathlib.Path(".")
p_glob = p_dir.glob("**/*")
p_files = []
while True:
    try:
        p = next(p_glob)
        p_files.append(p)
    except FileNotFoundError as e:
        import sys
        print(e, file=sys.stderr)
    except StopIteration:
        break
print(*p_files, sep="\n")
2021/10/07(木) 23:53:44.05ID:vIJYcTdp
>>93
ありがとうございます。
早速検証してみます
2021/10/08(金) 00:17:02.73ID:T4fYgd16
>>93
すごいです
完璧に動いてます
早くこのレベルのプログラムがしたい
本当にありがとうございました
96デフォルトの名無しさん
垢版 |
2021/10/08(金) 00:41:36.79ID:x4lgXBGS
Path.glob()いいね
いままでos.walk()で自前でフィルタしてたけど今度つかってみる
2021/10/08(金) 08:04:57.04ID:dABXXppr
ジェネレーターのスゴさを認識できた
98デフォルトの名無しさん
垢版 |
2021/10/08(金) 09:08:14.69ID:Pr4xGBUG
globって見に行かない名前のファイルかディレクトリなかったっけ?
2021/10/08(金) 09:45:15.17ID:LO45Vby3
for i in range(100):
_if条件:
__time.sleep(3)など
__continue
_if条件:
__time.sleep(3)など
__continue

こういうとき、time.sleep(3)などが重複するのでまとめたいと思い
for i in range(100):
_if i!=0:
__time.sleep(3)など
としましたが
要は、continueするときには必ず実行する文がある
ということなので
continue後毎に処理するような節とかテクニックや慣習はあるのでしょうか
2021/10/08(金) 09:56:28.31ID:3oVEDenR
イマイチ何言ってるかわからんけど、関数でいいんじゃないの?
2021/10/08(金) 10:14:00.03ID:LO45Vby3
if条件の中にはif条件1とif条件2で違う処理も入っているので
continueするときに必ず行う処理はべつのとこに書いた方が見やすいかな
と思ったのです
つまり、continue文の宣言自体がそれ(continueするときに必ず行う処理)を示すような書き方があれば
と思ったのですがなさそうですね
ありがとうございました
2021/10/08(金) 10:20:00.72ID:Q4k4Ultl
書いてる例だけ見るとcontinueを使うべきケースではなさそう
2021/10/08(金) 10:44:16.94ID:LO45Vby3
for i in range(100):
_if i!=0:
__i=0以外で実行する関数1()

↑こういうのってあんまり使わないものなのでしょうか?
continue後時に必ず実行する関数、と違う点は
if i!=0:だと最期のcontinue後は実行されない、ので混乱するかなと。
(else節併用だと野暮になるし)

やはり重複しようが
if 条件1:
_関数A()
_関数1("")
_continue
if 条件2:
_関数B()
_関数1("")
_continue
みたいにした方がいいのかもしれませんね
2021/10/08(金) 10:54:49.70ID:dABXXppr
for i in range(100):
____if i != 0:
________if 条件1:
____________関数A()
________if 条件2:
____________関数B()
________関数1("")
________continue
2021/10/08(金) 11:39:53.95ID:3oVEDenR
>>103
関数1でi==0で実行しない設定にしとけばいいだけだろ。
10645
垢版 |
2021/10/08(金) 12:38:00.40ID:EgdGtVHT
>>50
に書いたけど、

Ruby のglob では、. で始まる、隠し directory/file を除く
107デフォルトの名無しさん
垢版 |
2021/10/08(金) 14:27:43.17ID:hfI/PPIh
tkinterでrowconfigure([1, 2, 3], weight=1)とかすると
_GridIndexにlist[int]できねーよって怒られるんだけど実際はできる
どういう型指定したらいいんでしょうか
2021/10/08(金) 22:41:24.42ID:T4fYgd16
>>93
今日詳細にテストしました。今使っているコードです
p_dir = pathlib.Path(dir)
p_files = []
p_err_files = []
p_glob = p_dir.glob("**/*")
while True:
____try:
________p = next(p_glob)
________dot_chk = False
________for divided_path in str(p).replace("/", "\\").split("\\"):
____________if divided_path[-1] == ".":
________________dot_chk = True
________________break
________if not dot_chk:
____________p_files.append(p)
________else:
____________p_err_files.append(p)
____except FileNotFoundError as e:
________print(e, file=sys.stderr)
____except StopIteration:
________break
____for i in p_err_files:
________for j in p_err_files:
____________if str(i).startswith(str(j)):
________________if len(str(i)) > len(str(j)):
____________________p_err_files.remove(i)
print(*p_files, sep="\n")
print(*p_err_files, sep="\n")
2021/10/08(金) 22:49:21.67ID:T4fYgd16
ドットで終わるディレクトリがあっても例外が発生しない場合があるようです。
例外が発生しない場合、このコードで正常・異常分類できてます
例外が発生した場合、探索が打ち切られているような感じです。
解釈間違ってるかも
例外が発生した場合、全件エラーにした方がよさそうです。
2021/10/08(金) 23:04:50.88ID:T4fYgd16
例外が発生しない場合でも
ドットで終わるファイル・ディレクトリを検出したら全件エラーのほうが安全かな
2021/10/09(土) 08:06:03.22ID:3hwdJKmG
class Person():
_def __init__(self, name, age):
__self.name = name
__self.age = age
_def sample1(self):
__print(self.name,self.age,self.f)

class JapanesePerson(Person):
_def __init__(self,name,age,f=False):
__self.name = name
__self.age = age
__self.f=f

class JapanesePerson2(Person):
_def __init__(self,name,age,f=False):
__super().__init__(name,age)
__self.f=f

yamada = JapanesePerson("山田", 30)
yamada.sample1()
yamada2 = JapanesePerson2("山田2", 20,True)
yamada2.sample1()

JapanesePersonとsuper()つかったJapanesePerson2って同じ意味っすよね?
super()使って書くのって継承したPersonにname,ageがあるぞっていう意味合いのためなんでしょうか?
2021/10/09(土) 08:45:15.87ID:TxyuJC/9
>>111
>JapanesePersonとsuper()つかったJapanesePerson2って同じ意味っすよね?
違うよ、super()を使った方は基底クラスPersonの属性name,ageに値をセットするが
JapanesePersonの方は基底クラスの方にセットせずに重複したJapanesePersonの属性name,ageにセットしている
Personを継承している意味がナッシング
2021/10/09(土) 09:52:36.10ID:3hwdJKmG
>>112
そうなんですね
yamada.sample1() でself.name,self.ageが参照できてるので
なんのためにsuper().__init__でわざわざ値セットする必要があるんだろう??と気になったので。
def sample1(self):のselfってなんなんだ??みたいな
ありやした
2021/10/09(土) 11:41:14.80ID:TxyuJC/9
>>108
>________for divided_path in str(p).replace("/", "\\").split("\\"):
>____________if divided_path[-1] == ".":
これはfor divided_path in p.parts: # で分割できる、pathlibの機能を使おう
更にここは内包表記で一気に書けて
_________if any(part.endswith('.') for part in p.parts):
よってdot_chk変数が不要になる

>____except FileNotFoundError as e:
>________print(e, file=sys.stderr)
これエラー表示してるだけだから、p_err_files.append(p) しといた方が良くない?

>____for i in p_err_files:
>________for j in p_err_files:
>____________if str(i).startswith(str(j)):
>________________if len(str(i)) > len(str(j)):
>____________________p_err_files.remove(i)

こっちの方が早いかも、短いし
____for i in p_err_files:
________p_err_files = [j for j in p_err_files if not j.match(i.name+'/*')]
2021/10/09(土) 12:37:39.05ID:A9QtIjdU
>>114
アドバイスありがとうございます。
内包表記覚えたいと思ってるんですがなかなか身につかないです
glob.glob使っていてpathlib.globに書き直したのでpathlibの他の機能何も知らない状態です
勉強しなきゃいけないこと多いな

>>____except FileNotFoundError as e:
>>________print(e, file=sys.stderr)
>これエラー表示してるだけだから、p_err_files.append(p) しといた方が良くない?
動作確認に使ってるだけなんで、printじゃなくpassでいいかと思ってます。
この例外のメッセージから有用な情報は得られませんでした
例外が発生する以前に、pathlib.globに限らずファイル関連の関数・クラスの挙動があやしいです
pathlib.globは試した範囲では1番挙動がまともでした
2021/10/09(土) 13:10:11.80ID:A9QtIjdU
>>114
>________p_err_files = [j for j in p_err_files if not j.match(i.name+'/*')]
j.match(i.name+'/*')] の部分なんですが、pathlibは'/'で決め打ちして大丈夫なんですか?
pythonが'/'と'\\'をどう使い分けてるかよくわからないです。
取得したパスが'/'と'\\'混在してたりするし・・・
2021/10/09(土) 13:20:34.47ID:A9QtIjdU
>>116
決め打ちじゃなく正規表現の書き方なのか?
急いで調べます
2021/10/09(土) 13:22:15.13ID:TxyuJC/9
>>116
どっち使ってもいいし混在してもいいみたいですよ

>>____except FileNotFoundError as e:
>>________print(e, file=sys.stderr)
これ有益な情報が得られないとあるけど、どのディレクトリかファイルで例外発生したかは分かったの?
分からなかったらpも表示させた方がいいんでない?
2021/10/09(土) 13:49:18.15ID:A9QtIjdU
>>118
例外発生したディレクトリの名前が信用できないんです
except FileNotFoundError as e: のところで分かるのは、発生したということだけです
恐らく発生したと思われるディレクトリ名は既にp_err_filesに入ってます
例外が発生したときのみ全件エラーにするなら何かフラグを立てたほうがいいと思います
今回はドットで終わるものを見つけたら、エラーログにp_err_filesを書き出して
全件処理しないのでこれで十分かと
その後、手作業でエラーログのすべてに対応すると思うので、例外発生個所の情報は使いません
2021/10/09(土) 14:29:12.42ID:TxyuJC/9
>>119
いやいや、例外が発生する箇所はp = next(p_glob)のところで
そこからexcept FileNotFoundError as e: にジャンプしてくるわけですから
p_err_filesには入りません(p_err_filesに入るのは例外が発生しない場合です)

で、おそらくpの変数に代入する前のnext(p_glob)で例外が発生するから
その場合except FileNotFoundError as e:でpを表示させた場合は例外が発生する前のpなわけで
そのpの次にアクセスするディレクトリかファイルで例外が発生するということですよ、きっと

あと/と\\なんですけど、これはファイルパスの区切り文字でLinuxとかが/でWindowsは\\です
Pythonではどっち指定してもいいんですが、これをstr()で文字列にすると文字が違うわけですから
同じパスでも違うパスと判定してしまうので注意です
if str(i).startswith(str(j)):は危険です
2021/10/09(土) 14:45:18.21ID:A9QtIjdU
>>120
詳しく書きますね
最初ドットで終わるディレクトリに入れなくて例外すると考えていました。
テストしているとそうではないと思うようになってきました。
例外が発生原因はドットで終わるディレクトリです
でも必ず例外が発生するわけではありません
pathlib.globが最後に探索する箇所がドットで終わるディレクトリの場合、例外は発生しません
この状態でドットで終わるディレクトリのうしろに問題のないディレクトリを追加します
そうすると、ドットで終わるディレクトリではやはり例外は発生しません
例外が発生するのは次の問題のないディレクトリです
このとき、間違ったファイル名で処理をしようとしてFileNotFoundErrorが発生していると思われます
例外で取得できるのは問題のないディレクトリにアクセスするときの間違ったファイル名です
2021/10/09(土) 15:09:43.07ID:TxyuJC/9
>>121
よく分かりました。それなら言われたとおり例外はpassするだけでいいですね

ところで
____for i in p_err_files:
________p_err_files = [j for j in p_err_files if not j.match(i.name+'/*')]
ですが、、
____for i in p_err_files:
________p_err_files = [j for j in p_err_files if not j.match(str(i/'*'))]
に訂正します

matchの中のstr(i/'*') は文字列にした場合区切り文字が\\になります
これをstr(i) + '/*'として/と\\を混在させてもmatchでは正常に動くようです
123デフォルトの名無しさん
垢版 |
2021/10/09(土) 15:30:28.23ID:Ngy1mnu3
printと書かない以外でなんか出力するのある?
124デフォルトの名無しさん
垢版 |
2021/10/09(土) 16:19:52.75ID:/xiMgjvY
sys.stdout.write()
125デフォルトの名無しさん
垢版 |
2021/10/09(土) 16:24:43.13ID:dPZPc1xL
WindowsというかDOSの頃から内部は/でもパス区切りできて
バックスラッシュ要求するのはシェルや一部のアプリ
単体プログラムなら/で書いたほうがポータビリティある
2021/10/09(土) 18:09:17.61ID:JVX7Q22F
>>121
Path.globでイテレータを作成した後に追加・削除されたファイルやディレクトリは
イテレーションに含まれるか含まれないかは不定なので
それでも困らないような使い方じゃなければ使い方が悪い

>例外で取得できるのは問題のないディレクトリにアクセスするときの間違ったファイル名です
問題のないディレクトリなのに間違ったファイル名なのか・・・・
全部読んでないからかよくわからん
127デフォルトの名無しさん
垢版 |
2021/10/09(土) 19:07:55.16ID:Ngy1mnu3
統合環境?総合環境?
おすすめの教えて
winでもマックでもリヌクスでもいいです
128デフォルトの名無しさん
垢版 |
2021/10/09(土) 19:13:36.12ID:/xiMgjvY
eric4
2021/10/09(土) 19:19:03.79ID:A9QtIjdU
>>126
書き方があいまいでしたね
イテレータを作成する前に追加してます
2021/10/09(土) 21:23:39.35ID:aguDhBGS
>>127
Jupyter Notebook、Notebookの後継であるJupyterLab、
VSCode, Google Collaboratory

YouTube などで、よく紹介されているのは、Google Collaboratory

他には、WSL2, Linux, Docker

多言語のversion manager なら、asdf とか、
日本人が作った、バージョンマネージャーのanyenv とか

anyenvでは、19言語を統一された方法で、
nodenv, phpenv, pyenv, rbenv, goenv, jlenv などを使う。
Python ならpyenv、Julia ならjlenv

Python標準では、venv

多くの言語で、version manager の使い方を統一したいのなら、asdf, anyenv
131デフォルトの名無しさん
垢版 |
2021/10/09(土) 23:27:09.55ID:cIVnj/jm
>>130
ありがとう
参考にしてそれぞれ入れてみて稼働確認?動作軽いのか?とかやってみます。
132130
垢版 |
2021/10/10(日) 00:15:53.95ID:lB7MFpHR
プロ用では、anyenv から、Docker へ移行していくだろう
133デフォルトの名無しさん
垢版 |
2021/10/10(日) 05:07:59.49ID:wTu2fZfo
tkinterにドラッグアンドドロップつける
tkinterDnD2というやつ

dnd_root.bind(<Drop>, callback)
callback(ev):
__files = dnd_root.splitlist(ev.data)

みたいに書きます
このevてdndEventクラスで
http://tkinterdnd.sourceforge.net/TkinterDnD.html#DnDEvent
にあるように、いくつかの属性にアクセスできるんだけど
この属性のそれぞれが何を意味してるのかっていうのは、どこに書いてあるんでしょうか
ドキュメント的なものを探してるんだけど、見当たらなくて
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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