Pythonのお勉強 Part62 (455レス)
Pythonのお勉強 Part62 http://mevius.5ch.net/test/read.cgi/tech/1568616071/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
101: デフォルトの名無しさん [] 2020/04/24(金) 09:04:25.67 ID:Y7/3shvc どの環境がいいのかさっぱりわからんし、チューとは有料が多いし、無料だとハードル高い(´;ω;`) http://mevius.5ch.net/test/read.cgi/tech/1568616071/101
102: デフォルトの名無しさん [] 2020/04/24(金) 09:12:00.60 ID:Y7/3shvc ロリを全裸にしたいんだよaiで http://mevius.5ch.net/test/read.cgi/tech/1568616071/102
103: デフォルトの名無しさん [sage] 2020/04/24(金) 09:25:55.86 ID:TokoipqW 教師データがないので無理です。諦めてください http://mevius.5ch.net/test/read.cgi/tech/1568616071/103
104: デフォルトの名無しさん [sage] 2020/04/25(土) 14:09:08.01 ID:VdLGa5Mo http://mevius.5ch.net/test/read.cgi/tech/1582507911/l50 マルチポストする屑にかまってやってるおまえらやさしいなw http://mevius.5ch.net/test/read.cgi/tech/1568616071/104
105: デフォルトの名無しさん [] 2020/04/26(日) 18:22:55.65 ID:1kL3nhkt Windows上でpyserialのreadline()を使ってるんだ。マニュアルによると、readline()は'\n'で終わるデータを受けたら制御を返すんだけど この、'\n'はASCIIコードで言うと何になるんだろう? '\n'は0x0aだと思うんだけど、0x0aで終わるデータを受けているのに、readline()がタイムアウトで制御を返しているようなんだ。 ちなみに、 マイコン→WiFiモジュール→WiFiルーター→PC の流れでデータが入ってきてて、PC側の仮想COMはHW Virtual Serial Portを使ってる。 データの末尾が0x0aなのはWiresharkで調べた結果だ。 誰か分かる人がいたら教えてほしい。 http://mevius.5ch.net/test/read.cgi/tech/1568616071/105
106: デフォルトの名無しさん [] 2020/04/26(日) 18:48:57.19 ID:8n0jdizN >>105 改行コード http://mevius.5ch.net/test/read.cgi/tech/1568616071/106
107: デフォルトの名無しさん [sage] 2020/04/26(日) 18:57:06.61 ID:1kL3nhkt >>106 それは知ってるんだ 16進数で表すと何になるのかな? http://mevius.5ch.net/test/read.cgi/tech/1568616071/107
108: デフォルトの名無しさん [sage] 2020/04/26(日) 19:04:00.51 ID:kwdN3Wnk >>105 "\n"の扱いはOSで異なる Win CR+LF バイトコードなら0x0d 0x0a Linux/新しいMac LF 0x0a 古いMac CR 0x0d ラズパイ(linux)で0x0aで送信して、winで0x0d 0x0aで待ち受けてタイムアウトしてそう 送信データ列の最後にCR(文字なら\r)つけてみたら? もし送信側がどっかのアプリで送信データ列をさわれないのなら、I/O制御をラップすればいい http://mevius.5ch.net/test/read.cgi/tech/1568616071/108
109: デフォルトの名無しさん [sage] 2020/04/26(日) 19:10:31.16 ID:1kL3nhkt >>108 マイコンはSTM32のベアメタル 普通のシリアルポートで出力したのを見ると末尾は0x0d0x0aになってる。 wiresharkで見たデータも末尾が0x0d0x0a。 Windows系は説明してくれてるように、末尾が0x0d0x0aなんで、readline()はこれで引っかかって タイムアウトせずに制御を返すはずなんだけど実際にはタイムアウトで返してる。 もしかして、readline()について重大な誤解とかしてるのかな http://mevius.5ch.net/test/read.cgi/tech/1568616071/109
110: デフォルトの名無しさん [sage] 2020/04/26(日) 19:17:37.69 ID:kwdN3Wnk >>109 Wiresharkで見張ってるのは送信側? そうなら通信パラメータを見直した方がいいね 通信に失敗してる可能性がある ボーレートやフロー制御周りは大丈夫? http://mevius.5ch.net/test/read.cgi/tech/1568616071/110
111: デフォルトの名無しさん [sage] 2020/04/26(日) 19:32:39.83 ID:1kL3nhkt >>110 見張ってるのは受信側で、pythonも同じPCで走ってる。 ボーレートはマイコン、PC、仮想COMアプリともに921600baudで3つともフロー制御なし http://mevius.5ch.net/test/read.cgi/tech/1568616071/111
112: デフォルトの名無しさん [sage] 2020/04/26(日) 19:35:27.61 ID:kwdN3Wnk そういう話ならreadline固有の問題かもね read()でゴリゴリやるのが早そうだが、気持ち悪いので何とかしたい気はする http://mevius.5ch.net/test/read.cgi/tech/1568616071/112
113: デフォルトの名無しさん [sage] 2020/04/26(日) 19:35:39.74 ID:AAfztbef 通信時には CR+LF に統一してなかったか? http://mevius.5ch.net/test/read.cgi/tech/1568616071/113
114: デフォルトの名無しさん [sage] 2020/04/26(日) 19:46:16.89 ID:kwdN3Wnk 今の時点で気になることはボーレートが速すぎることかな 115200 に落としてみては? http://mevius.5ch.net/test/read.cgi/tech/1568616071/114
115: デフォルトの名無しさん [sage] 2020/04/26(日) 19:57:28.02 ID:1kL3nhkt >>114 やっぱこれが臭いかもなと思って試してみたけど、変わらなかった いい方法が見つからなかったらバイナリで送って1回のデータサイズを固定にしようと思う デバッグが面倒だからあんまりやりたくないけど みんなありがとう http://mevius.5ch.net/test/read.cgi/tech/1568616071/115
116: デフォルトの名無しさん [] 2020/04/27(月) 10:55:49.73 ID:YGWMtg+u https://stackoverrun.com/ja/q/11457630 http://mevius.5ch.net/test/read.cgi/tech/1568616071/116
117: デフォルトの名無しさん [] 2020/04/27(月) 10:57:19.21 ID:YGWMtg+u https://oxon.hatenablog.com/entry/20111108/1320680175 http://mevius.5ch.net/test/read.cgi/tech/1568616071/117
118: デフォルトの名無しさん [] 2020/04/27(月) 10:58:55.93 ID:YGWMtg+u https://stackoverflow.com/questions/38950613/have-to-use-sleep-with-pyserial-when-opening-com-port-for-arduino-nano 小出しでスマンコ http://mevius.5ch.net/test/read.cgi/tech/1568616071/118
119: デフォルトの名無しさん [sage] 2020/04/27(月) 13:18:50.32 ID:TXuwHWqq 写真や動画を、撮影日時でリネームするプログラムを作成しています。 写真(jpg)はexifから取得できるのですが、 mp4はどのように取得できるのでしょうか? Windowsの場合、ファイルのプロパティで「メディアの作成日時」というのがあるので、 この値をpythonで取得したいと考えています。 http://mevius.5ch.net/test/read.cgi/tech/1568616071/119
120: デフォルトの名無しさん [] 2020/04/27(月) 14:54:53.02 ID:l27UEbbh import sys, os, time import win32com.client foldername = r'hage\hoge' filename = 'fuga' st = os.stat(foldername + r'\' + filename) print time.asctime(time.localtime(st[7])) print time.asctime(time.localtime(st[8])) print time.asctime(time.localtime(st[9])) sh = win32com.client.Dispatch('Shell.Application') fol = sh.NameSpace(foldername) folitem = fol.ParseName(filename) print fol.GetDetailsOf(folitem, 0) print fol.GetDetailsOf(folitem, 1) print fol.GetDetailsOf(folitem, 2) print fol.GetDetailsOf(folitem, 3) print fol.GetDetailsOf(folitem, 4) print fol.GetDetailsOf(folitem, 5) https://dot-sharp.com/net-getdetailsof/ https://www.atmarkit.co.jp/fdotnet/dotnettips/591mp3tags/mp3tags.html https://docs.microsoft.com/ja-jp/windows/win32/api/shobjidl_core/nf-shobjidl_core-ishellfolder2-getdetailsof http://mevius.5ch.net/test/read.cgi/tech/1568616071/120
121: デフォルトの名無しさん [] 2020/04/27(月) 15:08:53.33 ID:l27UEbbh http://free-ux.blog.enjoy.jp/blog/2016/04/mp4-1aeb.html http://mevius.5ch.net/test/read.cgi/tech/1568616071/121
122: デフォルトの名無しさん [sage] 2020/04/27(月) 16:53:34.08 ID:TXuwHWqq >120,121 できました。ありがとうございます! http://mevius.5ch.net/test/read.cgi/tech/1568616071/122
123: デフォルトの名無しさん [sage] 2020/04/27(月) 17:11:08.18 ID:On5R6UtW >>119 exiftoolが簡単 jpgもmp4も同じように処理できる http://mevius.5ch.net/test/read.cgi/tech/1568616071/123
124: デフォルトの名無しさん [sage] 2020/04/27(月) 17:47:45.89 ID:S6IgcIOW こういう感じのコードを書いて、スレッドが実行されるたびにグラフを更新したいんだけど、更新されない。 どうしたら更新するようになるんだろうか? https://ideone.com/xKNBxF 動作の説明をすると、こんな感じ(〇は動作が確認されている箇所) ・mainでまず、このクラスのインスタンスを生成 ここで、グラフを生成、表示 ・mainでstart()して、スレッドを起動 ここで、グラフのデータを更新、 DrawChart()関数で、62〜64行、70〜72行で取得した描画データのハンドル(?)に入れてる データが更新されているのは確認済み スレッドが動作しているのも確認済み なんだけど、グラフが更新されていない。何らかの方法で描画を促す必要があるんだろうけどそれが何なのかが分からない http://mevius.5ch.net/test/read.cgi/tech/1568616071/124
125: デフォルトの名無しさん [] 2020/04/27(月) 17:57:46.59 ID:l27UEbbh draw一回しか呼ばれてない http://mevius.5ch.net/test/read.cgi/tech/1568616071/125
126: デフォルトの名無しさん [sage] 2020/04/27(月) 18:22:07.14 ID:S6IgcIOW >>125 DrawChart()の最後に、self.fig.canvas.draw()入れると、呼ばれた瞬間落ちるんだけど・・・ http://mevius.5ch.net/test/read.cgi/tech/1568616071/126
127: デフォルトの名無しさん [] 2020/04/27(月) 18:30:21.87 ID:l27UEbbh 両方に入れたら? http://mevius.5ch.net/test/read.cgi/tech/1568616071/127
128: デフォルトの名無しさん [sage] 2020/04/27(月) 18:42:55.15 ID:kdRxWvyg ここに回答が https://stackoverflow.com/questions/34764535/why-cant-matplotlib-plot-in-a-different-thread http://mevius.5ch.net/test/read.cgi/tech/1568616071/128
129: デフォルトの名無しさん [sage] 2020/04/27(月) 19:28:07.67 ID:S6IgcIOW >>128 ありがとう 読んでみる http://mevius.5ch.net/test/read.cgi/tech/1568616071/129
130: デフォルトの名無しさん [sage] 2020/04/27(月) 19:33:54.89 ID:GPaVbTha 英語は読めなくてもコードは読めるなと最近思った。 http://mevius.5ch.net/test/read.cgi/tech/1568616071/130
131: デフォルトの名無しさん [age] 2020/04/27(月) 20:18:59.45 ID:+seUVNTq コード読んでから説明を読むのだ http://mevius.5ch.net/test/read.cgi/tech/1568616071/131
132: デフォルトの名無しさん [sage] 2020/04/28(火) 05:26:45.81 ID:CHpsAleC コードの方が文法が少ないから 慣れると英語より楽だね http://mevius.5ch.net/test/read.cgi/tech/1568616071/132
133: デフォルトの名無しさん [sage] 2020/04/28(火) 23:48:49.42 ID:z88ZISx+ そう言われるまで、 プログラミングが言語を駆使するものだという認識がなかったわ。 まさにLanguageなのにねぇw 慣れてしまうとそんなもんなんだろうか。 http://mevius.5ch.net/test/read.cgi/tech/1568616071/133
134: デフォルトの名無しさん [sage] 2020/04/29(水) 01:25:30.89 ID:aX8BTSoD プログラミング言語には重層的な意味がないから単に記号論理的な頭の使い方をすればよくて、 慣れたらほとんど自動的に論理展開が行われちゃうから大抵簡単だよね 高階関数のややこしいのとかは全然わかんないけど あれも慣れればいけるのかもしれないが http://mevius.5ch.net/test/read.cgi/tech/1568616071/134
135: デフォルトの名無しさん [] 2020/04/29(水) 09:29:58.71 ID:TuLha3Ht ソースコードが仕様書(キリっ http://mevius.5ch.net/test/read.cgi/tech/1568616071/135
136: デフォルトの名無しさん [sage] 2020/04/29(水) 10:35:22.49 ID:cZ1bml3g 外国人の書いたコードはコメントが英語だから参考にならない http://mevius.5ch.net/test/read.cgi/tech/1568616071/136
137: デフォルトの名無しさん [sage] 2020/04/29(水) 13:50:22.63 ID:O4788IK/ >>136 自動翻訳にコピペすらできないあほはっけん(*゚д゚)ムホムホ http://mevius.5ch.net/test/read.cgi/tech/1568616071/137
138: 124 [sage] 2020/04/29(水) 14:43:10.32 ID:DiTATvas >>128を見て、別スレッドで描画するからうまくないってことが分かって修正してたんだけど また詰まってしまった。 animation.FuncAnimation()で定期的に描画関数を実行するようにしたんだけど、 更新できないんだ。 描画するための関数は何を使えばいいんだろう? ↓が現在のコードで、おそらく、96,97行目をうまいことしてやればいいんだと思うけど、それが分からないんだ https://pastebin.com/C3p1MpRT http://mevius.5ch.net/test/read.cgi/tech/1568616071/138
139: デフォルトの名無しさん [] 2020/04/29(水) 14:54:44.23 ID:Kg9KSBpE >>132 >>136 アラビア語のソースコードらしいんだが意外と読めるなω https://stackoverrun.com/ja/q/10970956 http://mevius.5ch.net/test/read.cgi/tech/1568616071/139
140: デフォルトの名無しさん [sage] 2020/04/29(水) 15:02:53.91 ID:/cY8SYIV アラビアータは右から読むので大変だろうと思う http://mevius.5ch.net/test/read.cgi/tech/1568616071/140
141: デフォルトの名無しさん [] 2020/04/29(水) 17:10:30.76 ID:DmNhs8y1 日本語も元々は右から左の文化だが 意外と大変じゃないな http://mevius.5ch.net/test/read.cgi/tech/1568616071/141
142: デフォルトの名無しさん [sage] 2020/04/29(水) 18:43:15.19 ID:PE4YX4Ec 右から読みの時代の日本人が現役でいるとは思えないんだが・・・・・ http://mevius.5ch.net/test/read.cgi/tech/1568616071/142
143: デフォルトの名無しさん [sage] 2020/04/29(水) 19:05:28.84 ID:PJPPBooA こういうのでもそんなに苦労せずに読めるって話だろ https://image.itmedia.co.jp/nl/articles/1711/08/qk_migigaki-1.jpg http://mevius.5ch.net/test/read.cgi/tech/1568616071/143
144: デフォルトの名無しさん [sage] 2020/04/29(水) 19:20:52.12 ID:qH3UHXua 車のボディに書き込まれる社名に、右から読ませるタイプがある http://mevius.5ch.net/test/read.cgi/tech/1568616071/144
145: デフォルトの名無しさん [sage] 2020/04/29(水) 22:18:48.43 ID:f6LPbIhG >>144 車の前側から読ませるだけなんだけどね タクシー側面の文字も昔は前→後だった http://mevius.5ch.net/test/read.cgi/tech/1568616071/145
146: デフォルトの名無しさん [] 2020/04/30(木) 10:18:45.32 ID:J5HM1FZQ >>144 電話番号は混乱するな http://mevius.5ch.net/test/read.cgi/tech/1568616071/146
147: デフォルトの名無しさん [sage] 2020/04/30(木) 10:47:19.40 ID:aC6sOq5z 楽に読めるな https://i.imgur.com/7KSOUzx.jpg http://mevius.5ch.net/test/read.cgi/tech/1568616071/147
148: デフォルトの名無しさん [sage] 2020/04/30(木) 11:16:46.11 ID:qQJQyRha さすが大本営発表 http://mevius.5ch.net/test/read.cgi/tech/1568616071/148
149: デフォルトの名無しさん [] 2020/04/30(木) 12:06:40.91 ID:J5HM1FZQ 令和二年三月三十一日というと 大東亞戦争で言えば昭和十七年位のレベルだな http://mevius.5ch.net/test/read.cgi/tech/1568616071/149
150: デフォルトの名無しさん [sage] 2020/04/30(木) 12:18:04.39 ID:6rah8Luj >>147 出来ればフォントは活版っぽく頼む http://mevius.5ch.net/test/read.cgi/tech/1568616071/150
151: デフォルトの名無しさん [] 2020/04/30(木) 15:28:24.17 ID:cbZ3bzMp 今のキッズはマジで活版印刷された本見たことないんじゃないの シラネーんだよきっと 見せてもなんで紙がへこんでるのかも知らなさそう http://mevius.5ch.net/test/read.cgi/tech/1568616071/151
152: デフォルトの名無しさん [sage] 2020/04/30(木) 23:25:29.06 ID:zLT/BN3l コロナ騒ぎあおってる連中がやりたいのって 結局これだよなあ http://mevius.5ch.net/test/read.cgi/tech/1568616071/152
153: デフォルトの名無しさん [sage] 2020/04/30(木) 23:37:16.70 ID:GAsejKiL python foo.py python foo.py -s python foo.py -s 10 を区別したいんだけどどうすれば良いの? >cat foo.py import argparse p = argparse.ArgumentParser() p.add_argument('-s', nargs='?') args = p.parse_args() print(args.s) >python foo.py None >python foo.py -s None >python foo.py -s 10 10 これじゃ-sの有無が判らん http://mevius.5ch.net/test/read.cgi/tech/1568616071/153
154: デフォルトの名無しさん [sage] 2020/05/01(金) 00:14:53.03 ID:eLVhgQ4h -s のアクションが不明 http://mevius.5ch.net/test/read.cgi/tech/1568616071/154
155: デフォルトの名無しさん [sage] 2020/05/01(金) 01:57:54.00 ID:gkl90wa7 if "s" in args:とかじゃだめなん? http://mevius.5ch.net/test/read.cgi/tech/1568616071/155
156: デフォルトの名無しさん [] 2020/05/01(金) 08:18:55.56 ID:gHLn0qVE default=-1とかつければいい。 http://mevius.5ch.net/test/read.cgi/tech/1568616071/156
157: デフォルトの名無しさん [] 2020/05/01(金) 09:17:19.44 ID:k2YlXFh6 >>152 革命のチャンスだしなω 新学期9月は成功しそうだなωωω http://mevius.5ch.net/test/read.cgi/tech/1568616071/157
158: デフォルトの名無しさん [sage] 2020/05/01(金) 09:28:27.73 ID:xXuuls7c >>156 どちらかと言えばconstを使うケース いずれにしろnargs=‘?’の場合 argparseだけでは100%の判別は無理 http://mevius.5ch.net/test/read.cgi/tech/1568616071/158
159: デフォルトの名無しさん [sage] 2020/05/01(金) 10:50:01.22 ID:MCEzZFz/ Ruby のオプションパーサーみたいなやつだろ ruby script.rb -h a -s 10 と入力すると、 require 'optparse' opts = { } ARGV.options do |o| o.on( "-s 引数", "引数" ) { |x| opts[ :s ] = x } o.on( "-h 引数", "引数" ) { |x| opts[ :h ] = x } o.parse! end p opts #=> {:h=>"a", :s=>"10"} http://mevius.5ch.net/test/read.cgi/tech/1568616071/159
160: 159 [sage] 2020/05/01(金) 10:57:21.41 ID:MCEzZFz/ >>159 の続き ruby script.rb -h a -s missing argument: -s {:h=>"a"} ruby script.rb -s -h a {:s=>"-h"} これは間違えて、次のオプション・-h を引数と勘違いしているw http://mevius.5ch.net/test/read.cgi/tech/1568616071/160
161: デフォルトの名無しさん [sage] 2020/05/01(金) 14:24:58.96 ID:gkl90wa7 >>160 お前生きてて楽しい? http://mevius.5ch.net/test/read.cgi/tech/1568616071/161
162: デフォルトの名無しさん [sage] 2020/05/01(金) 17:19:05.23 ID:oZ5QHjAY そもそも、"-s"と"10"が何を意味しているかわからないし、 何をしたいのかもわからない。 特に後者は、全体の引数とも、"-s"の値ともとれるわけだし。 >>158 "-s"のほうで、actionを指定すればできるよ http://mevius.5ch.net/test/read.cgi/tech/1568616071/162
163: デフォルトの名無しさん [sage] 2020/05/05(火) 12:44:32.20 ID:lrlqOn2p フォルダ構成が複雑な、ものすごい膨大なlogファイルから、 特定のワードが含む行と、ファイル名を抽出したいのですが、 ・サブフォルダを巡回して命令を実行する ・ファイル名のあとに、検索結果を出す のやり方がわからず、躓いております。 参考になりそうなサンプルがあればご教示いただけますでしょうか。 test01.log ----------------------------------- 0501 問題ないよ 0501 Error! |まちがってるよ |まちがってるよ 0501 問題ないよ ----------------------------------- このうち ・「Error」のある行 ・| ではじまる行 を抜き出し、このような出力結果を希望しています。 test01.log ----------------------------------- 0501 Error! |まちがってるよ |まちがってるよ ----------------------------------- 「Find」「再帰的」「文字列」「検索」「Python」「テキストマイニング」などで検索をするも、これといった情報が得られず…… 参考になりそうなURL、「こういうワードで検索しろ」などあればお願いします。 http://mevius.5ch.net/test/read.cgi/tech/1568616071/163
164: デフォルトの名無しさん [sage] 2020/05/05(火) 12:47:27.09 ID:hpwOcr6+ >>163 globモジュール with open f.readlines strクラスのfindメソッド 一回公式のPythonチュートリアルを全てやってみることをお勧めする http://mevius.5ch.net/test/read.cgi/tech/1568616071/164
165: デフォルトの名無しさん [] 2020/05/05(火) 13:47:12.99 ID:JDagEH9a Perl時代の教科書は一章まるまる使って正規表現説明してたが Pythonじゃあそういうことは無くなった なので現代では言語に関わりなく「正規表現」というキーワード自体知らない、ということが起こってるのではなかろうか Python チュートリアル ― Python 3.8.3rc1 ドキュメント https://docs.python.org/ja/3/tutorial/index.html 公式チュートリアルでも「標準ライブラリミニツアー」の箇所にちょっと置かれているだけで、扱いが非常に小さい つまり、初心者はそこまで念入りには読まないだろうから、キーワード自体を知らない http://mevius.5ch.net/test/read.cgi/tech/1568616071/165
166: デフォルトの名無しさん [] 2020/05/05(火) 14:05:25.10 ID:3RO6WiLW >>163 os.walk os.path.walk どっちかのドキュソ観れ http://mevius.5ch.net/test/read.cgi/tech/1568616071/166
167: デフォルトの名無しさん [sage] 2020/05/05(火) 14:15:49.76 ID:uTsiWylk >>163 grep使えって 出力フォーマットが気に入らないなら ripgrep使うかgrep -lをループさせればいい $ rg -n "^¥||Error" ./*.log ./test02.log 2:0501 Error! 3:|まちがってるよ 4:|まちがってるよ ./test01.log 2:0501 Error! 3:|まちがってるよ 4:|まちがってるよ http://mevius.5ch.net/test/read.cgi/tech/1568616071/167
168: デフォルトの名無しさん [sage] 2020/05/05(火) 14:18:12.72 ID:uTsiWylk regex="^¥||Error" grep -l -E "$regex" ./*.log | while read file do echo "$file" grep -h -E "$regex" "$file" | xargs printf "¥t%s¥n" done #出力 ./test01.log 0501 Error! |まちがってるよ |まちがってるよ ./test02.log 0501 Error! |まちがってるよ |まちがってるよ http://mevius.5ch.net/test/read.cgi/tech/1568616071/168
169: デフォルトの名無しさん [] 2020/05/05(火) 14:32:59.61 ID:G46XbD1M >>165 正規表現だけで書籍出てるのにそんな人おるんか? 公式でも小さかろうが載ってる内容なら知らないのは言い訳にはならんでしょ http://mevius.5ch.net/test/read.cgi/tech/1568616071/169
170: デフォルトの名無しさん [sage] 2020/05/05(火) 14:37:02.54 ID:KwIsFJ1G >>165 昔は文字列処理が多かったが 今は機械学習とかやるから ページ割かないんだろう http://mevius.5ch.net/test/read.cgi/tech/1568616071/170
171: デフォルトの名無しさん [sage] 2020/05/05(火) 15:10:14.14 ID:93UQ4haG >>163 「膨大な」と書いてあるのでpythonでやるのは速度的な面で躊躇する 他の人も書いているけど標準コマンドを使うのが速い ・Linux/macOSならgrep ・Windowsならfindstr 「フォルダ構成が複雑な」と書かれているのでサブフォルダまで検索するには ・grepの場合は-rオプション ・findstrの場合は/Sオプション を付ける 何らかの理由でpython縛りなら glob.glob os.wak のどちらかを使ってファイルリストを取得した上で、そのファイルに指定したキーワードが含まれるか確認する http://mevius.5ch.net/test/read.cgi/tech/1568616071/171
172: デフォルトの名無しさん [sage] 2020/05/05(火) 15:34:33.06 ID:DTkAo5/g 時代的に書き込み時に複雑なパースが必要になるようなやり方はしないように って方針が一般化してきたからだろう。 もしくはjson,yamlなら専用のライブラリがあったりでわざわざ正規表現使う必要性も下がってる。 http://mevius.5ch.net/test/read.cgi/tech/1568616071/172
173: デフォルトの名無しさん [] 2020/05/05(火) 15:38:40.27 ID:JDagEH9a ……多分時代が違っていて、grepやawkといったコマンドラインツールはおろか、 リダイレクトやパイプの使い方から知らない そもそもコマンドラインを使わないから、cdやdirコマンドですらもあやしい世代だ 本当に知らないんだよ http://mevius.5ch.net/test/read.cgi/tech/1568616071/173
174: デフォルトの名無しさん [sage] 2020/05/05(火) 15:40:34.82 ID:rwJ86+M0 grep -E '^\||Error' -Hd skip ./**/*.log -E で正規表現。 -d skip で、ディレクトリ名を非表示。 -H で、ファイル名も表示。 ディレクトリの再帰は、./**/* 出力 ./test/test01.log:0501 Error! ./test/test01.log:|まちがってるよ ./test/test01.log:|まちがってるよ この出力から、: の前をファイル名、後を行に、分解すればよい Ruby の、glob でも出来るけど http://mevius.5ch.net/test/read.cgi/tech/1568616071/174
175: デフォルトの名無しさん [] 2020/05/05(火) 16:29:06.07 ID:E9jCQTmY >>163 https://ideone.com/xba6sl 組み込み関数やライブラリで同等の機能が用意されているにも関わらず正規表現書くのはやめてほしい http://mevius.5ch.net/test/read.cgi/tech/1568616071/175
176: デフォルトの名無しさん [] 2020/05/05(火) 17:07:50.66 ID:D2QZwsc6 アホしかおらんのか http://mevius.5ch.net/test/read.cgi/tech/1568616071/176
177: 163 [sage] 2020/05/05(火) 17:41:03.01 ID:lrlqOn2p たくさんのご返信ありがとうございます。 >>164 ありがとうございました。 ご推察の通り、Pythonは本を一冊読んだ程度の知識しかありません。 チュートリアル一通り試してみます。 >>165 ありがとうございます。 その二つのドキュメントも読み込んでみます。 >>167 ありがとうございます。 申し遅れておりましたが、Windowsユーザーです。 ただ、教えていただいたコマンドを調べてみると、 Windowsでもインストールすれば、ripgrepを扱えるみたいですね。 必ずしもPythonにこだわらなければならないわけでもないので、 (学習中だったので、使ってみたかった程度) コマンドでの解決も検討してみます。 >>171 >>174 ありがとうございます。 必ずしもPythonでなくてもよいので、Grepやfindstrも調べてみます。 http://mevius.5ch.net/test/read.cgi/tech/1568616071/177
178: 163 [sage] 2020/05/05(火) 17:41:16.65 ID:lrlqOn2p >>175 ありがとうございます。 すごい! まさに私の理想通りの出力結果になりました。 自分なりにいただいたソースコードを調べて、勉強させていただきます。 http://mevius.5ch.net/test/read.cgi/tech/1568616071/178
179: デフォルトの名無しさん [sage] 2020/05/05(火) 18:25:34.80 ID:XXjmfIiw おいおい>>175は冗談で出した例だろ http://mevius.5ch.net/test/read.cgi/tech/1568616071/179
180: デフォルトの名無しさん [sage] 2020/05/05(火) 18:51:52.49 ID:rwJ86+M0 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 http://mevius.5ch.net/test/read.cgi/tech/1568616071/180
181: デフォルトの名無しさん [sage] 2020/05/05(火) 21:21:30.44 ID:6nb4DqgK 本当にデータが大きいのであれば データを分割して複数のPCで並列実行するのも 考えた方がいい http://mevius.5ch.net/test/read.cgi/tech/1568616071/181
182: デフォルトの名無しさん [] 2020/05/05(火) 23:18:26.51 ID:G46XbD1M Pythonでもシェルでもどっちでも良いけど、大量ファイル相手ならマルチで処理すれば良い ファイル毎にやる処理同じなんだから http://mevius.5ch.net/test/read.cgi/tech/1568616071/182
183: 180 [] 2020/05/06(水) 21:09:35.21 ID:Fjn1hDTG >>175 >>180 みたいに、もっと簡単に書けないの? Python には、glob は無いのか? 無ければ、walk とか http://mevius.5ch.net/test/read.cgi/tech/1568616071/183
184: デフォルトの名無しさん [sage] 2020/05/06(水) 21:20:13.91 ID:ohBd/rOh >>183 あるよ Path('.').rglob('*.log')とかglob.iglob(‘./**/*.log’, recursive=True)とか >>175は「ライブラリで同等の機能が用意されているにも関わらず」に対するツッコミ待ちだと思われ http://mevius.5ch.net/test/read.cgi/tech/1568616071/184
185: デフォルトの名無しさん [sage] 2020/05/07(木) 21:24:10.42 ID:xxddKGgg >>175 >>183 pythonにそんなものねえよ! だから初心者向けなんよ。 こういう温かみのある書き方こそpythonらしさがあって、いいじゃないか。 http://mevius.5ch.net/test/read.cgi/tech/1568616071/185
186: デフォルトの名無しさん [sage] 2020/05/07(木) 21:25:15.27 ID:xxddKGgg >>180 Rubyのほうがいいな シンプルでわかりやすい http://mevius.5ch.net/test/read.cgi/tech/1568616071/186
187: デフォルトの名無しさん [sage] 2020/05/07(木) 22:16:34.03 ID:O8jL8wQb >温かみのある書き方 「職人が一行一行、丁寧に書き上げました」 http://mevius.5ch.net/test/read.cgi/tech/1568616071/187
188: sage [] 2020/05/07(木) 23:20:38.81 ID:RMklkh4T 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('----------') http://mevius.5ch.net/test/read.cgi/tech/1568616071/188
189: デフォルトの名無しさん [sage] 2020/05/07(木) 23:21:50.47 ID:VKbX/7v8 美味しそうw http://mevius.5ch.net/test/read.cgi/tech/1568616071/189
190: デフォルトの名無しさん [sage] 2020/05/07(木) 23:37:05.12 ID:Lnek/XJg >>188 `in`を使いましょう The find() method should be used only if you need to know the position of sub. To check if sub is a substring or not, use the in operator: ついでにRubyの例はoutputsの配列が めちゃくちゃでかくなる可能性も考慮されてる http://mevius.5ch.net/test/read.cgi/tech/1568616071/190
191: 180 [] 2020/05/08(金) 12:32:49.45 ID:Fn4yfVbS >>180 は、配列化していない! メソッドチェーンで逐次処理。 前段から1つ来たら、1つ処理する 配列に入れる意味がない Dir.glob( パターン ).select{ }.each{ } http://mevius.5ch.net/test/read.cgi/tech/1568616071/191
192: 180 [sage] 2020/05/08(金) 12:39:56.07 ID:Fn4yfVbS Python は大学院卒とか、高学歴の非プログラマーの学者が使うもの。 数学・統計は知っているけど、プログラミング・コンピューター・OS などを知らない 一方、Ruby は低学歴の職人プログラマーが使うもの。 数学・統計は知らないけど、プログラミング・コンピューター・OS などには詳しい だから、Rubyの1行1行には、職人さんが丁寧に書いた、温かみが感じられる! http://mevius.5ch.net/test/read.cgi/tech/1568616071/192
193: デフォルトの名無しさん [sage] 2020/05/08(金) 13:25:49.56 ID:tDlcbx57 Pythonが文字列処理得意だったらなあ http://mevius.5ch.net/test/read.cgi/tech/1568616071/193
194: デフォルトの名無しさん [sage] 2020/05/08(金) 17:09:53.24 ID:JpV79Xjz >>193 ??? むしろバイナリ処理には呪文が必要なのがPython。 2バイト文字が大変なのには禿同。 http://mevius.5ch.net/test/read.cgi/tech/1568616071/194
195: デフォルトの名無しさん [sage] 2020/05/08(金) 19:00:25.69 ID:ztqG52En 例えば多数ある文章間で使用単語の類似性を検討するにはどの言語がやりやすい? http://mevius.5ch.net/test/read.cgi/tech/1568616071/195
196: デフォルトの名無しさん [sage] 2020/05/08(金) 19:26:27.46 ID:qca/Mwjw >>195 word2vecやdoc2vecのライブラリが揃ってたらどの言語でも良いと思う 参考資料が多いと言う観点や辞書の手に入りやすさと言う観点からはpythonかな その他重要なのは、対象とする文書を読み込めるを機能があるかどうか mdやtxtのASCIIばかりでなくdocxやpdfも対象と言うことならpythonでいい http://mevius.5ch.net/test/read.cgi/tech/1568616071/196
197: デフォルトの名無しさん [sage] 2020/05/08(金) 21:30:24.58 ID:FhTTD0+N >>193 えっ、Pythonの用途の大半は大きな意味での文字列処理 つまりテキスト処理だと思うんだが http://mevius.5ch.net/test/read.cgi/tech/1568616071/197
198: デフォルトの名無しさん [sage] 2020/05/08(金) 23:18:55.72 ID:B0NvsSSc >>194 ぱいそんに http://mevius.5ch.net/test/read.cgi/tech/1568616071/198
199: デフォルトの名無しさん [] 2020/05/09(土) 09:29:52.12 ID:3rxWY8lS おっぱyは4bytes http://mevius.5ch.net/test/read.cgi/tech/1568616071/199
200: デフォルトの名無しさん [sage] 2020/05/09(土) 11:28:18.96 ID:4AGhJAkS 知識が20年前ぐらいで止まってるんだけど perlのかわりになりますかね http://mevius.5ch.net/test/read.cgi/tech/1568616071/200
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 255 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.020s