アカウント名:
パスワード:
「テキストファイルの各行をスキャンして、正規表現にマッチした行の部分文字列を抽出して表示する」だけのスクリプトをPythonで書くのは正直なところ「愚行」です。そういうものはAWKやPerlやRubyで書いた方が幸せになれます(俺はPerlもRubyも書けませんが)。
Pythonで正規表現だの文字列だののモジュールを駆使してテキストファイルをいじっていると「これならAWKで書いた方が早かったじゃん」と思うことはよくありますね(苦笑)。
もっとも、しょっぱなにAWKで書いたスクリプトを拡張してちょっと込み入ったことやらせようと考えると、途端にPythonに移行したくなるわけですけど。
表示する」だけ
じゃないんですけどね。実際には、書き換えルールを別のファイルから読み込んで、それに従って書き換えるんですけど、そこまで細かく書くと守秘義務ってもんが(笑)。
「愚行」です。
そうですか。てぇと、どういうものなら「愚行」ではないんでしょう?読みやすさからくる保守性の高さを利用して、大規模なアプリケーションを書く場合にいいとか?うーん…
横からで恐縮ですが…
Python使いには、正規表現は便利だけど多用しすぎると可読性やら保守性が悪くなると思っている人が多く、elderwand氏が「冗長な正規表現」を挙げているのもそういった理由からでしょう。
私なら、正規表現使わずに書いちゃいますね。単に正規表現に慣れてないからですが。
for line in sys.stdin: ls = line.split() if len(ls) == 0: continue try: i = ls.index('serial') print 'SERIAL:', ls[i-2] except ValueError: print 'NAME:', ls[0]
正規表現は便利だけど多用しすぎると可読性やら保守性が悪くなる
なるほど確かに。しかし、
try: i = ls.index('serial') print 'SERIAL:', ls[i-2] except ValueError: print 'NAME:', ls[0]
この部分が可読性・保守性に優れているかと言うと…。やっぱり正規表現よりはマシか。
でも、これよりもう少し複雑な例だと、どっちが複雑か解らないってことになりませんかね?例えば、私の出した例だと、「serial」は、コメントの中に書いてあることになってるわけですが、そうなると、
i = ls.index('serial') j = ls.index(';') if i
私がろくなコード書かないってのもありますが、確かに正規表現の方が可読性・保守性の高いコードになる可能性も十分にありえます。恐らくは、職人にしか読めない正規表現や3日後に読めなくなる正規表現を嫌ってのものかと。なので、今回くらいのものだと、正規表現で書いても可読性が低くなるとは思いません。
ご指摘のあった部分は、確かに私が書いたコードからして、あんまりきれいじゃないです。
try: i = ls.index('serial') except ValueError: pass else: if i > 2 and ls[i-1] == ';': print 'SERIAL:', ls[i-2] continue print 'NAME:', ls[0]
とするのがいいかもしれません。
ごめんなさい、訂正です。
if i >= 2 and ls[i-1] == ';':
こういうしょうもないミスをすると、ますます正規表現でやった方がいい疑惑が出てくる……
この例では、ってことなんでしょうね。まあ、Pythonに悪い印象は今のところありません。もう少しPythonに付き合ってみようと思います。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
犯人はmoriwaka -- Anonymous Coward
それ以上は無理でしょう。 (スコア:1)
「テキストファイルの各行をスキャンして、正規表現にマッチした行の部分文字列を抽出して表示する」だけのスクリプトをPythonで書くのは正直なところ「愚行」です。そういうものはAWKやPerlやRubyで書いた方が幸せになれます(俺はPerlもRubyも書けませんが)。
Pythonで正規表現だの文字列だののモジュールを駆使してテキストファイルをいじっていると「これならAWKで書いた方が早かったじゃん」と思うことはよくありますね(苦笑)。
もっとも、しょっぱなにAWKで書いたスクリプトを拡張してちょっと込み入ったことやらせようと考えると、途端にPythonに移行したくなるわけですけど。
Re: (スコア:1)
表示する」だけ
じゃないんですけどね。実際には、書き換えルールを別のファイルから読み込んで、それに従って書き換えるんですけど、そこまで細かく書くと守秘義務ってもんが(笑)。
「愚行」です。
そうですか。てぇと、どういうものなら「愚行」ではないんでしょう?
読みやすさからくる保守性の高さを利用して、大規模なアプリケーションを書く場合にいいとか?うーん…
Re: (スコア:1)
横からで恐縮ですが…
Python使いには、正規表現は便利だけど多用しすぎると可読性やら保守性が悪くなると思っている人が多く、elderwand氏が「冗長な正規表現」を挙げているのもそういった理由からでしょう。
私なら、正規表現使わずに書いちゃいますね。単に正規表現に慣れてないからですが。
1を聞いて0を知れ!
Re: (スコア:1)
正規表現は便利だけど多用しすぎると可読性やら保守性が悪くなる
なるほど確かに。
しかし、
この部分が可読性・保守性に優れているかと言うと…。やっぱり正規表現よりはマシか。
でも、これよりもう少し複雑な例だと、どっちが複雑か解らないってことになりませんかね?例えば、私の出した例だと、「serial」は、コメントの中に書いてあることになってるわけですが、そうなると、
Re:それ以上は無理でしょう。 (スコア:2)
私がろくなコード書かないってのもありますが、確かに正規表現の方が可読性・保守性の高いコードになる可能性も十分にありえます。
恐らくは、職人にしか読めない正規表現や3日後に読めなくなる正規表現を嫌ってのものかと。
なので、今回くらいのものだと、正規表現で書いても可読性が低くなるとは思いません。
ご指摘のあった部分は、確かに私が書いたコードからして、あんまりきれいじゃないです。
とするのがいいかもしれません。
1を聞いて0を知れ!
Re:それ以上は無理でしょう。 (スコア:1)
ごめんなさい、訂正です。
if i >= 2 and ls[i-1] == ';':
こういうしょうもないミスをすると、ますます正規表現でやった方がいい疑惑が出てくる……
1を聞いて0を知れ!
Re:それ以上は無理でしょう。 (スコア:1)
この例では、ってことなんでしょうね。
まあ、Pythonに悪い印象は今のところありません。
もう少しPythonに付き合ってみようと思います。