使用Python将JSON从文件加载到dict的方法?

时间:2018-03-08 05:51:30

标签: python json

使用Python我从文本文件加载JSON并将其转换为字典。我想到了两种方法,想知道哪种更好。

最初我打开文本文件,加载JSON,然后关闭文本文件。

import json

// Open file. Load as JSON.
data_file = open(file="fighter_data.txt", mode="r")
fighter_match_data = json.load(data_file)
data_file.close()

我可以改为执行以下操作吗?

import json

// Open file. Load as JSON.
fighter_match_data = json.load(open(file="fighter_data.txt", mode="r"))

我还需要关闭文件吗?如果是这样,怎么样?如果没有,Python会自动关闭文件吗?

2 个答案:

答案 0 :(得分:2)

个人也不会这样做。打开文件的最佳做法通常是使用with

with open(file="fighter_data.txt", mode="r") as data_file:
    fighter_match_data = json.load(data_file)

这样当你离开with语句时它会自动关闭。它比第一个短,如果它抛出一个错误(比如解析json时出错),它仍会关闭它。

关于您的实际问题,需要关闭单行内容中的文件。

根据我对文件处理和垃圾收集的理解,如果您正在使用CPython,由于该文件不再被引用,它应该被垃圾收集器直接关闭。但是,依靠垃圾收集来为您完成工作绝不是编写代码的最好方法。 (有关原因的信息,请参阅open read and close a file in 1 line of code的答案。)

答案 1 :(得分:0)

您的代码有效:

fighter_match_data = json.load(open(file="fighter_data.txt", mode="r"))

考虑这一部分:

open(file="fighter_data.txt", mode="r") .  #1

V / S

data_file  = open(file="fighter_data.txt", mode="r") .  #2

如果是#2,如果您没有明确关闭文件,当变量不再存在时,文件将自动关闭[更好的说法,该变量不存在引用](当您移动时)超出功能)。

对于#1,由于您从未创建变量,因此为打开该文件而创建的隐式变量的生命周期不再存在于该行本身。并且python在打开文件后自动关闭文件。