【问题标题】:Is there a high-level way to read in lines from an output file and have the types recognized by the structure of the contents?是否有一种高级方法可以从输出文件中读取行并让内容结构识别类型?
【发布时间】:2010-10-28 09:00:27
【问题描述】:

假设我有一个想要读取的输出文件,并且每一行都是通过将几种类型连接在一起创建的,在列表大括号的前面和后面添加,

[('tupleValueA','tupleValueB'), 'someString', ('anotherTupleA','anotherTupleB')]

我想读入这些行。现在我可以读入它们,并对字符串进行操作以分配值和类型,但我想知道 Python 是否有更高级别的方法。

在构建了一个函数来执行此操作后,我试图找到一种更高级别的方法,但没有找到。

【问题讨论】:

    标签: python string tuples


    【解决方案1】:

    您正在寻找的是eval。但请记住,此函数将评估并执行这些行。所以永远不要在不受信任的输入上运行它!

    >>> print eval("[('tupleValueA', 1), 'someString']")
    [('tupleValueA', 1), 'someString']
    

    如果您可以控制生成输出文件的脚本,那么我建议您使用json 编码。 JSON 格式与列表和字典的 Python 字符串表示非常相似。并且读取起来更加安全和健壮。

    >>> import json
    >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
    '["foo", {"bar": ["baz", null, 1.0, 2]}]'
    >>> json.loads('["foo", {"bar": ["baz", null, 1.0, 2]}]')
    ["foo", {"bar": ["baz", null, 1.0, 2]}]
    

    【讨论】:

    • 非常感谢,为什么我找不到这个。
    【解决方案2】:

    您描述的问题通常称为serializationJavaScript Object Notation (JSON) 是一种流行的序列化协议。

    【讨论】:

      【解决方案3】:

      首先使用pickle 之类的模块存储数据可能会更好,而不是使用普通字符串。这样可以避免eval 带来的许多问题,并获得更强大的解决方案。

      【讨论】:

      • 酸洗不起作用。看我昨天的问题。该列表长 800 万行,腌制后有 379,000 个键。即使我将文件分成三部分并根据需要阅读它们,它也会带来太多的负担。我不想去数据库,因为键是唯一标识符,表列是日期(大约 3600)。不过谢谢
      猜你喜欢
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 2019-10-23
      • 1970-01-01
      相关资源
      最近更新 更多