<p>如果您在文本文件中有一个固定的变量定义模式,比如<code>VAR: VALUE</code>,那么下面是我的代码,用于在不基于预定义变量名称的情况下计算它</p>
<p>来源数据:</p>
<pre><code># allexpo.txt
random text
random text
X: 123
Y: 300
A: 101
John: 200
random text
X: 22
Y: 34
Z: 458.000 random text
John: 400
random text
</code></pre>
<p>代码如下:</p>
<h3>步骤0</h3>
<p>从文件中获取数据</p>
<pre><code>with open('allexpo.txt', 'r') as file:
expo_file = file.read()
print(expo_file)
</code></pre>
<h3>步骤1</h3>
<pre><code>import re
arr = [i.split(': ') for i in '.'.join(re.findall('[a-zA-Z0-9]*: [0-9]*', expo_file)).split('.')]
print(arr)
# it gives you structure like this:
# [['X', '123'], ['Y', '300'], ['A', '101'], ['John', '200'], ['X', '22'], ['Y', '34'], ['Z', '458'], ['John', '400']]
</code></pre>
<h3>步骤2</h3>
<pre><code>arr1 = [(i[0], float(i[1])) for i in arr]
print(arr1)
# it gives you structure like this:
# [('X', 123.0), ('Y', 300.0), ('A', 101.0), ('John', 200.0), ('X', 22.0), ('Y', 34.0), ('Z', 458.0), ('John', 400.0)]
</code></pre>
<h3>步骤3</h3>
<pre><code>var = {k:sum([v[1] for v in arr1 if v[0] == k]) for k in set([i[0] for i in arr1]) }
print(var)
# it gives you desire result:
# {'Z': 458.0, 'John': 600.0, 'Y': 334.0, 'X': 145.0, 'A': 101.0}
</code></pre>
<p>最终它是一个三行代码!:)</p>