21/12/06 19:16:54.93 YFGCwo230.net
Pythonを先週から使っててORMのdatasetを試してみてるんですけど、
find()に WHERE `hoge` > 10 相当の条件って指定できるんですか?
322:デフォルトの名無しさん
21/12/06 19:40:42.62 +xtv5Wsa0.net
>>321
URLリンク(dataset.readthedocs.io)
公式サイトみてる?
非公式のまとめサイトはあくまで公式サイトを補完するもの
323:デフォルトの名無しさん
21/12/06 20:13:19.50 YFGCwo230.net
>>322
やさしいのぅ。有難うございます。
324:デフォルトの名無しさん
21/12/06 21:04:00.66 AXyP6TkQa.net
シンプルなORMないかなーって色々触ってみるけどあれこれ機能が足りず結局SQLAlchemyになっちゃうよな
325:デフォルトの名無しさん
21/12/06 21:10:58.44 JyBQF4AA0.net
>>318
難しくない。shutilかな。
326:デフォルトの名無しさん
21/12/06 21:33:56.87 fIaDMlsG0.net
>>325
できればヒントやサンプルをいただけませんか
327:デフォルトの名無しさん
21/12/06 21:42:01.16 K9NwbhKq0.net
ヒント : subprocess
328:デフォルトの名無しさん
21/12/06 22:13:57.72 rLSBlzT30.net
>>326
やろうとしてることを段階的に分けて書いてみて
329:デフォルトの名無しさん
21/12/06 22:22:51.24 fIaDMlsG0.net
>>328
1.ファイルの入ったフォルダをコマンドライン引数1に設定する
2.フォルダ内から特定の拡張子かつ一定以上のファイルサイズのものを抽出する
3.抽出したファイルを外部ツールにかける
4.外部ツールにかけた結果をコマンドライン2引数のディレクトリ内に展開する
5.フォルダは4の指定ディレクトリ内にファイル名で新規作成する
こんな感じです
for + os.walkとendswithでファイル一覧を抽出できてもその抽出したファイルをその先に持って行ったり
外部ツール利用の方法が全くわかりません
330:デフォルトの名無しさん
21/12/06 23:02:13.62 KAUrNTmh0.net
streamlinkはpythonで書かれてるのに、
pythonからの使い方が判らないので、subprocessでpython呼び出してる
331:デフォルトの名無しさん
21/12/06 23:06:57.52 +xtv5Wsa0.net
Pythonでやるからややこしい
1,2はfind
3,4,5はxargs + sh(cd, mkdir)
でできる内容
Pythonでやるのがお題ならごめん
332:デフォルトの名無しさん
21/12/06 23:16:45.17 fIaDMlsG0.net
>>331
バッチでってことですか?
FFMPEGがワイルドカード対応してなくて無理でした
333:デフォルトの名無しさん
21/12/06 23:24:01.09 uKiaXwwm0.net
シェルの方が早そうだね
334:デフォルトの名無しさん
21/12/06 23:29:51.84 rLSBlzT30.net
>>329
>1.ファイルの入ったフォルダをコマンドライン引数1に設定する
>2.フォルダ内から特定の拡張子かつ一定以上のファイルサイズのものを抽出する
>5.フォルダは4の指定ディレクトリ内にファイル名で新規作成する
2と5の間はとりあえずスキップして、ここだけの実装は可能?
335:デフォルトの名無しさん
21/12/06 23:31:26.15 fIaDMlsG0.net
>>334
2の途中で詰まりました
抽出したファイルの扱い方がわからなく・・・
336:デフォルトの名無しさん
21/12/06 23:49:14.76 R0qeSVmL0.net
配列に入れればいいだけじゃね
337:デフォルトの名無しさん
21/12/07 00:14:41.57 ebSZa7bB0.net
>>332
バッチてことはWin環境なんかな
Pythonで解決した後でもいいからPowerShellもしらべてみて
習得にあるていど時間かかるけどやれることが広がるよ
あとワイルドカード展開するのはコマンドじゃなくて通常はシェルの仕事
338:デフォルトの名無しさん
21/12/07 00:34:04.97 P3Md4odo0.net
すみませんバッチファイルの本を買って勉強します
ありがとうございました
339:デフォルトの名無しさん
21/12/07 00:59:42.03 O2KWEQqW0.net
実際問題として、PS使うならPythonで書こうとするかなぁ
他のOSでも使うことができるし
とりあえずバッチとwshは使いたくない
340:デフォルトの名無しさん
21/12/07 01:31:43.51 q8J3SSC40.net
find -execかfind xargsが鉄板だと思うけど
外部コマンドのstdout/stderr出力をPython側でキャプチャする必要なければそんなにややこしくもない
for path in Path(search_dir).glob(pattern):
__if path.stat().st_size > 1000:
____dir_path = Path(output_dir).joinpath(path.stem)
____dir_path.mkdir()
____new_path = dir_path.joinpath(path.name)
____os.system(f'echo "{path}, {dir_path}" > "{new_path}"')
(同じファイル名があった場合の対処はしてない)
341:デフォルトの名無しさん
21/12/07 01:36:39.28 MjkMHobt0.net
winでもwsl2で >331が書いてる手順でヤレる
powershellも覚えれば便利なんだろうけど…
342:デフォルトの名無しさん
21/12/07 06:51:56.92 BLeYwod+0.net
>>329
2.は os.listdirすればリストで返してくれる
この辺見てみた?
URLリンク(note.nkmk.me)
343:デフォルトの名無しさん
21/12/07 07:18:25.74 Jl0mhXXA0.net
使うのがffmpegの場合、他にも考えるべきことが大量にあるので、
一括ではうまく行かないんだよな
何が来ても自分好みのファイルに変換する万能スクリプトを一つ書いて、
それに処理するファイル一覧を食わせる方式に落ち着いた
344:デフォルトの名無しさん
21/12/07 08:57:52.26 BFhf39Z30.net
awk,sedが必要になったらシェルスクリプトを諦めて全部Pythonで書くかな。
あれらを今から学習する気力が湧かない。
345:デフォルトの名無しさん
21/12/07 09:05:21.33 Jl0mhXXA0.net
PSはPSでしかできないパワフルなことがあるので、
その部分だけPSでやるのがいい
windowsの底の部分を簡単にいじれるのはPSだけ
346:デフォルトの名無しさん
21/12/07 10:45:42.99 F2U4yKHS0.net
質問するならコード貼ってほしいな
このスレのテンプレにpaste用サイトが書いてある
347:デフォルトの名無しさん
21/12/07 11:08:12.05 A/pvwvVNr.net
PSはlinuxでもosxでも動くし、あれだけで出来ること結構あるから知ってると便利だよな
348:デフォルトの名無しさん
21/12/07 11:49:17.79 G7aiaFNj0.net
ガチでヌーブなんですけどrequestsとbeautifulsoupでスクレイピングやってます
waitかけないとバンされるよと言われましたがどうすればいいですか?
requests.get()でtimeoutは今書きましたがforで同じサイトの似たようなページに何度もアクセスするのでサーバーへの負荷はすごいと思います
これに対してどうすればいいですか?
349:デフォルトの名無しさん
21/12/07 12:01:37.39 Jl0mhXXA0.net
適度にsleepする
350:デフォルトの名無しさん
21/12/07 12:17:07.83 yRaAbrIt0.net
手動でブラウザ操作したときまんまsleepしたらいいだけ
サーバ構築する側はボットなんか勘定にいれてコスト設計してないんだから
351:デフォルトの名無しさん
21/12/07 12:22:57.09 P3Md4odo0.net
>>342
for curDir, dirs, files in os.walk(sys.argv[1]):
for file in files:
if file.endswith("〇〇"):
os.path.getsize(ts)
print(os.path.join(file))
これでファイルは取得できるのですがそのファイルを参照する方法がわからず・・・
352:デフォルトの名無しさん
21/12/07 12:24:12.30 P3Md4odo0.net
こうでした
for curDir, dirs, files in os.walk(sys.argv[1]):
for file in files:
if file.endswith(".〇〇"):
print(os.path.join(file))
353:デフォルトの名無しさん
21/12/07 13:08:03.12 F2U4yKHS0.net
並列数1なら大したことないけどね
応答時間200ミリ秒なら、毎秒最大5リクエストだし
354:デフォルトの名無しさん
21/12/07 13:09:23.97 A/pvwvVNr.net
参照って何をしたいのか知らないけど、ファイル名取得出来てるんだからオープンするのも他のコマンドの引数に与えるのも可能では
355:デフォルトの名無しさん
21/12/07 13:32:14.96 lMfMxSoR0.net
>>352
Ruby では、glob に拡張子も指定できる
# 絶対パスのディレクトリ名の後ろに、*.txt を付ける。
# . で始まる、隠し directory, file を除く
glob_pattern = "C:/Users/Owner/Documents/**/*.txt"
separator = "-" * 30 + "\n"
Dir.glob( glob_pattern )
.select { |full_path| File.file?( full_path ) } # ファイルのみ
.each do |full_path|
puts "#{ separator }#{ full_path }\n#{ separator }" + File.read( full_path )
end
356:デフォルトの名無しさん
21/12/07 14:32:51.33 Jl0mhXXA0.net
できないglobなんか無いだろ
from pathlib import Path
p = Path("c:/path")
for filename in p.glob("*.mp4"):
print(filename)
357:デフォルトの名無しさん
21/12/07 15:09:33.84 NCVMykAH0.net
つかglobを何だと思ってんだガイジは
358:デフォルトの名無しさん
21/12/07 15:23:50.74 F2U4yKHS0.net
スレタイ読めない人がいるな
359:デフォルトの名無しさん
21/12/07 21:21:55.14 3sCD52Waa.net
オワコンのruby薦められても困る
360:デフォルトの名無しさん
21/12/07 21:40:58.38 Jl0mhXXA0.net
rubyとperlとVBとobjective-Cの人は、脱出するのが早いほど幸せになれる
361:デフォルトの名無しさん
21/12/07 21:43:22.87 P3Md4odo0.net
すんげえ苦労したけどなんとか形になりました
バッチなのですれ違いすみません
もっと勉強して最適化していきます
わかってしまえばすごくシンプル
set Tool="Tool"
set template="template"
for %%f in (%1\*.〇〇) do (
mkdir "%2\%%~nf"
%Tool% -i %%f -o "%2\%%~nf\%%~nf.dgi" -a -e
del "%2\%%~nf\%%~nf.log
)
362:デフォルトの名無しさん
21/12/07 22:06:22.51 zHaA7V/Y0.net
ワロタw
363:デフォルトの名無しさん
21/12/07 22:58:20.49 I8679kEJ0.net
嘘だろ
364:デフォルトの名無しさん
21/12/07 23:00:21.81 oV2OkogX0.net
クソワロタ
365:デフォルトの名無しさん
21/12/07 23:12:35.70 7GhYBix30.net
templateって何?
366:デフォルトの名無しさん
21/12/07 23:44:21.65 F2U4yKHS0.net
ポテンシャルを感じる
367:デフォルトの名無しさん
21/12/08 01:37:02.26 .net
from datetime import datetime, timedelta
import pytz
dt=datetime.now(pytz.timezone("Asia/Tokyo"))
print(dt)
print(dt.today())# timezone変更 不適用
print(dt.time())# timezone変更 適用
dt_utc=dt.astimezone(pytz.timezone("UTC"))
print(dt_utc)
print(dt_utc.today())#
print(dt_utc.time())#
#2021-12-08 01:34:40.591170+09:00
#2021-12-07 16:34:40.592894
#01:34:40.591170
#2021-12-07 16:34:40.591170+00:00
#2021-12-07 16:34:40.598068
#16:34:40.591170
.today()てtimezone変更引き継いで?くれないんですね・・
368:デフォルトの名無しさん
21/12/08 02:08:39.64 uCheTDCk0.net
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)
369:デフォルトの名無しさん
21/12/08 07:20:30.37 OmzTkGs60.net
>>367
参考になるかも
URLリンク(qiita.com)
370:デフォルトの名無しさん
21/12/08 13:19:52.67 uCheTDCk0.net
外部ツールに抽出ファイルをかけるのが難しいですね
%Tool% -i %%f -o "%2\%%~nf\%%~nf.〇〇〇" -a -e
この処理をPythonでどうやるのか?
subprocess.runあたりを使うっぽいのですがその後の書き方や処理方法が不透明
ターミナルにパイプして処理する?とかになるなら結局バッチかパワーシェルで
統一した方が早いのでしょうか
371:デフォルトの名無しさん
21/12/08 13:33:21.38 5HATgl/c0.net
標準出力を取得して、とかやるとそれ用のことを書かないといけないけど、
実行させるだけなら超シンプル
subprocessから取得したデータをパイプでffmpegに渡して、
とかやらせてちゃんと動くとちょっと嬉しい
372:デフォルトの名無しさん
21/12/08 13:43:19.97 lsXABI8+d.net
ニコ生のえっちなやつ録画したいニキおつ
373:デフォルトの名無しさん
21/12/08 15:21:18.60 M4uEosNe0.net
>>370
バッチで用が済むなら終わりでいいのでは
汚いスクリプトなんてプログラミングの勉強にならないし
374:デフォルトの名無しさん
21/12/08 16:12:58.05 5HATgl/c0.net
m = re.search('pattern', str)
if m:
item = m.group(1)
みたいには書けるけど、ifの中にmの取得を一緒に書けない?
そうでないと、if elif elseで書けない
375:デフォルトの名無しさん
21/12/08 16:16:26.00 Z7ccVyDn0.net
昔のpythonでは書けなかったんですが
python3.8からassignment expression := ができるようになりました
376:デフォルトの名無しさん
21/12/08 16:22:47.75 5HATgl/c0.net
おおー、できるのか
でもうちのは3.7だからできないわ
会社のは3.6だからもっとできない
変な互換性のなさを作り込むよりは、3.6でもやれる方法を考えよう
377:デフォルトの名無しさん
21/12/08 16:31:06.57 cmZgcxZR0.net
>>370
各変数を別途取得して、subprocess.runで起動するアプリの引数として与えるだけ
自分で引数をオプションとして与えたいなら、argparseを使う
378:デフォルトの名無しさん
21/12/08 16:31:50.71 lsXABI8+d.net
item = data.get(1)
if item:
id(item)
#3.8
if item:= data.get(1):
id(item)
379:デフォルトの名無しさん
21/12/08 16:51:20.77 e5XneN8e0.net
pythonの野郎宗旨替えしやがったのか
380:デフォルトの名無しさん
21/12/08 17:00:08.30 cmZgcxZR0.net
>>374
スコープの話なら、関数こさえてreturnで拾うという手もあるけど、めんどくさいね
381:デフォルトの名無しさん
21/12/08 17:02:23.43 5HATgl/c0.net
無駄な処理は増えるけど
m1 = re.~
m2 = re.~
としておいてから、
if m1:
elif m2:
なら書ける
代入が評価もできる仕組みは、書き間違えてバグるからというよりは、
単純に読みにくくなる
382:デフォルトの名無しさん
21/12/08 17:12:25.01 +2BbFlMUa.net
Pythonのifのスコープは脳に優しくないな
383:デフォルトの名無しさん
21/12/08 17:22:50.60 aaXV5Kk80.net
プライベートだと思っていた彼女のホールがグローバルだった
384:デフォルトの名無しさん
21/12/08 19:30:48.14 5HATgl/c0.net
入力行をsplitして取り込む
arg1, arg2, arg3 = line.split('\t')
みたいな感じ
でも、入力がちゃんとしてなくて数が多くても少なくてもエラーになる
そこはよしなにやって欲しい
足りない部分はNoneで埋めて、余った分は捨てていい
というええかげんなことをしようと思ったら、ええかげん関数を作るしかないのかな
385:デフォルトの名無しさん
21/12/08 19:35:03.01 lsXABI8+d.net
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')
???
386:デフォルトの名無しさん
21/12/08 21:14:52.99 /jR8/f4s0.net
>>384
arg1, arg2, arg3, *_ = line.split('¥t') + [None, None]
387:デフォルトの名無しさん
21/12/08 23:31:45.91 5HATgl/c0.net
+ でいいんだな
388:デフォルトの名無しさん
21/12/09 02:15:13.68 WjLFVkiy0.net
すみません、質問なのですが、
newline= ってpython3じゃないと使えないのですか?
389:デフォルトの名無しさん
21/12/09 02:26:38.04 y+vTbIG00.net
調べてから質問してる?
390:デフォルトの名無しさん
21/12/09 02:29:06.32 WjLFVkiy0.net
してる
391:デフォルトの名無しさん
21/12/09 05:36:26.42 .net
"newline= を使う"ってなに?
文字列の中に改行コードは使えるか
って意味じゃないよね
それだとそっこーぐぐったら出てくるし。
なんかのライブラリやらフレームワーク的な話なのだろうか
392:デフォルトの名無しさん
21/12/09 05:39:43.24 .net
あるいはクロスプラットフォームでのCRLFかLFかみたいな話かな
393:デフォルトの名無しさん
21/12/09 06:51:10.51 7v43kIFS0.net
openのオプションでしょ
394:デフォルトの名無しさん
21/12/09 08:02:22.78 I94H5Ioy.net
>>388
python3.8.1
URLリンク(techiedelight.com)
python2.7.17
URLリンク(techiedelight.com)
395:デフォルトの名無しさん
21/12/09 08:48:12.08 zIpIn5ri0.net
beautifulsoupでattributeerror: nonetype nas no attribute stringが発生するんだけどnoneになることが想定される場合は一々いっこっこifでかこってやらないとだめなの?
396:デフォルトの名無しさん
21/12/09 08:56:56.15 zIpIn5ri0.net
ifっていうかtryか
397:デフォルトの名無しさん
21/12/09 08:59:10.31 7v43kIFS0.net
最大限何でも見つかるようにしとくから、緩めるのはユーザ側でやってね
という姿勢は間違ってないんだけどな
元から緩かったら厳しくしようがない
398:デフォルトの名無しさん
21/12/09 09:52:10.18 q+Lg0FmZ0.net
自分の管理できないデータを拾おうとする場合は
例外処理は必須だと思う
399:デフォルトの名無しさん
21/12/09 10:42:48.76 WjLFVkiy0.net
>>394
ありがとうございます!!!
400:デフォルトの名無しさん
21/12/09 11:32:41.22 LJEXrIakM.net
>>395
ifかor
Pythonにはsafe navigation operatorがないからスクレイピングコードは煩雑になりがち
URLリンク(en.wikipedia.org)
要素がなければ空文字のようなデフォルト値を返す汎用的関数を自分で用意すると少し読みやすくなる
401:デフォルトの名無しさん
21/12/09 11:51:24.51 q+Lg0FmZ0.net
JSONなんかだと、get()で拾えばまぁ困らんな
402:デフォルトの名無しさん
21/12/09 11:58:39.98 LJEXrIakM.net
BeautifulSoupじゃなくてScrapyなら少しマシ
公式ドキュメントの質は段違い
403:デフォルトの名無しさん
21/12/09 12:37:45.04 LJEXrIakM.net
>>401
指定した要素がない状況を考慮する必要があれば階層ごとに自分でハンドリングが必要だからgetだけじゃダメなんだよね
safe navigation operatorがあればlodashのgetやrubyのdigのようなのが簡単に作れる
近いところでglomがあるけど処理を分割したり、つなげたりできないから使い勝手が悪い
404:デフォルトの名無しさん
21/12/09 14:43:48.67 kmW2UpC80.net
bsのドキュメントってなんであんな書き方なんかな