Python编辑文本文件的特定单词

时间:2017-01-15 10:57:05

标签: python file text

我的程序是一款带记分牌类型系统的基本Tkinter游戏。该系统存储用户名和每个用户在文本文件中的尝试次数。

例如,当它是用户的第一次时,它将其名称附加到文本文件的末尾,作为[joe_bloggs,1],其中joe_bloggs是用户名,1是尝试次数。作为用户的第一次,它是1。

我正在尝试寻找一种“更新”或更改数字“1”的方法,每次增加1。该文本文件以该格式存储所有用户,即[Joe,1] [example1,1] [example2,2]。

以下是我目前的代码:

write = ("[", username, attempts ,"]")

if (username not in filecontents): #Searches the file contents for the username    
    with open("test.txt", "a") as Attempts:    
        Attempts.write(write)
        print("written to file")  

else:
    print("already exists")
    #Here is where I want to have the mechanism to update the number. 

提前致谢。

2 个答案:

答案 0 :(得分:3)

一个简单的解决方案是使用标准库的shelve模块:

import shelve

scores = shelve.open('scores')
scores['joe_bloggs'] = 1
print(scores['joe_bloggs'])
scores['joe_bloggs'] += 1
print(scores['joe_bloggs'])
scores.close()

输出:

1
2

下一场会议:

scores = shelve.open('scores')
print(scores['joe_bloggs'])

输出:

2
  

“架子”是一个持久的,类似字典的对象。与“dbm”数据库的区别在于,架子中的值(而不是键!)可以是基本上任意的Python对象 - pickle模块可以处理的任何东西。这包括大多数类实例,递归数据类型和包含许多共享子对象的对象。键是普通的字符串。

您可以将整个内容转换为字典:

>>> dict(scores)
{'joe_bloggs': 2}

适应您的使用案例:

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 

如果您不想总是检查用户是否已经在那里,可以使用defaultdict。首先,创建文件:

from collections import defaultdict
import shelve

with shelve.open('scores', writeback=True) as scores:
    scores['scores'] = defaultdict(int)

稍后,您只需要写scores['scores'][user] += 1

username = 'joe_bloggs'

with shelve.open('scores', writeback=True) as scores:  
    scores['scores'][user] += 1

具有多个用户和增量的示例:

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])

输出:

joe_bloggs 1
joe_bloggs 2
joe_bloggs 3
user2 1
user2 2
user2 3

答案 1 :(得分:0)

您可以使用标准ConfigParser模块来保存简单的应用程序状态。