繁体   English   中英

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

[英]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_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)

假定文件中的所有引号都是实际的"而不是其他类型的引号。这是读取文件,将正则表达式与之匹配,然后填充字典。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM