【问题标题】:How to stop reading lines from a XML file when a certain string is reached using python language当使用python语言到达某个字符串时如何停止从XML文件中读取行
【发布时间】:2018-04-18 15:59:07
【问题描述】:

我目前正在处理从 XML 输入文件创建摘要的代码。但是,摘要会选择文件末尾的不相关信息。例如,我想读取 XML 文件的所有行,除非它到达以下字符串标题“上诉人通知”。我想忽略该字符串标题之后的所有行。

另外,我正在以二进制模式读取文件,因为 XML 文件格式不正确。那么有没有办法在以二进制模式读取文件时做到这一点。

【问题讨论】:

  • 嗨。我不确定它是否真的能帮助我找到我正在寻找的东西。我想在以二进制模式读取文件时忽略某个字符串“上诉人通知”之后的行
  • 从我发送的链接中,您只能获取所需的字符串。但如果文件“损坏”,我的好方法是修复它,如果不难,它会更容易使用,或者@Divyang-Vashi 的答案似乎是一个不错的答案。
  • 似乎根本不需要使用“二进制模式”。我猜您认为或一直使用完整的 XML 阅读器,而您没有意识到还有第三种更合乎逻辑的选择:打开并作为纯文本文件阅读。跨度>
  • @PekoChan:谢谢

标签: xml python-3.x readlines


【解决方案1】:

这是我从您的问题中了解到的: 一旦遇到子字符串“上诉人通知”,您想停止读取正在以二进制模式读取的文件。我很困惑您是否要阅读包含子字符串之后的子字符串的行。但我假设您不想阅读包含此子字符串的行之后的行。

   with open("test_xml.xml", "rb") as f:
   ...:     for line in f:
   ...:         if b'NOTICE TO APPELLANT' in line:
   ...:             print(line) #you can replace this function call
   ...:             break
   ...:         else:
   ...:             print(line)

我的输入文件“test_xml.xml”看起来像这样......

<note>
    <to>Tove</to>
    <from>Jani</from>
        <heading>Reminder</heading>
        <body>Don't forget me this weekend!</body>
        <sometag>NOTICE TO APPELLANT</sometag>

    sd;kfposdkjfpksdf sdk sd
            ALL THESE WONT BE SCANNED/READ
            SDFKSDPFJSDHF
        OHSFOHSD
</note>

大部分代码都很容易理解,除了我将 str 转换为二进制类型的部分,但这仍然不是那么难。

【讨论】:

  • 你是对的。在遵循“上诉人通知”之后,我不想阅读文本中字符串之后的任何行
  • 它仍然读取文件之后的所有内容。所有内容都在一行中
猜你喜欢
  • 2020-02-26
  • 2014-12-16
  • 2020-08-05
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
相关资源
最近更新 更多