![](/img/trans.png)
[英]How do I write lines to a text file easily if I have a dictionary with the key of the line and contents being the text?
[英]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”
由于我将其格式化为文本文件中的格式,因此我只是想将其转储到字典中(所有引号,冒号和逗号都将保留在位置)。 我这样做是因为不同的仪表会有不同的命令,所以如果我使用的是不同的仪表,则可以加载不同的文本文件。
我的命令带有冒号会导致任何问题吗?
如果有更好的方法,我不介意重新格式化我的文本文件。 最主要的是,我使所有文本文件都遵循相同的趋势,只要有效,该trent到底什么都没有关系!
谢谢
编辑:这些确实是直接引号
我认为,格式化文件(避免使用逗号分隔符和冒号分隔符)的一种更好的方法是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
或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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.