2017-04-05 11 views
1

私はサーバーへの呼び出しを行い、応答をフェッチするpythonスクリプトを書いています。サーバーを呼び出している間、要求の本体にはほとんど値が渡されません。この値は、テキストファイルを読み取って取得されるはずです。テキストファイルのサンプルを以下に示します。テキストファイルからのPython文字列の抽出

私のテキストファイルのサンプル:ここに


Host: localhost:8080 
Connection: keep-alive 
..... 
..... 
{"token":"abcdefhutryskslkslksslslks=="}POST /fill/entry/login HTTP/1.1 

Host: localhost:8080 
Connection: keep-alive 
..... 
..... 
{"value":"abcdefghijklmnopqrstuvwxyz", 
"pass":"123456789zxcvbnmljhgfds", 
"token":"abcdefghijklmnopqrstuvwxyz=="}POST /fill/health HTTP/1.1 

あなたが観察することができる場合、私は別の回答を得ます。 Iは、{「「値」とで終わる}(試料に見られるように、応答の第二の部分)で始まる文字列をキャプチャする必要がある。

スタックオーバーフローで検索で、Iは、シナリオ出くわしそこでは文字列が抽出されますが、明確な開始点と終了点があります。私の場合は、検索文字列 "{" url "を使用して開始点を一意に識別できますが、終了点はテキストファイルには複数の括弧も含まれています。

上記のように、テキストファイルから刺しゅうの特定の部分を取り出す際の提案や指針は本当に役立ちます。

答えて

2

re例:

>>> with open('file') as f: 
... raw = f.read() 
>>> 
>>> import re 
>>> pat = re.compile(r'{"value":[^{]+}') 
>>> pat.findall(raw) 
['{"value":"abcdefghijklmnopqrstuvwxyz",\n "pass":"123456789zxcvbnmljhgfds",\n "token":"abcdefghijklmnopqrstuvwxyz=="}'] 
>>> pat.search(raw).group() 
'{"value":"abcdefghijklmnopqrstuvwxyz",\n "pass":"123456789zxcvbnmljhgfds",\n "token":"abcdefghijklmnopqrstuvwxyz=="}' 
+0

アイデアありがとう。私は今、値を取得することができます。ただし、独自のソリューションで利用可能な場合は、すべての値が表示されます。どのように2番目の部分だけを取り出すことができるかについてのアイデアはありますか?つまり、 "{"値 "から"} "で始まる文字列 – mbvee

+0

Klashxxに感謝します。それは魅力的に機能しました。 – mbvee

1

ファイルがあまり大きくない場合は、file.readlines()を使用してテキスト全体を文字列に読み取ってから、regular expression libraryを使用して必要な部分を抽出することができます。インタプリタから

+0

ファイルサイズが大きいです。 – mbvee

関連する問題