【问题标题】:Problems with python 3.4 and xmltodictpython 3.4 和 xmltodict 的问题
【发布时间】:2016-05-02 11:35:27
【问题描述】:

我有这个 python 脚本:

import xmltodict
with open('file.xml') as fd:
    doc = xmltodict.parse(fd.read())

    print("Name=" + doc['Data']['form'][0]['@Name'])
    print("Time=" + doc['Data']['form'][0]['Period']['@Time'])
    print("\tM-1\tM-2\tM-3\tM-4")
    load_m1 = doc['Data']['form'][0]['Value'][0]['val'][0]['#text']
    load_m2 = doc['Data']['form'][0]['Value'][1]['val'][0]['#text']
    load_m3 = doc['Data']['form'][0]['Value'][2]['val'][0]['#text']
    load_m4 = doc['Data']['form'][0]['Value'][3]['val'][0]['#text']

    memory_m1 = doc['Data']['form'][0]['Value'][0]['val'][1]['#text']
    memory_m2 = doc['Data']['form'][0]['Value'][1]['val'][1]['#text']
    memory_m3 = doc['Data']['form'][0]['Value'][2]['val'][1]['#text']
    memory_m4 = doc['Data']['form'][0]['Value'][3]['val'][1]['#text']

    cpu_m1 = doc['Data']['form'][0]['Value'][0]['val'][2]['#text']
    cpu_m2 = doc['Data']['form'][0]['Value'][1]['val'][2]['#text']
    cpu_m3 = doc['Data']['form'][0]['Value'][2]['val'][2]['#text']
    cpu_m4 = doc['Data']['form'][0]['Value'][3]['val'][2]['#text']

    task_m1 = doc['Data']['form'][0]['Value'][0]['val'][3]['#text']
    task_m2 = doc['Data']['form'][0]['Value'][1]['val'][3]['#text']
    task_m3 = doc['Data']['form'][0]['Value'][2]['val'][3]['#text']
    task_m4 = doc['Data']['form'][0]['Value'][3]['val'][3]['#text']

    print("Load\t" + load_m1 + "\t" + load_m2 + "\t" + load_m3 + "\t"+ load_m4)
    print("Memory\t" + memory_m1 + "\t" + memory_m2 + "\t" + memory_m3 + "\t" + memory_m4)
    print("CPU\t" + cpu_m1 + "\t" + cpu_m2 + "\t" + cpu_m3 + "\t" + cpu_m4)
    print("Task\t" + task_m1 + "\t" + task_m2 + "\t" + task_m3 + "\t" + task_m4 )

如果我从 python3 控制台逐行运行它没有问题,但如果我将它保存在一个文件中并运行它

$ python3 script.py

它返回此错误:

Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/xmltodict.py", line 5, in <module>
    import defusedexpat as expat
ImportError: No module named 'defusedexpat'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "xml.py", line 1, in <module>
    import xmltodict
  File "/usr/lib/python3.4/site-packages/xmltodict.py", line 7, in <module>
    from xml.parsers import expat
  File "/home/script.py", line 3, in <module>
    doc = xmltodict.parse(fd.read())
AttributeError: 'module' object has no attribute 'parse'

如果以后我想从控制台逐行再次运行它,就会发生这种情况:

Python 3.4.3 (default, May  5 2015, 17:58:45)
[GCC 4.9.2] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import xmltodict
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/xmltodict.py", line 5, in <module>
    import defusedexpat as expat
ImportError: No module named 'defusedexpat'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/site-packages/xmltodict.py", line 7, in <module>
    from xml.parsers import expat
  File "/home/xml.py", line 3, in <module>
    doc = xmltodict.parse(fd.read())
AttributeError: 'module' object has no attribute 'parse'
>>>

我在 Ubuntu 和 cygwin 上对此进行了测试。 我是这样安装的:cygwin下的'pip3 install xmltodict'和Ubuntu下的这种方式:'sudo apt-get install python3-xmltodict'

【问题讨论】:

  • 确保$: python3和你在控制台上使用的版本一致。似乎他们不知何故不使用相同的包......
  • 你为什么在 Ubuntu 上使用 cygwin? cygwin 用于在 Windows 上做 Unixy 的事情。
  • @LennartKloppenburg 我明白了,这是脚本的名称。 “xml.py”我多么愚蠢!现在我知道我也不能为脚本命名。

标签: python python-3.x xmltodict


【解决方案1】:

尝试使用以下命令卸载xmltodict 包:

sudo pip uninstall xmltodict

sudo pip3 uninstall xmltodict

并使用以下命令重新安装。

sudo pip3 install xmltodict

【讨论】:

    猜你喜欢
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 2023-03-16
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多