解析此数据的最佳Pythonic方法是什么?

我是Python的新手,正在尝试找到最Pythonic的方式来解析LDAP查询的响应。到目前为止,我的作品仍然有效,但如果可能的话,我想使其更整洁。我的回复数据是这样的:

"[[('CN=LName\\, FName,OU=MinorUserGroup,OU=MajorUserGroup,DC=my,DC=company,DC=com', {'department': ['theDepartment'], 'mail': ['[email protected]']})]]"

从这些数据中,我真的只对内的字段感兴趣,{}因此可以将其放入字典中。

"department:theDepartment,mail:[email protected]"

我现在正在做的事情感觉(看起来)确实很蛮力,但是行得通。我已经添加了额外的注释,并根据每个步骤在尝试详细说明此混乱的过程中输出了结果。

#Original String
#"[[('CN=LName\\, FName,OU=MinorUserGroup,OU=MajorUserGroup,DC=my,DC=company,DC=com', {'department': ['theDepartment'], 'mail': ['[email protected]']})]]"

#split at open {, take the latter half
myDetails = str(result_set[0]).split('{') 
#myDetails[1] = ["'department': ['theDepartment'], 'mail': ['[email protected]']})]]"]

#split at close }, take the former half
myDetails = str(myDetails[1]).split('}') 
#myDetails[0] = ["'department': ['theDepartment'], 'mail': ['[email protected]']"]

#split at comma to separate the two response fields
myDetails = str(myDetails[0]).split(',') 
#myDetails = ["'department': ['theDepartment']","'mail': ['[email protected]']"]

#clean up the first response field
myDetails[0] = str(myDetails[0]).translate(None, "'").translate(None," [").translate(None,"]") 
#myDetails[0] = ["department:theDepartment"]

#clean up the second response field
myDetails[1] = str(myDetails[1]).translate(None," '").translate(None, "'").translate(None,"[").translate(None,"]")
#myDetails[1] = ["mail:[email protected]"]

虽然我是“如果还没有破裂,请不要解决”的忠实拥护者,但我还是效率的忠实拥护者。

编辑这最终为我按照下面@Mario接受的答案为我工作

myUser = ast.literal_eval(str(result_set[0]))[0][1] 
myUserDict = { k: v[0] for k, v in myUser.iteritems() }
马里奥

信任您的输入并依靠其严格的规律性,这将解析您的示例数据并产生您所期望的结果:

import ast

ldapData = "[[('CN=LName\\, FName,OU=MinorUserGroup,OU=MajorUserGroup,DC=my,DC=company,DC=com', {'department': ['theDepartment'], 'mail': ['[email protected]']})]]"

# Using the ast module's function is much safer than using eval. (See below!)
obj = ast.literal_eval(ldapData)[0][0]
rawDict = obj[1]
data = { k: v[0] for k, v in rawDict.iteritems() }

# The dictionary.
print data

使用大括号的行称为dict理解。


编辑:此线程上的另一个用户建议使用该ast.literal_eval功能。经过研究,我必须同意。eval函数将执行任何字符串。如果输入是这样的,那么您将有一个大问题:

eval("__import__('os').system('rm -R *')") 

另一方面,如果使用ast函数解析了相同的字符串,则会出现异常:

>>> import ast
>>> ast.literal_eval("__import__('os').system('rm -R *')")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/ast.py", line 80, in literal_eval
    return _convert(node_or_string)
  File "/usr/lib64/python2.7/ast.py", line 79, in _convert
    raise ValueError('malformed string')
ValueError: malformed string
>>> 

进一步的讨论可以在这里找到:

http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html

该模块的文档在这里:

https://docs.python.org/2/library/ast.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

解析此数据的最佳Pythonic方法是什么?

来自分类Dev

硬编码此数据的最佳方法是什么。目标C

来自分类Dev

在C#中,解析此WIKI标记的最佳方法是什么?

来自分类Dev

解析短信的最佳方法是什么

来自分类Dev

Flutter - 解析 Json 的最佳方法是什么?

来自分类Dev

构造此模型/数据库关联的最佳方法是什么

来自分类Dev

对我而言,搜索此产品数据库的最佳方法是什么?

来自分类Dev

通过JSON / Web服务公开此数据的最佳方法是什么?

来自分类Dev

构造此模型/数据库关联的最佳方法是什么

来自分类Dev

标准化此数据库的最佳方法是什么?

来自分类Dev

汇总间隔数据的最佳方法是什么?

来自分类Dev

清理 POST 数据的最佳方法是什么?

来自分类Dev

解析不一致的数据时,“发现”标题行的最佳方法是什么?

来自分类Dev

在Django中保存此关系的最佳方法是什么?

来自分类Dev

显示此数组结果的最佳方法是什么

来自分类Dev

重写此重复if语句的最佳方法是什么?

来自分类Dev

处理此命名空间JavaScript结构的最佳方法是什么?

来自分类Dev

ModelMapper:解决此问题的最佳方法是什么

来自分类Dev

解决此glibc问题的最佳方法是什么?

来自分类Dev

使用parent :: find解决此错误的最佳方法是什么?

来自分类Dev

Python:组织此线程的最佳方法是什么?

来自分类Dev

解决此glibc问题的最佳方法是什么?

来自分类Dev

制作此Customlayout – IOS的最佳方法是什么?

来自分类Dev

在Rails中迭代此结构的最佳方法是什么?

来自分类Dev

使此SQL查询作为Elequent语句的最佳方法是什么

来自分类Dev

bash-改善此代码性能的最佳方法是什么

来自分类Dev

对我来说,启动此UML图的最佳方法是什么?

来自分类Dev

代码审查:解决此 Java 程序的最佳方法是什么?

来自分类Dev

使用SQLAchemy更新数据集的pythonic方法是什么?

Related 相关文章

  1. 1

    解析此数据的最佳Pythonic方法是什么?

  2. 2

    硬编码此数据的最佳方法是什么。目标C

  3. 3

    在C#中,解析此WIKI标记的最佳方法是什么?

  4. 4

    解析短信的最佳方法是什么

  5. 5

    Flutter - 解析 Json 的最佳方法是什么?

  6. 6

    构造此模型/数据库关联的最佳方法是什么

  7. 7

    对我而言,搜索此产品数据库的最佳方法是什么?

  8. 8

    通过JSON / Web服务公开此数据的最佳方法是什么?

  9. 9

    构造此模型/数据库关联的最佳方法是什么

  10. 10

    标准化此数据库的最佳方法是什么?

  11. 11

    汇总间隔数据的最佳方法是什么?

  12. 12

    清理 POST 数据的最佳方法是什么?

  13. 13

    解析不一致的数据时,“发现”标题行的最佳方法是什么?

  14. 14

    在Django中保存此关系的最佳方法是什么?

  15. 15

    显示此数组结果的最佳方法是什么

  16. 16

    重写此重复if语句的最佳方法是什么?

  17. 17

    处理此命名空间JavaScript结构的最佳方法是什么?

  18. 18

    ModelMapper:解决此问题的最佳方法是什么

  19. 19

    解决此glibc问题的最佳方法是什么?

  20. 20

    使用parent :: find解决此错误的最佳方法是什么?

  21. 21

    Python:组织此线程的最佳方法是什么?

  22. 22

    解决此glibc问题的最佳方法是什么?

  23. 23

    制作此Customlayout – IOS的最佳方法是什么?

  24. 24

    在Rails中迭代此结构的最佳方法是什么?

  25. 25

    使此SQL查询作为Elequent语句的最佳方法是什么

  26. 26

    bash-改善此代码性能的最佳方法是什么

  27. 27

    对我来说,启动此UML图的最佳方法是什么?

  28. 28

    代码审查:解决此 Java 程序的最佳方法是什么?

  29. 29

    使用SQLAchemy更新数据集的pythonic方法是什么?

热门标签

归档