Pythonのお勉強 Part62 (453レス)
前次1-
抽出解除 レス栞

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
163
(7): デフォルトの名無しさん [sage] 2020/05/05(火) 12:44:32.20 ID:lrlqOn2p(1/3) AAS
フォルダ構成が複雑な、ものすごい膨大なlogファイルから、
特定のワードが含む行と、ファイル名を抽出したいのですが、
・サブフォルダを巡回して命令を実行する
・ファイル名のあとに、検索結果を出す
のやり方がわからず、躓いております。

参考になりそうなサンプルがあればご教示いただけますでしょうか。

test01.log
-----------------------------------
0501 問題ないよ
0501 Error!
|まちがってるよ
|まちがってるよ
0501 問題ないよ
-----------------------------------

このうち
・「Error」のある行
・| ではじまる行
を抜き出し、このような出力結果を希望しています。

test01.log
-----------------------------------
0501 Error!
|まちがってるよ
|まちがってるよ
-----------------------------------

「Find」「再帰的」「文字列」「検索」「Python」「テキストマイニング」などで検索をするも、これといった情報が得られず……
参考になりそうなURL、「こういうワードで検索しろ」などあればお願いします。
165
(3): デフォルトの名無しさん [] 2020/05/05(火) 13:47:12.99 ID:JDagEH9a(1/2) AAS
Perl時代の教科書は一章まるまる使って正規表現説明してたが
Pythonじゃあそういうことは無くなった

なので現代では言語に関わりなく「正規表現」というキーワード自体知らない、ということが起こってるのではなかろうか

Python チュートリアル ― Python 3.8.3rc1 ドキュメント
https://docs.python.org/ja/3/tutorial/index.html

公式チュートリアルでも「標準ライブラリミニツアー」の箇所にちょっと置かれているだけで、扱いが非常に小さい
つまり、初心者はそこまで念入りには読まないだろうから、キーワード自体を知らない
175
(5): デフォルトの名無しさん [] 2020/05/05(火) 16:29:06.07 ID:E9jCQTmY(1) AAS
>>163
https://ideone.com/xba6sl

組み込み関数やライブラリで同等の機能が用意されているにも関わらず正規表現書くのはやめてほしい
180
(4): デフォルトの名無しさん [sage] 2020/05/05(火) 18:51:52.49 ID:rwJ86+M0(2/2) AAS
Ruby で作った

# . で始まる、隠し directory, file を除く
glob_pattern = "/mnt/c/Users/Owner/Documents/test/**/*.log"

re = /^\||Error/
first_time = true # 最初の1回だけ

Dir.glob( glob_pattern )
.select { |full_path| File.file?( full_path ) } # ファイルのみ
.each do |full_path|
# 末尾の改行を削除して、1行ずつ処理する
File.foreach( full_path, chomp: true ) do |line|
line.match( re ) do |matched| # 一致した行だけ
if first_time # 最初だけ
puts full_path
first_time = false
end
puts line
end
end
first_time = true
end

出力
/mnt/c/Users/Owner/Documents/test/test/test01.log
0501 Error!
|まちがってるよ
|まちがってるよ
/mnt/c/Users/Owner/Documents/test/test02.log
|xx
bb Errorzz
188
(4): sage [] 2020/05/07(木) 23:20:38.81 ID:RMklkh4T(1) AAS
rubyは玄人向けだから初心者は使っちゃダメだぞっ

import glob
for log in glob.glob('**/*.log', recursive=True):
. outputs = []
. with open(log, 'r') as f:
. for line in f:
. if line.startswith('|') or line.find('Error') >= 0:
. outputs.append(line)
. if len(outputs):
. print(log)
. print('----------')
. print(''.join(outputs), end='')
. print('----------')
210
(3): デフォルトの名無しさん [sage] 2020/05/11(月) 22:09:27.83 ID:qfXbD+ub(1) AAS
>>188
横から質問します。

私は163さんではありませんが、学習のためにここを覗きました。

記載されているプログラムを実行すると、
’|まちがってるよ¥n’ ,’|まちがってるよ¥n’
と前後に記号と、改行コードがついてしまいますが、これを除去して出力する方法はありますでしょうか。
249
(3): デフォルトの名無しさん [] 2020/06/19(金) 00:00:07.20 ID:NJwW7ejS(1/2) AAS
python 使い始めて数年だけども、今日初めて知ったことがあるので質問させてください。
python のクラスって、インスタンスを生成した後に、勝手にメンバー変数を定義できちゃうものなんですか?
もし、それがよく知られている機構なのであれば、一般的に何と呼ばれているのか教えてください。

例)
>>> class myClass():
... pass
...
>>> c1 = myClass()
>>> dir(c1)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>> c1.hoge = 'hogehoge'
>>> c1.hoge
'hogehoge'
>>> dir(c1)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'hoge']

また、こう言ったことをさせないためには、どうすれば良いのでしょうか?
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.033s