Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Unicode到字典(Unicode包含撇号标点)_Python_Dictionary_Converter_Unicode String - Fatal编程技术网

Python Unicode到字典(Unicode包含撇号标点)

Python Unicode到字典(Unicode包含撇号标点),python,dictionary,converter,unicode-string,Python,Dictionary,Converter,Unicode String,我已从CSV文件中读取以下Unicode: line = u"{u'There's Still Time': u'foo'}" 我希望能够将其转换为字典,以便我能够访问它,如下所示: line["There's Still Time"] Output: 'foo' 请提供帮助。鉴于字符串中有撇号,您必须在尝试将其解析为dict之前进行一些预处理。假设目标dict中的所有字符串都是unicode,并且结束字符串后面必须紧跟一个控制字符,即}、:,}、空格。。。您可以搜索与这两个类别不匹配的所

我已从CSV文件中读取以下Unicode:

line = u"{u'There's Still Time': u'foo'}"
我希望能够将其转换为字典,以便我能够访问它,如下所示:

line["There's Still Time"] 
Output: 'foo'

请提供帮助。

鉴于字符串中有撇号,您必须在尝试将其解析为dict之前进行一些预处理。假设目标dict中的所有字符串都是unicode,并且结束字符串后面必须紧跟一个控制字符,即}、:,}、空格。。。您可以搜索与这两个类别不匹配的所有撇号并将其转义。然后您可以使用将其解析为dict,类似于:

import ast
import re

APOSTROPHE_ESCAPE = re.compile(r"(?<!u)'(?![.}:,\s])")

line = u"{u'There's Still Time': u'foo'}"
your_dict = ast.literal_eval(APOSTROPHE_ESCAPE.sub(r"\'", line))

print(your_dict)  # {u"There's Still Time": u'foo'}

当然,它在源代码中也是非法的字典,但请记住这些限制,并相应地调整预处理正则表达式。

您使用的是Python 2还是Python 3?Python 3默认支持Unicode,如果可能的话应该使用它。@RobRose这根本不是问题所在。问题是OP将dict对象的字符串表示形式转储到csv文件中,现在必须对其进行反序列化。真正的解决方案是从一开始就使用适当的序列化格式。如果不可能,他们可以使用链接重复目标中的一种方法。你真的应该选择更好的序列化格式。不要将对象的字符串表示形式转储到文件中并称之为序列化。撇号使其语法无效,您将无法找到解决方案。理解该文本的唯一方法是制定一条规则,即必须忽略错误位置的撇号。这是一个非常定制的要求。这个CSV文件是如何创建的?如果没有启发式,它就无法被解析,而启发式对于编写和测试来说是非常重要的,在某些情况下可能是错误的,从而产生垃圾。如果CSV文件来自您编写的代码,或同事编写的代码,或您付费或与之合作的公司编写的代码,请修复该代码并生成正确的CSV文件。这将比提出并实施尝试修复损坏数据的启发式方法更容易、更好。
line = u"{u'There'}s Still Time': u'foo'}"