我目前正在使用Python编写帐户注册程序。该程序使用一个名为players
的文件,其中写有一个字典,其中的密钥对应于播放器的用户名,其他信息(电子邮件,密码,年龄和性别)作为与相应密钥关联的数组。
accounts
字典的定义方式取决于players
文件是否存在且为空。
def is_file_empty(filename):
return os.stat(filename).st_size == 0
def create_file(filename, mode = 'w'):
f = open(filename, mode)
f.close()
if os.path.exists('players'):
with open('players', 'r') as f:
if is_file_empty('players'):
accounts = {}
else:
accounts = ast.literal_eval(f.read())
else:
create_file('players')
accounts = {}
然后使用Player
类中的函数将其写入文件。
def write(self):
accounts[self.name] = [self.email, self.password, self.age, self.gender]
with open('players', 'w') as f:
f.write(accounts)
它工作正常,但由于它的编写方式,它总是占用一行。我想尝试在字典中自己编写每个键/值对,但我完全不知道如何实现这一点。
我该怎么办?
答案 0 :(得分:4)
如果我建议采用不同的方法:使用现有的简单序列化方案,如JSON或YAML,而不是手动滚动自己的方法:
import json
try:
with open('players.json', 'r') as file:
accounts = json.load(file)
except (OSError, ValueError): # file does not exist or is empty/invalid
accounts = {}
# do something with accounts
with open('players.json', 'w') as file:
json.dump(accounts, file, indent=2)
答案 1 :(得分:0)
您可以迭代字典中的项目并分别编写每一行,如下所示:
def write(self):
accounts[self.name] = [self.email, self.password, self.age, self.gender]
with open('players', 'w') as f:
for key, value in accounts.items():
f.write('{0}, {1}\n'.format(key, value)