我有一个正在玩的文件,以查看是否可以导入并将其转换为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中使用vim
或sed
来做到这一点,但是我试图保留在Python中。
请帮助。谢谢!
答案 0 :(得分:2)
答案 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'}