如何使用python中的elementtree将节点的子节点组合到csv单元的一个单元中?

如何使用python中的elementtree将节点的子节点组合到csv单元的一个单元中?,python,xml,python-2.7,csv,elementtree,Python,Xml,Python 2.7,Csv,Elementtree,这是我第一次真正使用XML,我似乎不知所措。我在python中使用elementtree,可以解析不同的节点,甚至可以将它们转换成csv,但是我在处理的子节点(或子节点?)时遇到了问题,这就是 在查看elementtree的文档时: for content in root.iter('p'): print content.text 获取我想要的内容,即节点中的所有文本。但是,当我的代码写入csv文件时,会为每个文件创建一个新行。伟大的但是我希望每个都是它自己的行,并且每个行的一个单元格

这是我第一次真正使用XML,我似乎不知所措。我在python中使用elementtree,可以解析不同的节点,甚至可以将它们转换成csv,但是我在处理的子节点(或子节点?)时遇到了问题,这就是

在查看elementtree的文档时:

for content in root.iter('p'):
    print content.text
获取我想要的内容,即节点中的所有文本。但是,当我的代码写入csv文件时,会为每个文件创建一个新行。伟大的但是我希望每个都是它自己的行,并且每个行的一个单元格中包含来自其子元素的所有文本。我希望这是有道理的(我几乎把自己搞糊涂了……又一次)

以下是我的简单代码:

import xml.etree.ElementTree as ET
import csv

tree = ET.parse('the_example.xml')
root = tree.getroot()

with open('throw_it_all_in_this.csv', 'wb') as f:
    writer = csv.writer(f)   
    for content in root.iter('p'):
        print content.text
        writer.writerow([content.text])
下面是我正在使用的_example.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
 <example>
  <item>
   <source>some site</source>
   <subject>Lorem ipsum dolor sit amet.</subject>
   <subjectcode>EN</subjectcode>
   <text>
    <p>
      Nam urna tellus, dignissim eu dolor nec, elementum posuere magna. Integer euismod ipsum 
      in lorem scelerisque efficitur.
    </p>
      <p>
        &amp;lt;
        <p>
          In hac habitasse platea dictumst. Nam sed iaculis diam, eget viverra 
          dolor. Vestibulum rutrum dolor. 
        </p>
        &amp;gt;
      </p>
    <p>
      Maecenas nisi dolor, pulvinar et diam vel, lacinia fringilla tellus. Quisque 
      feugiat id est in molestie. Aliquam eleifend lectus sed ex aliquam egestas. 
      Integer euismod ipsum in lorem scelerisque efficitur.
    </p>
    <p>
      Duis lobortis rutrum turpis, sit amet iaculis nibh pulvinar at. Cras euismod 
      semper nibh, quis maximus nisi ultrices nec. Curabitur sed nisl molestie, ullamcorper 
      dui nec, vestibulum mi. Proin quis efficitur turpis, quis aliquam purus. Curabitur 
      id faucibus lacus, posuere ullamcorper eros.
    </p>
    <p>
      Nam ullamcorper accumsan magna, quis bibendum nibh. Mauris finibus iaculis est, nec 
      consequat leo ultricies a. Etiam id sagittis mi. Mauris quis justo suscipit, placerat 
      est vitae, aliquet nunc. Aenean tincidunt leo erat, id dictum mi iaculis nec. Class 
      aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. 
    </p>
   </text>
  </item>

某地
Lorem ipsum dolor sit amet。
EN

Nam urna tellus,欧盟多洛nec贵宾,大元素。整数euismod ipsum
在洛雷姆·斯克利斯库·埃菲西图尔。

&;书信电报; 在hac habitasse Plateum,一句名言。Nam sed iaculis diam,eget viverra 多洛。芸香前庭。

&;燃气轮机;

这是我的梦想,也是我的梦想。奎斯克 封建身份证是一种骚扰。阿利夸姆·埃利芬德·莱克图斯是阿利夸姆·埃吉斯塔斯。 lorem scelerisque efficitur中的整数euismod ipsum。

两个是芦苇,一个是艾米特·亚库利斯·尼布·普尔文纳。克拉斯·尤伊斯莫 这是我的最爱。乌拉姆科珀尼斯勒酒店 酒后驾车,前庭。这是一个很好的例子。库拉比图尔 我是faucibus lacus,posuere ullamcorper eros。

南乌拉姆科珀·阿库姆桑·马格纳,比本杜姆·尼布。毛里斯·菲尼布斯·亚库利斯东部,nec 利奥尤里西斯会议a。额叶矢状位心肌梗死。毛里斯·奎斯·胡斯托·苏西比特 我是阿利奎特·努克。这是我的一句名言。等级 每一个科努比亚·诺斯特拉,每一个希梅纳厄斯的接受者,都有一个敏捷的社会秩序。


迭代
文本
标记,并在
文本
标记内找到
p
标记。使用以下方法组合它们:


更新

根据OP公司的commnet,要处理
类型错误
UnicodeEncodeError
OP公司应使用以下方法:

writer.writerow(['\n'.join(p.text for p in content.iter('p')
                 if p.text is not None).encode('utf-8')])

这一直有效,直到我得到一个TypeError,其中找到了一个NoneType。你知道我该如何消除这个错误吗?我不得不添加一些更改来消除我得到的TypeError和UnicodeenCodeer错误,但这是使我达到目的的合法答案,谢谢falsetru。以下是我的编辑:writer.writerow(['\n'.join(如果p.text不是None,则p.text代表content.iter('p')))@Silas,感谢您的反馈。我相应地更新了答案。
writer.writerow(['\n'.join(p.text for p in content.iter('p')
                 if p.text is not None).encode('utf-8')])