【问题标题】:How to convert text file into dict?如何将文本文件转换为dict?
【发布时间】:2022-01-13 17:28:34
【问题描述】:

我只使用过键值对,其中 {a:"b", d:"c"} 只有 2 个值。如果我有一个类似这样的文件

{
  "personalInformationDeltaEmployee": {
    "employeeID": "0",
    "actualSSN": null
  },
  "appointmentDeltaEmployee": {
    "cyberSecurityCode3": "0",
    "POID": "0"
  }
}

我们假设这个文件是一个txt文件。我如何将这样的东西转换成字典?

这是我尝试过的:

try:
    with open(filename) as f:
        line_dict = {}
        for part in filename:
            key, value = part.split(":")
            line_dict[key] = value
except Exception as e:
    print e

我需要超过 1 个值才能解压。我猜它对额外的支架很生气,对吧?解决此问题的最佳方法是什么?我可以考虑哪些选择?

【问题讨论】:

  • 除非遵循某种格式,否则您无法解析某些内容。您显示的数据是 JSON,因此您只需要 json.load(open("filename"))。在您的代码中,for part in filename: 肯定不是您想要的 - 部分只是文件名的字母。一般来说,最好了解您尝试解析的内容的格式并尽可能使用现有的解析器。
  • 如果我使用 json.load 我最终会得到带有“u”字符的字符串,并且顺序看起来与原始文件不同。是这里使用 for 循环摆脱任何适合 (u') 的最佳解决方案
  • 您需要使用 2.x 吗?它被贬低了很长时间。这些是 unicode 字符(在 python 3 中,str 是 unicode 并且 unicode 已被弃用)并且与常规字符串的工作方式大致相同。
  • 不幸的是,它必须在 Python 2.7 中,但感谢您的澄清
  • u"employeeID" 这样的unicode 字符串前面并没有真正的“u”。它的 python 告诉你它的 unicode 的方式。它可能在您的应用程序中工作得很好。如果没有,您可以使用 json 解析,然后查看结果并通过解码将所有内容转换为 str

标签: python python-2.7


【解决方案1】:

由于数据是 JSON 格式,您可以使用 json 模块将其解析为 Python 字典。在 Python 2 中,字符串不是 Unicode,因此您还需要将输入中的所有 Unicode 字符串转换为该格式。

以下是使用辅助函数的方法。请注意,结果中的项目顺序可能与输入不同,因为在 Python 2 中,字典不保留插入顺序。

import json
from pprint import pprint
import sys

if sys.version_info[0] > 2:
    raise RuntimeError('Requires Python 2')

def unicode_convert(obj):
    """ Convert unicode data to string in object and return it. """

    if isinstance(obj, unicode):
        obj = obj.encode()
    elif isinstance(obj, list):
        obj = map(unicode_convert, obj)
    elif isinstance(obj, dict):  # Converts contents in-place.
        for key, value in obj.items():  # Copy of dict's (key, value) pairs (Py2)
            del obj[key]
            if isinstance(key, unicode):
                key = key.encode()
            if isinstance(value, (unicode, list, dict)):
                value = unicode_convert(value)
            obj[key] = value

    return obj


with open('personal_info.json') as file:
    info = json.load(file)  # Parse JSON object into Python dictionary.
    line_dict = {key: value for key, value in unicode_convert(info).items()}

pprint(line_dict)

【讨论】:

  • 谢谢,这让我省了很多麻烦。请问一下“编解码器”是干什么用的?
  • 哎呀,抱歉,只是我尝试的东西的剩余部分。
猜你喜欢
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 2021-11-30
  • 2018-09-07
  • 2021-05-03
  • 2012-06-22
相关资源
最近更新 更多