簡體   English   中英

在python中從文本文件讀取字典結構

[英]Reading dictionary structure from text file in python

我在定義python字典的位置有文件:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First', 'Friends': {'Emil':1, 'Frank':0} };

我想讀這本字典,並在python代碼中使用它的元素。 我最終得到以下代碼:

#!/usr/bin/python

import sys
import os
import ast
import re
from pprint import pprint as pp

def readObjFromFile(file):
  with open (file, "r") as myfile:
    data=myfile.read()
  data = re.sub("^#.*", "", data)
  data = data.replace('\n', '')
  data = data.split("=", 1)[1].split(";", 1)[0].lstrip()
  data = ast.literal_eval(data)
  return data

if __name__ == "__main__":
  if len(sys.argv[1:]) == 1:
    dict = readObjFromFile(sys.argv[1])
    print type(dict)
    pp(dict)
  else:
    print "Pass file from which object will be read"
    exit

這個作品也為這個更大的字典。 我想問一下是否有更好的方法? 我知道pickle模塊,但這不是我想要的,因為它以自己的格式存儲數據。 由於與python dicts的相似性,我正在考慮用於解析json的模塊,但是我不知道這種方法是否安全。

我假設您無法控制文件格式,而是從某個地方將其交給您。 它與json非常接近,因此我打算將其設為json。 我會做如下的事情:

lines = []
with open(file) as f:
    for line in f:
        if line[0] == "#":
            continue
        l = line.strip().split("=")[-1].strip(";")
        lines.append(re.sub("'", "\"", l)
return json.loads("".join(lines))

您擁有的文件實際上代表了字典的人工解釋版本。 我們可以閱讀它,看看如何將一個變量分配給字典。 您真正想做的是將dict以程序友好的格式存儲。 JSON是此格式的完美使用。 其他格式包括XML和YAML,但是Python可以很容易地原生讀取JSON輸入。

如果仔細查看示例,您會發現示例數據集具有包含嵌套字典的字典。 JSON是針對此類用例而構建的。 因此,帶有您上面的數據的JSON文件將如下所示:

{
    "Name": "Zara", 
    "Age": 7, 
    "Class": "First", 
    "Friends": {
        "Emil":1, 
        "Frank":0
    } 
}

請注意,子詞典是JSON文件結構的一部分。 另請注意,使用雙引號。

現在,您可以輕松地讓python為您完成工作:

import json
from os import open
from pprint import pprint

data = open(filename).read()
d = json.loads(data)
pprint(d)

您可以使用以下命令訪問子模塊:

d['Friends]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM