2016-09-18 4 views
1

は私がpytestに宣言型のテストを変換すること

assert UBInt8.parse(b"\x01") == 0x01 
assert UBInt8.build(0x01) == b"\x01" 

リストに正規表現を通じて、常に長さが4であるが、それらを有効にする必要があり、この

[UBInt8.parse, b"\x01", 0x01, None], 
[UBInt8.build, 0x01, b"\x01", None], 

のような行がいっぱいです長いスクリプトを持って主張します1番目はメソッド、2番目は引数、3番目は戻り値、4番目は常にNoneです。私はすでに正規表現を使って同様の問題を解決しましたが(誰かがパーサーを作成しました)、フォーマット文字列の作成には助けが必要です:

Removing six.b from multiple filesを参照してください。これは私が以前使っていたコードです。フォーマット式を書き直す必要があり、正規表現を使わないでください。ここ:(

import re 
import os 

indir = 'files' 

for root, dirs, files in os.walk(indir): 
    for f in files: 
     fname = os.path.join(root, f) 
     with open(fname) as f: 
      txt = f.read() 
     txt = re.sub(r'six\.(b\("[^"]*"\))', r'\1', txt) 
     with open(fname, 'w') as f: 
      f.write(txt) 
     print(fname) 
+2

あなたは私たちがあなたのためにいくつかのコードを書きたいように多くのユーザーがコードを生成するために喜んでいる一方でそれは。見えますコーディネーターが苦労している場合は、通常、ポスターがすでに問題を解決しようとしているときにのみ役立ちます。この作業を実証する良い方法は、これまでに書いたコードを入力することです。 )、期待される出力、実際に出力される出力(コンソール出力、トレースバックなど)を入力します。詳細を入力すると、受け取る可能性が高い回答が多くなります。 –

+0

が編集されました。私はここにコードを添付しました。表現は私が紛失しているものです。 – ArekBulski

答えて

1

私はなし正規表現を思い付いたマニュアルの解析である。

#!/usr/bin/python3 

import re, os, sys 

def processfile(fname): 
    print(fname+'... ') 
    with open(fname, 'rt') as f: 
     txt = f.readlines() 
    with open(fname+"-trans", 'wt') as f: 
     for line in txt: 
      items = list(map(str.strip, line.strip().strip(",[]").split(","))) 
      if len(items) == 4: 
       if items[1] == "None": 
        items[1] = "" 
       if items[3] == "None": 
        o = "assert {0}({1}) == {2}".format(*items) 
       else: 
        if items[1] == "": 
         o = "assert raises({0}) == {3}".format(*items) 
        else: 
         o = "assert raises({0}, {1}) == {3}".format(*items) 

       f.write("  "+o+"\n") 
      else: 
       f.write(line) 

processfile(sys.argv[1]) 
関連する問題