如何将文本文件内容转储到字典中
How do I dump text file contents into dictionary
您好,我在 mac 上使用 python 3,我正在尝试创建一个通用程序来根据加载的文本文件与一系列不同的万用表进行通信。例如,我想要一本看起来像这样的字典:
prog_key = {"DC_Volts":"FUNC:DC V","AC_Volts":"FUNC:AC V"...} #just an example
这最终将与 pyvisa 库结合使用,以便向仪表发送命令。
所以,为了使我的程序通用,我想要这本字典:
prog_key = {}
加载包含以下内容的文本文件:
"DC_Volt”:”FUNC:VOLT DC”,
"DC_Curr”:”FUNC:CURR DC”,
"AC_Volt”:”FUNC:VOLT AC”,
"AC_Curr”:”FUNC:CURR AC”,
"Res_2”:”FUNC:RES”,
"Res_4”:”FUNC:RES 4”,
"Freq”:”FUNC:FREQ”,
"Cap”:”FUNC:CAP”,
"Temp”:”FUNC:TEMP”,
"Diode”:”FUNC:DIO”,
“Meas”:”MEAS:IMM”
因为我会在文本文件中准备好它的格式,所以我真的只是想将它转储到字典中(所有引号、冒号和逗号都将就位)。我这样做是因为不同的仪表会有不同的命令,所以如果我使用不同的仪表,我可以加载不同的文本文件。
我的命令有冒号会导致任何问题吗?
如果有更好的方法,我不介意重新格式化我的文本文件。最主要的是,我制作的所有文本文件都遵循相同的趋势,只要它有效,那个趋势是什么并不重要!
谢谢
编辑:这些确实是直引号
我认为格式化文件(避免处理逗号分隔符和冒号字段分隔符)的更好方法可能是 CSV。例如,
"DC_Volt","FUNC:VOLT DC"
"DC_Curr","FUNC:CURR DC"
"AC_Volt","FUNC:VOLT AC"
这将允许您按如下方式读入字典:
import csv
my_dict = {}
with open('myfile.csv', 'r') as f:
for line in csv.reader(f):
my_dict[line[0]] = line[1]
编辑:就像@ShadowRanger 建议的那样,这对于 JSON 可能比 CSV 更好。 (这将允许您保留键值格式)。
文件可能如下所示:
{
"DC_Volt":"FUNC:VOLT DC",
"DC_Curr":"FUNC:CURR DC",
"AC_Volt":"FUNC:VOLT AC"
}
你的代码可以是:
import json
with open('myfile.json', 'r') as f:
j = json.load(f)
好吧,无需更改现有文件,因为您的键和值都是合法的 str
文字(假设那些智能引号是错误的),您可以让 Python 使用ast.literal_eval
or json.loads
:
import ast
import json
with open(myfilename) as f:
dict_literal_str = '{{ {} }}'.format(f.read())
# With ast
prog_key = ast.literal_eval(dict_literal_str)
# or json
prog_key = json.loads(dict_literal_str)
这假设文件中的所有引号都是真实的 "
而不是那些其他类型的引号。它所做的是读取文件,匹配正则表达式并填充字典。
import re
dictionary = {}
file = open(FILE_NAME, "r")
for line in file:
catched = re.findall("\"(.*)\":\"(.*)\"", line)
# Only one result which is a tuple
dictionary[catched[0][0]] = catched[0][1]
file.close()
您好,我在 mac 上使用 python 3,我正在尝试创建一个通用程序来根据加载的文本文件与一系列不同的万用表进行通信。例如,我想要一本看起来像这样的字典:
prog_key = {"DC_Volts":"FUNC:DC V","AC_Volts":"FUNC:AC V"...} #just an example
这最终将与 pyvisa 库结合使用,以便向仪表发送命令。
所以,为了使我的程序通用,我想要这本字典:
prog_key = {}
加载包含以下内容的文本文件:
"DC_Volt”:”FUNC:VOLT DC”,
"DC_Curr”:”FUNC:CURR DC”,
"AC_Volt”:”FUNC:VOLT AC”,
"AC_Curr”:”FUNC:CURR AC”,
"Res_2”:”FUNC:RES”,
"Res_4”:”FUNC:RES 4”,
"Freq”:”FUNC:FREQ”,
"Cap”:”FUNC:CAP”,
"Temp”:”FUNC:TEMP”,
"Diode”:”FUNC:DIO”,
“Meas”:”MEAS:IMM”
因为我会在文本文件中准备好它的格式,所以我真的只是想将它转储到字典中(所有引号、冒号和逗号都将就位)。我这样做是因为不同的仪表会有不同的命令,所以如果我使用不同的仪表,我可以加载不同的文本文件。
我的命令有冒号会导致任何问题吗?
如果有更好的方法,我不介意重新格式化我的文本文件。最主要的是,我制作的所有文本文件都遵循相同的趋势,只要它有效,那个趋势是什么并不重要!
谢谢
编辑:这些确实是直引号
我认为格式化文件(避免处理逗号分隔符和冒号字段分隔符)的更好方法可能是 CSV。例如,
"DC_Volt","FUNC:VOLT DC"
"DC_Curr","FUNC:CURR DC"
"AC_Volt","FUNC:VOLT AC"
这将允许您按如下方式读入字典:
import csv
my_dict = {}
with open('myfile.csv', 'r') as f:
for line in csv.reader(f):
my_dict[line[0]] = line[1]
编辑:就像@ShadowRanger 建议的那样,这对于 JSON 可能比 CSV 更好。 (这将允许您保留键值格式)。
文件可能如下所示:
{
"DC_Volt":"FUNC:VOLT DC",
"DC_Curr":"FUNC:CURR DC",
"AC_Volt":"FUNC:VOLT AC"
}
你的代码可以是:
import json
with open('myfile.json', 'r') as f:
j = json.load(f)
好吧,无需更改现有文件,因为您的键和值都是合法的 str
文字(假设那些智能引号是错误的),您可以让 Python 使用ast.literal_eval
or json.loads
:
import ast
import json
with open(myfilename) as f:
dict_literal_str = '{{ {} }}'.format(f.read())
# With ast
prog_key = ast.literal_eval(dict_literal_str)
# or json
prog_key = json.loads(dict_literal_str)
这假设文件中的所有引号都是真实的 "
而不是那些其他类型的引号。它所做的是读取文件,匹配正则表达式并填充字典。
import re
dictionary = {}
file = open(FILE_NAME, "r")
for line in file:
catched = re.findall("\"(.*)\":\"(.*)\"", line)
# Only one result which is a tuple
dictionary[catched[0][0]] = catched[0][1]
file.close()