【まず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 ###
2021/10/01(金) 15:51:56.85ID:131QCENJ
pythonの本この前かったわ
エロ画像収集するんだ
3デフォルトの名無しさん
垢版 |
2021/10/01(金) 16:14:27.26ID:xAAYN8E1
最近 youtube 側のクローラー対策アルゴリズムが変わったらしく
前に描いてた python スクリプトがエラー吐くようになった
適当に wait 入れてアクセス頻度落とすとエラー出ない訳だが
遅くなるのでぎりぎり最適の wait にしたいんだが肝心な google 側のアルゴリズムが不明
納得行く速度が出るまでごちゃごちゃ試すと BAN されちゃうかな?
2021/10/01(金) 16:20:44.94ID:PaEGpo5A
契約して、YouTube API を使えば?
2021/10/01(金) 16:57:41.48ID:xAAYN8E1
おにただ正論
2021/10/01(金) 18:22:34.09ID:1X70H7Xp
python関係無いしw
2021/10/01(金) 19:40:08.43ID:CQRkUSDD
うちもとあるサイト毎週引っこ抜いてたらいつもはない臨時メンテがあってその直後非同期だと接続エラーはくようになったな
非同期なくしたら大丈夫だったので今はおとなしく1倍速で落としてるけど。IPBANされなかっただけマシか
8デフォルトの名無しさん
垢版 |
2021/10/01(金) 19:59:28.33ID:XZxvwPE1
pypy(パイパイ)って発音しにくいよね、特に社内だと( ^ω^)・・・
2021/10/02(土) 11:36:25.91ID:rV5kYlEk
魑魑こそ正義
10デフォルトの名無しさん
垢版 |
2021/10/02(土) 15:09:37.96ID:yFRwYWli
pypiのクローラーねぇ
11デフォルトの名無しさん
垢版 |
2021/10/02(土) 23:18:51.11ID:zWqv5K6j
クソチョンw
2021/10/05(火) 14:54:46.13ID:eLBz+/wl
プライベートクラス変数にするメリットってどのようなときがあるのでしょうか・・
https://docs.python.org/ja/3/tutorial/classes.html#private-variables

>もし仮に MappingSubclass に __update 識別子を実装したとしても
これなら普通、Mappingクラスに実装しませんか?

それとは別にメリットとして、オブジェクトの中からしかアクセスしない変数
として使うなら、class外に書いた方がいいような?
13デフォルトの名無しさん
垢版 |
2021/10/05(火) 15:14:02.22ID:I18ZMSNA
>>12
神がコーディングするならどうでもいいけど
クラス外に置くとドキュメンテーションの点で劣る
識別子の置き換えが発生しないと意図しない副作用の可能性を残してしまう
ひとつでもそういう箇所があると疑心暗鬼になり生産性も落ちる
2021/10/05(火) 15:48:22.95ID:+YzW1gaU
windows、python3.9.7で
fileにパス付きファイル名が与えられた時に、パス無しファイル名(拡張子無し)と拡張子を取得する場合
if "." in os.path.basename(file):
____ext_without_dot = os.path.basename(file).split(".")[-1]
____basenaname_without_ext = os.path.basename(file).removesuffix("." + ext_without_dot)
else:
____ext_without_dot = ""
____basenaname_without_ext = os.path.basename(file)
で問題ないでしょうか?
もっと綺麗な書き方あったら教えてください。
2021/10/05(火) 15:58:59.57ID:UD2fraRe
>>12
その例は、Mappingクラスが、MappingSubclassのupdateメソッドではなくMappingクラスのupdateメソッドを呼び出したい場合の実装例。

Mappingの__update変数の中にMappingのupdateメソッドを格納しておけば、updateメソッドをオーバーライドされてしまってたとしても常に元のupdateメソッドを参照することができる。

サブクラスが__update変数自体をオーバーライドしようとしても、内部的に識別子を変えてるから大丈夫ですよ、そんなことできませんよ、と言っている
2021/10/05(火) 16:07:03.30ID:UD2fraRe
>>14
https://docs.python.org/3/library/os.path.html#os.path.splitext
2021/10/05(火) 16:13:46.71ID:gsPNBZV0
>>14
PurePath使え
2021/10/05(火) 16:16:39.53ID:+YzW1gaU
>>16
>>16
splitextを使うと、basenaname_without_extが""の場合うまくいかないんです
2021/10/05(火) 16:32:23.12ID:UD2fraRe
>>18
splitextの戻り値の第2要素が空文字列だったら第1要素と第2要素をひっくり返せばよいのでは?
2021/10/05(火) 16:35:35.19ID:+YzW1gaU
>>18
PurePath試してみました。
これもbasenaname_without_extが""の場合うまくいきません
2021/10/05(火) 16:38:24.45ID:+YzW1gaU
>>19
"..jpg"のようなファイル名の場合ひっくり返してもうまくいきません
22デフォルトの名無しさん
垢版 |
2021/10/05(火) 16:58:23.72ID:yytwxBBE
>>14
from pathlib import Path

p = Path('.')

for file in p.iterdir():
ext = ''.join(file.suffixes)
without_ext = file.name.rstrip(ext)
2021/10/05(火) 16:59:34.11ID:UD2fraRe
import re
basename = ...
if m := re.match(r'(.*)\.([^.]+)$', basename):
. basename_without_ext = m.group(1)
. ext_without_dot = m.group(2)
めんどいからもう_
2021/10/05(火) 17:31:21.64ID:+YzW1gaU
>>22
これもbasenaname_without_extが""の場合うまくいきません
2021/10/05(火) 17:36:31.51ID:+YzW1gaU
>>23
理解できない…ムズイ
検証もやりかた分からないです
何をやってるか理解出来たら後でコメントします
2021/10/05(火) 17:40:40.24ID:UD2fraRe
...のところにファイル名を入れて実行してください
basename = 'hoge.jpg'
2021/10/05(火) 18:00:15.70ID:yMBvIvKg
二重拡張子の場合はどうするの?
*.tar.zxとか
2021/10/05(火) 18:10:11.85ID:+YzW1gaU
>>26
拡張子がある場合正常に動きました
拡張子がない場合はうまくいきませんでした
拡張子がない場合を別処理すると14で書いた処理より長くなる・・・
正規表現勉強してみます
2021/10/05(火) 18:29:46.70ID:+YzW1gaU
>>27
二重拡張子は各アプリ毎に取り決めが違うので個別に考えるしかないかと
"abc.net.txt" とかを二重拡張子扱いしたらまずいですし
2021/10/05(火) 19:15:38.22ID:db3O09Qx
Python 3.10入れてみたけどIDLEのプロンプト表示が良くなってるね
最初違和感があったけど、これは見やすくて良いわ^^

新機能の構造的パターンマッチに注目ですな、これは使っていきたい
2021/10/05(火) 19:55:29.85ID:CsDVkN/q
当方でも、パッケージ管理ソフトChocolateyにPython 3.10が来たようでPython 3.9から自動更新された
困ったことに、pywin32がまだPython 3.10に対応してない
2021/10/05(火) 19:59:53.84ID:xYzI00Mc
vscodeでこのウィンドウどうやって出すの?

https://i.imgur.com/PK7erF2.jpg
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するときに必ず行う処理)を示すような書き方があれば
と思ったのですがなさそうですね
ありがとうございました
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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