如何将文本文件内容转储到字典中

时间:2016-03-21 19:15:54

标签: python dictionary text io visa

您好我在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”

由于我将在文本文件中准备好格式化,因此我只想将其转储到字典中(所有引号,冒号和逗号都将到位)。我这样做是因为不同的仪表会有不同的命令,所以如果我使用不同的仪表,我可以加载不同的文本文件。

我的命令有冒号会导致任何问题吗?

如果有更好的方法,我不介意重新格式化我的文本文件。最重要的是,我将所有文本文件都按照相同的趋势制作,只要它有效,这并不重要!

由于

编辑:这些确实是直接引用

3 个答案:

答案 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_evaljson.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()