Python作业文件i/o读取文件并转换成字典

2024-06-02 06:49:17 发布

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

我需要创建一个不带参数的函数,并读回以前保存的文件中的字典。我必须先确定文件是否存在。如果有,我必须阅读文件的内容并将其作为字典返回。如果不是,返回[]

我对Python还是个新手,看了几个小时我都快没脑子了。任何帮助都将不胜感激!

例如:

dave 12
brad 18
stacy 8

这将被读作{'dave': 12, 'brad': 18, 'stacy': 8}

到目前为止,我有这个:

^{pr2}$

Tags: 文件函数内容参数字典小时新手dave
2条回答

这样可以做到:

import os.path

def readit():
    filename = 'save.txt'
    if not os.path.isfile(filename):
        return {}
    with open(filename) as ifh:
        return dict(line.split() for line in ifh)

这首先测试文件是否存在;如果不存在,则返回一个空字典。在

如果名称之间有空格,请使用.rsplit(None, 1);这将仅在行内的最后一个空白处拆分:

^{pr2}$

会变成:

Martijn Pieters 42
user3014014 38

进入

{'Martijn Pieters': '42', 'user3014014': '38'}

注意这里的with语句。这将file对象用作上下文管理器,这意味着一旦块退出(使用return,因为异常或仅仅因为块结束),那么文件就会自动为您关闭。另一方面,您的file1.close()行永远不会被执行,因为它被放在return语句之后。在

当然,上面给出了值的字符串。让我们展开它来生成整数值:

def readit():
    filename = 'save.txt'
    if not os.path.isfile(filename):
        return {}
    with open('save.txt') as ifh:
        return {key: int(value) for line in ifh for key, value in (line.rsplit(None, 1),)}

这会产生:

{'Martijn Pieters': 42, 'user3014014': 38}

对于我的示例输入。在

def readit():
  data = dict(x.split for x in open("save.txt"))
  return data

这应该能帮你搞定它!在

相关问题 更多 >