在Python 3中将文件作为dict()导入

时间:2018-08-16 07:13:18

标签: python dictionary

我有一个正在玩的文件,以查看是否可以导入并将其转换为Python字典。

这是pyenv.cfg中的默认venv文件。内容为:

home = C:\Users\nope\AppData\Local\Continuum\anaconda3
include-system-site-packages = false
version = 3.6.4

我尝试使用:

with open(file, mode='r', encoding='utf-8') as f:
    new_f = f.read().replace('=', ':')
    d = dict(new_f)

这告诉我我的dict()没有足够的参数。预期为2。我熟悉使用dict(zip(list_1, list_2))创建字典。我对打开文件并创建文件不熟悉。

我正在寻找一种非常简单的方法来做到这一点。我对re做了一些研究,但结果没有。使用with块,我运行了a = f.read().replace(' = ', '\',\''),返回了:

home','C:\Users\nope\AppData\Local\Continuum\anaconda3
include-system-site-packages','false
version','3.6.4

现在,我需要在每行的开头和结尾添加一个'。然后,我想我可以使用f.readlines()创建一个列表,可以将其切成键和值。我知道如何在Linux中使用vimsed来做到这一点,但是我试图保留在Python中。

请帮助。谢谢!

3 个答案:

答案 0 :(得分:2)

我建议您看一下内置的configparser库,该库将返回类似于对象的字典。

或者,您可以简单地在C:\ProgramData\Datadog上分割行

=

答案 1 :(得分:1)

我可以建议您使用dict理解的另一种单行样式解决方案:

with open('pyenv.cfg') as f:
    d = {k:v for line in f for k,v in [line.strip().split(' = ')]}

print(d)
# {'home': 'C:\\Users\\nope\\AppData\\Local\\Continuum\\anaconda3',
#  'include-system-site-packages': 'false',
#  'version': '3.6.4'}

答案 2 :(得分:0)

只需将其视为普通数据,不要尝试将其转换为python,否则您最终将走上可怕的eval之路。

d = {}
file = 'pyenv.cfg'

with open(file) as f:
    for line in f:
        k, v = line.rstrip().split(' = ')
        d[k] = v

import pprint
pprint.pprint(d)

礼物:

{'home': 'C:\\Users\\nope\\AppData\\Local\\Continuum\\anaconda3',
 'include-system-site-packages': 'false',
 'version': '3.6.4'}