2017-08-28 3 views
0

jsonファイルに存在するパターンを見つけて抽出しようとしています。私はテストとしてこれを行う場合json.dumpsが文字列なるため、それは、見つけて、それを印刷しますregexを使ってpythonでjsonファイルのパターンを見つけ出して抽出する

my_mi = {"_links": {"self": {"href": "/xx-beta/media/111ee111-1e11-11a1-b111/metadata"}}} 
    new = json.dumps(my_mi) 
    my_id = re.findall(r'\w{1,9}\-\w{1,5}\-\w{1,5}\-\w{1,5}\-\w{1,13}', 
    new) 
    print my_id 

問題は、私はJSONファイルとしてそれを使用しようとすると、私はトラブルを抱えているということです私は正規表現は、テストのように動作しますので、json.dumpsが文字列に変換思っ

with open ("resTwo.json", "r") as input_file: 
     new = json.dumps(input_file) 

     my_id = (re.findall(r'\w{1,9}\-\w{1,5}\-\w{1,5}\-\w{1,5}\-\w{1,13}', new)) 
     print my_id 

:それは次のように何をするかでエラー"TypeError: <open file 'resTwo.json', mode 'r' at 0x1109eee40> is not JSON serializable"を、スローせずに動作すること方法でそれを変換します例?

答えて

1

csvリーダーオブジェクトから返される行はリストになります。 re.findallは、第2引数として文字列が必要です。

正規表現を一致させるフィールドを指定するか、for-loopを追加して各フィールドを繰り返し処理します(つまり、rowを繰り返します)。

+0

を、私はそれが出て、それがこのようになっていることを印刷し得るとき: '{「_links」 {"href": "/ xx-beta/media/111ee111-1e11-11a1-b111-111bb11b0ada/metadata"}} 'だから、正規表現をそのフィールドにマッチさせたいなら、それをそれを行うことができるように文字列ですか?行を繰り返し処理しても、正規表現、つまり、findallが期待している文字列に対応する形式ではないのですか?ですから、私はregexの期待される構文と一致させるためにそれを行う方法についてもっと説明したいと思います。ありがとう。 – topplethepat

+0

これはcsvファイルのようには見えません – wim

+0

jsonですが、ファイルは元のスクリプトにcsvとして保存されます。それが最初にjsonだったなら、もっと簡単な解決策がありますか?私はjsonとしてそれを使って作業を試みましたが、正規表現が動作する文字列かそれを得ることに成功しませんでした。 – topplethepat

0

私はこれでそれを解決:「{:[0]だから私はしたい文字列が行にある

for value in input_file: 
     mediaid = (re.findall(r'\w{1,9}\-\w{1,5}\-\w{1,5}\-\w{1,5}\-\w{1,13}', value)) 
関連する問題