re.matchがnullを返した場合の例外を処理したい

私はこの小さなコードを書いた:

import csv
import re
import os
fileobj = csv.reader(open('c:\\paths1.csv', 'rb'), delimiter=' ', quotechar='|')
for row in fileobj:
    for x in row:
        with open(x) as f:
            for line in f:
                if re.match('(.*)4.30.1(.*)', line):
                    print 'The version match: '+ line

                    print 'incorrect version'     
        filesize= os.path.getsize(x)


    print 'The file size is :'+ str(filesize) +' bytes';

私がしたいことは、次のとおりです:

match()メソッドがそうでない場合、私が知る限り、例外処理を追加してください ファイル内のすべてのものと一致すると None の値が返されますが、 その値を読んで比較を行い、スクリプトを印刷させる方法(バージョンは一致しません)...

誰でも何か提案がありますか?いくつかのWebドキュメントへのリンクを持つことも悪くないでしょう。

前もって感謝します!

0

3 答え

あなたは正しい方向にいます。 None のブール値がFalseなので、コード内で else ブランチを使用するだけです。

 if re.match('(.*)4.30.1(.*)', line):
            print 'The version match: '+ line
 else:
            print 'incorrect version'

今、あなたは、ファイルの最初の(バージョン番号を含む)行またはファイル全体と一致させたいと思っています。

      #first line
      with open(x) as f:
           try:
               #next(f) returns the first line of f, you have to handle the exception in case of empty file
               if re.match('(.*)4.30.1(.*)', next(f))):
                    print 'The version match: '+ line
               else:
                    print 'incorrect version'
           except StopIteration:
               print 'File %s is empty' % s


      #anything
      with open(x) as f:
           if re.match('(.*)4.30.1(.*)', f.read())):
                print 'The version match: '+ line
           else:
                print 'incorrect version'
2
追加された
どうもありがとう!!!!私はまた、それはまっすぐ進むことができるとは思わなかったようなものを試しました:)私はPythonを好きです(私はturbo pascalでプログラムしていました)
追加された 著者 nassio,
私はコードの最初の部分を使用し、それは動作します、それはバージョンがmathcでないときに間違ったバージョンを印刷します、ありがとうございました!
追加された 著者 nassio,
@ JohnMachinええ、一致ファイルの内容と一致しない場合は何も返さず、次にと一致するOPが本当に望んでいることは少なくとも明らかではありません。
追加された 著者 soulcheck,
@ジョンマーチンそこに行く!
追加された 著者 soulcheck,
@ジョンマシムは本当に難しいです。
追加された 著者 soulcheck,
-1。 OPの行のNONEが一致した場合、OPは「不正なバージョン」を印刷します。このコードは、一致しない行ごとに一度印刷します。
追加された 著者 John Machin,
@soulcheck:すべての不一致行に「間違ったバージョン」を印刷したいと本当に思っていますか?
追加された 著者 John Machin,
@soulcheck:あるいは、バージョンがファイルのどの行にあってもかまいません(私の答えを見てください)。とにかく、私はdownvoteを逆転させました。
追加された 著者 John Machin,
import csv
import re #### don't need it
import os #### don't need it
fileobj = csv.reader(open('c:\\paths1.csv', 'rb'), delimiter=' ', quotechar='|')
for row in fileobj:
    for x in row:
        with open(x) as f:
            for line in f:
                if '4.30.1' in line: #### much simpler than regex
                    print 'The version match: '+ line
                    break
            else: # Yes, a `for` statement can have an `else:` 
                # end of file, "break" doesn't arrive here
                print 'incorrect version' # done ONCE at end of file
1
追加された
>>> st = "hello stackers"
>>> pattern = "users"
>>> if re.match(pattern,st):
...      print "match found"
... else:
...     print "no match found"
...
no match found
>>>

一致した場合は re.match() true を返すので、 no が一致する場合は else文見つかった。

0
追加された
私がウェブ上で見つけることができなかったことは大変ありがとう
追加された 著者 nassio,
-1。 OPの行のNONEが一致した場合、OPは「不正なバージョン」を印刷します。このコードは、一致しない行ごとに一度印刷します。
追加された 著者 John Machin,