2016-11-08 6 views
-2

Regexを使用してテキストファイルを解析する際に間違っていることを誰かが助けてくれますか? Pythonを使ってコードを実行する私は以下のテキストファイルで回答を得ました。numvaluelistという値を構文解析して取得します。現在TypeErrorを取得しています。Pythonを使用してテキストファイルを解析中にRegexが発生する

エラー:

lines = line_re.findall(data) 
TypeError: expected string or buffer 

文字列形式のテキストファイル(.txt)

historic_list { 
    id: "Text1(long) 11A" 
    startdate: 345453 
    numvaluelist: 0.123 
    datelist: 345453 
} 
historic_list { 
    id: "Text1(short) 11B" 
    startdate: 345453 
    numvaluelist: 0.456 
    datelist: 345453 
} 
historic_list { 
    id: "Text2(long) 11C" 
    startdate: 345453 
    numvaluelist: 1.789 
    datelist: 345453 
} 
datelist: 345453 
} 
time_statistics { 
    job_id: "123" 
} 
UrlPairList { 
} 

Pythonのコード

f= open(".txt_file", "r") 
data = f.readlines() 
# print data 

line_re = re.compile(r'\{[^\}]+\}') 
value_re = re.compile(r"(\w+): ('[^']*'|\S+)") 

results = [] 
lines = line_re.findall(data) 
for line in lines: 
    data_line = dict() 
    values = re.findall(value_re, line) 
    for (name, value) in values: 
     if(value[-1] == '}'): value = value[:-1] # to handle "foo}" without space 
     if(value[:1] == "'"): value = value[1:-1] # strip quotes 
     data_line[name] = value 
    results.append(data_line) 

print type(results) 

final_results = [] 
for i in results: 
    for key, value in i.items(): 
     if key == 'numvaluelist': 
      final_results.append(i['numvaluelist']) 
print final_results 

答えて

2

プロblemはあなたの正規表現ではありません。 readlinesはリストを返しますが、re.findallは文字列またはバッファを取ります。何をしたい

は次のとおりです。

data = f.read() 

1つの文字列としてのファイルの内容を返します。

+0

ありがとうございました!!!どのようなばかげたエラー! –

関連する問題