<p>我的建议是,如果可能的话,更改文件的输入格式。这会大大简化你的生活。<br/>如果这是不可能的,下面的代码可以解决您的问题:</p>
<pre><code>import pandas as pd
import re
pattern_tuples = '(?<=\()[^\)]*'
pattern_numbers = '[ ,](?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?'
col_name = ['ngram', 'logreg', 'vocabSize', 'score']
with open('test.txt','r') as f:
matchs = re.findall(pattern_tuples, f.read())
arr_data = [[float(val.replace(',','')) for val in re.findall(pattern_numbers, match)] for match in matchs]
df = pd.DataFrame(arr_data, columns=col_name).astype({'ngram':'int', 'vocabSize': 'int'})
</code></pre>
<p>并给出:</p>
<pre><code> ngram logreg vocabSize score
0 1 0.01 10000 0.858047
1 2 0.01 10000 0.888090
2 3 0.01 10000 0.865645
</code></pre>
<hr/>
<h2>简要说明</h2>
<ol>
<li>读取文件</li>
<li><p>使用<a href="https://docs.python.org/3/library/re.html#module-contents" rel="nofollow noreferrer">re.findall</a>和regex <code>pattern_tuples</code>查找文件中的所有元组</p></li>
<li><p>对于每个元组,使用regex <code>pattern_numbers</code>可以找到您感兴趣的4个数值。这样,您将获得包含您的数据的列表</p></li>
<li><p>在数据框中输入结果</p></li>
</ol>
<hr/>
<h2>额外的</h2>
<p>以下是如何将简历结果保存为<em>json格式</em>,以便更轻松地管理:</p>
<ol>
<li><p>创建<code>cv_results</code>数组以保留CV结果</p></li>
<li><p>对于CVs的每个循环,您将得到一个包含结果的元组<code>t</code>,您必须将其转换为字典并挂在数组<code>cv_results</code></p></li>
<li><p>在CV循环的末尾,以json格式保存结果</p></li>
</ol>
<p>是的。你知道吗</p>
<pre><code>cv_results = []
for _ in range_cv: # Loop CV
# ... Calculate results of CV in t
t = ({'ngram_a67e6f3205f0-n': 1,
'logreg_c120232d9faa-regParam': 0.01,
'cntVec_9c0e7831261d-vocabSize': 10000},
0.8580469779197205) # FAKE DATA for this example
# append results like a dict
cv_results.append({'res':t[0], 'score':t[1]})
# Store results in json format
with open('cv_results.json', 'w') as outfile:
json.dump(cv_results, outfile, indent=4)
</code></pre>
<p>现在您可以读取json文件,并且可以像普通python字典一样访问所有字段:</p>
<pre><code>with open('cv_results.json') as json_file:
data = json.load(json_file)
data[0]['score']
# output: 0.8580469779197205
</code></pre>