您好我在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”
由于我将在文本文件中准备好格式化,因此我只想将其转储到字典中(所有引号,冒号和逗号都将到位)。我这样做是因为不同的仪表会有不同的命令,所以如果我使用不同的仪表,我可以加载不同的文本文件。
我的命令有冒号会导致任何问题吗?
如果有更好的方法,我不介意重新格式化我的文本文件。最重要的是,我将所有文本文件都按照相同的趋势制作,只要它有效,这并不重要!
由于
编辑:这些确实是直接引用
答案 0 :(得分:1)
我认为格式化文件(避免处理逗号行分隔符和冒号字段分隔符)的更好方法是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)
答案 1 :(得分:1)
好吧,在不更改现有文件的情况下,由于您的键和值都是合法str
文字(假设这些智能引号是错误的),您可以让Python使用ast.literal_eval
或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)
答案 2 :(得分:-1)
这假设文件中的所有引号都是实际"
而不是其他类型的引号。这样做是读取文件,匹配正则表达式并填充字典。
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()