<p>一个简单的解决方案是使用标准库的<a href="https://docs.python.org/3/library/shelve.html?module-shelve" rel="nofollow noreferrer">^{<cd1>}</a>模块:</p>
<pre><code>import shelve
scores = shelve.open('scores')
scores['joe_bloggs'] = 1
print(scores['joe_bloggs'])
scores['joe_bloggs'] += 1
print(scores['joe_bloggs'])
scores.close()
</code></pre>
<p>输出:</p>
<pre><code>1
2
</code></pre>
<p>下次会议:</p>
<pre><code>scores = shelve.open('scores')
print(scores['joe_bloggs'])
</code></pre>
<p>输出:</p>
<pre><code>2
</code></pre>
<blockquote>
<p>A “shelf” is a persistent, dictionary-like object. The difference with “dbm” databases is that the values (not the keys!) in a shelf can be essentially arbitrary Python objects — anything that the pickle module can handle. This includes most class instances, recursive data types, and objects containing lots of shared sub-objects. The keys are ordinary strings.</p>
</blockquote>
<p>您可以将整个内容转换为字典:</p>
<pre><code>>>> dict(scores)
{'joe_bloggs': 2}
</code></pre>
<p>适应您的用例:</p>
<pre><code>username = 'joe_bloggs'
with shelve.open('scores') as scores:
if username in scores:
scores[username] += 1
print("already exists")
else:
print("written to file")
scores[username] = 1
</code></pre>
<p>如果不想总是检查用户是否已经存在,可以使用<code>defaultdict</code>。首先,创建文件:</p>
<pre><code>from collections import defaultdict
import shelve
with shelve.open('scores', writeback=True) as scores:
scores['scores'] = defaultdict(int)
</code></pre>
<p>稍后,您只需编写<code>scores['scores'][user] += 1</code>:</p>
<pre><code>username = 'joe_bloggs'
with shelve.open('scores', writeback=True) as scores:
scores['scores'][user] += 1
</code></pre>
<p>具有多个用户和增量的示例:</p>
<pre><code>with shelve.open('scores', writeback=True) as scores:
for user in ['joe_bloggs', 'user2']:
for score in range(1, 4):
scores['scores'][user] += 1
print(user, scores['scores'][user])
</code></pre>
<p>输出:</p>
<pre><code>joe_bloggs 1
joe_bloggs 2
joe_bloggs 3
user2 1
user2 2
user2 3
</code></pre>