从字典创建.txt文件

2024-05-16 15:51:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个.txt文件:

ID - NAME - LASTNAME - USER - PASSWORD

0001 - Oliver - Jackson - olson - pass123

0002 - Samuel - Depp - samuel - pass321

然后,我从.txt文件创建了一个字典:

{'0001': ['Oliver', 'Jackson', 'olson', 'pass123'], '0002': ['Samuel', 'Depp', 'samuel', 'pass321']}

现在,如果有人想更改字典中的一个值,这很简单,但是我需要用这样的新值覆盖.txt文件,类似这样的内容(直到现在还不走运):

{'0001': ['Oliver', 'Jackson', 'newlog01', 'newpass01'], '0002': ['Samuel', 'Depp', 'samuel', 'pass321']}

0001 - Oliver - Jackson - newlog01 - newpass01

.

.

.

谢谢


Tags: 文件nametxtid字典samueljacksonolson
3条回答

一种快速的方法是创建一个序列化函数,给定一个特殊格式的字典,它将以自定义格式编码的字符串形式返回。然后把它写进原始文件,你就成了黄金。你知道吗

例如

import os

def encode(data):
    header = "ID - NAME - LASTNAME - USER - PASSWORD"
    lines = [' - '.join([key] + values) for (key, values) in data.iteritems()]
    return (os.linesep+os.linesep).join([header] + lines)

然后你可以用这样的方式重新写出来:

with open('data.txt','w') as f:
    f.write(encode(d) + os.linesep)

此解决方案适用于您当前的系统,但建议您不要以自己的自定义格式存储此数据。您只需使用内置的json库。你知道吗

import json

input = '{\"0001\": [\"Oliver\", \"Jackson\", \"newlog01\", \"newpass01\"], \"0002\": [\"Samuel\", \"Depp\", \"samuel\", \"pass321\"]}'

data = dict()

try:
    data = json.loads(input)
except ValueError as e:
    print e

print 'ID - NAME - LASTNAME - USER - PASSWORD'
for key in sorted(data.keys()):
    print ' - '.join([key] + data[key])

输出:

ID - NAME - LASTNAME - USER - PASSWORD
0001 - Oliver - Jackson - newlog01 - newpass01
0002 - Samuel - Depp - samuel - pass321

你必须用新内容替换整个文件

def read_file(filename):
    data = {}
    with open(filename, 'r') as fhd:
        for line in fhd:
            tokens = [token.strip() for token in line.split('-')]
            data[tokens[0]] = tokens[1:]
    return data


def write_file(filename, data):
    with open(filename, 'w') as fhd:
        for key in sorted(data.keys()):
            fhd.write('{} - {}\n'.format(key, ' - '.join(data[key])))

并将其用作:

if __name__ == '__main__':
    filename = 'test.dat'
    data = read_file(filename)
    data['0001'][1] = 'changed'
    write_file(filename, data)

这是没有办法的。磁盘中的数据是串行存储的。你知道吗

相关问题 更多 >