将dict写入文件,每个键/值对在一个单独的行上

时间:2015-12-03 15:22:55

标签: python file python-3.x dictionary

我目前正在使用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)

它工作正常,但由于它的编写方式,它总是占用一行。我想尝试在字典中自己编写每个键/值对,但我完全不知道如何实现这一点。

我该怎么办?

2 个答案:

答案 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)