【问题标题】:Waiting for xml file writing to finish in python等待xml文件写入在python中完成
【发布时间】:2014-02-24 12:55:31
【问题描述】:

我已经编写了这个脚本来将数据写入 xml 文件。它正在正确写入,但我想等待在 xml 文件中完成写入,然后我将执行另一个代码。这意味着另一个代码依赖于 xml 数据写入。

那么如何等待xml文件中的数据写入完成。

import xml.etree.ElementTree as ET
tree = ET.parse('output.xml')
root = tree.getroot()
for country in root('country'):
    root.attrib['value']=data
tree.write('output.xml')

以上代码为示例代码,data 的数量可能更多,因此需要时间来编写。有人告诉我该怎么做。

【问题讨论】:

  • 如果你有更多的数据,那么写入需要时间,但你可以使用with 写入文件,它会负责关闭文件和完成进程。 docs.python.org/2/reference/…
  • @Lafada 我尝试使用with,但同样的问题是它没有等待完成在 xml 文件中的写入。如果你有另一个想法
  • tree.write 将等到该过程完成。我不认为它会在tree.write 完成它的工作之前执行下一条语句。

标签: python xml python-2.7 lxml


【解决方案1】:

Python File write() Method 状态

方法 write() 将字符串 str 写入文件。没有回报 价值。由于缓冲,字符串实际上可能不会显示在 文件,直到调用 flush() 或 close() 方法。

因此,如果您不想在写入后关闭文件(以便其他功能可以打开和读取它),您可以放置​​

tree.flush() # does not work because no flush method in ElementTree

写入后立即。

我看到手册明确显示了写入文件名而不是文件描述符。但是,这似乎是在交互模式下完成的。

如果脚本可以处理文件描述符,那么文件描述符上的 flush() 或 close() 方法将很有用。

其他地方显示的示例给出了使用文件描述符写入文件的示例。这将打开和关闭文件以及允许刷新。确切的方法由您决定 (:-)

text = ET.tostring(reply)
self.wfile.write(text)

【讨论】:

  • 它给出了这个错误AttributeError: 'ElementTree' object has no attribute 'flush'
  • 查看代码,也许如果您显式打开文件并在文件描述符而不是树上执行刷新,它可能会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 2020-08-31
  • 2014-03-09
  • 1970-01-01
  • 2023-03-11
  • 2017-07-06
相关资源
最近更新 更多