我已经通过导入集合创建一个python有序字典,并将其存储在一个名为“FILENAME.TXT”文件。 文件内容看起来像
OrderedDict([(7, 0), (6, 1), (5, 2), (4, 3)])
我需要利用这个OrderedDict的其他程序。 我做得一样
myfile = open('filename.txt','r')
mydict = myfile.read()
我需要得到“mydict”作为类型
<class 'collections.OrderedDict'>
但在这里,它出来的类型为“STR”的。
有没有在Python任何方式将一个字符串类型OrderedDict类型转换? 使用Python 2.7
你可以存储,并与加载它泡菜
import cPickle as pickle
# store:
with open("filename.pickle", "w") as fp:
pickle.dump(ordered_dict, fp)
# read:
with open("filename.pickle") as fp:
ordered_dict = pickle.load(fp)
type(ordered_dict) # <class 'collections.OrderedDict'>
这里最好的解决方案是存储在不同的方式您的数据。 编码成JSON ,例如。
你也可以使用的pickle
模块在其他的答案解释,但这有潜在的安全问题(如解释eval()
下) -前提是您必须知道的是,数据总是要被信任使用此解决方案。
如果你不能改变数据的格式,然后还有其他的解决方案。
真正糟糕的解决方案是使用eval()
来做到这一点。 这是一个非常 非常糟糕的主意,因为它是不安全的,因为把文件中的任何代码都将运行,连同其他原因
更好的解决方案是手动解析文件。 有利的一面是,有你可以在这个欺骗和多一点很容易做到这一点的方式。 Python有ast.literal_eval()
它允许您轻松解析文字。 虽然,因为它使用OrderedDict这不是一个文字,我们可以提取列表文字和解析。
例如:(未经测试)
import re
import ast
import collections
with open(filename.txt) as file:
line = next(file)
values = re.search(r"OrderedDict\((.*)\)", line).group(1)
mydict = collections.OrderedDict(ast.literal_eval(values))
这不是一个很好的解决方案,但它的工作原理。 :)
#######################################
# String_To_OrderedDict
# Convert String to OrderedDict
# Example String
# txt = "OrderedDict([('width', '600'), ('height', '100'), ('left', '1250'), ('top', '980'), ('starttime', '4000'), ('stoptime', '8000'), ('startani', 'random'), ('zindex', '995'), ('type', 'text'), ('title', '#WXR#@TU@@Izmir@@brief_txt@'), ('backgroundcolor', 'N'), ('borderstyle', 'solid'), ('bordercolor', 'N'), ('fontsize', '35'), ('fontfamily', 'Ubuntu Mono'), ('textalign', 'right'), ('color', '#c99a16')])"
#######################################
def string_to_ordereddict(txt):
from collections import OrderedDict
import re
tempDict = OrderedDict()
od_start = "OrderedDict([";
od_end = '])';
first_index = txt.find(od_start)
last_index = txt.rfind(od_end)
new_txt = txt[first_index+len(od_start):last_index]
pattern = r"(\(\'\S+\'\,\ \'\S+\'\))"
all_variables = re.findall(pattern, new_txt)
for str_variable in all_variables:
data = str_variable.split("', '")
key = data[0].replace("('", "")
value = data[1].replace("')", "")
#print "key : %s" % (key)
#print "value : %s" % (value)
tempDict[key] = value
#print tempDict
#print tempDict['title']
return tempDict
以下是我做这件事是Python 2.7版
from collections import OrderedDict
from ast import literal_eval
# Read in string from text file
myfile = open('filename.txt','r')
file_str = myfile.read()
# Remove ordered dict syntax from string by indexing
file_str=file_str[13:]
file_str=file_str[:-2]
# convert string to list
file_list=literal_eval(file_str)
header=OrderedDict()
for entry in file_list:
# Extract key and value from each tuple
key, value=entry
# Create entry in OrderedDict
header[key]=value
再次,你应该写不同的文本文件。