【问题标题】:File i/o into a dictionary?将 i/o 归档到字典中?
【发布时间】:2017-10-03 04:09:51
【问题描述】:

这是我用 Python 编写的第一个函数,所以我敢肯定有很多不正确的地方。我正在尝试以 Author,Title 格式将作者的文件名及其书名读入格式字典:

{0: [" The Hitchhiker's Guide To The Galaxy", 'Douglas Adams' ] }

随着每行向下读取,键递增。这是我无法跑步的最佳尝试。你有什么建议吗?我只是返回第 0 个值来检查函数是否正常工作。

def read_books(file_name):
    data={}
    try:
        with open(file_name, "r") as fh:
            for line in fh:
                try:
                    (auth, title) = line.split('','')
                    for i in lines:
                        data[i]=[title.strip(), auth.strip()]
                except:
                    continue

        return data[0]

    except:
        return -1

print(read_books(books.txt))

【问题讨论】:

  • 您的代码缩进严重(至少在 SO 上),因此在当前状态下,帮助您将非常困难。
  • 您能解释一下如何更好吗?
  • 您不应该使用像这样的纯except 子句,因为它们会捕获所有 异常,即使是您可能需要查看的异常,例如SyntaxError。改为具体——或者至少在调试时将其排除在外。

标签: python dictionary io


【解决方案1】:

你实际上是在正确的轨道上。您还可以使用enumerate() 在遍历文件时获取当前索引/行号。

这是循环的更新版本:

def read_books(file_name):
    data = {}
    with open(file_name, "r") as f:
        for line_number, line in enumerate(f):
            try:
                auth, title = line.split(",")
                data[line_number] = [title.strip(), auth.strip()]
            except ValueError:
                continue
    return data

【讨论】:

  • try/except 糟透了。特别是在这里它没有理由被抓住。
  • 实际上并非如此,尤其是在这种情况下,因为.split() 可能会在分隔行错误或文件中有空行的情况下抛出ValueError
  • 哦,真的。在这种情况下,我更喜欢在开箱前测试物品的数量。或者更具体地说明异常。
  • @Scotchnowplease btw 而不是在文件不存在的情况下返回 -1,您可以返回 None,这在 Python 中更常见,不像 C。
  • @Scotchnowplease 我跳过了外部try/except,因为我发现在文件不存在的情况下引发错误更有意义。但正如我上面所说,如果你愿意,你可以返回 None 而不是 -1。如果找到并读取文件,它将返回data
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
相关资源
最近更新 更多