在Python中创建文件时读取文件

时间:2016-12-07 09:59:15

标签: python file

我写了从prestashop数据库获取订单详细信息的应用程序,将它们放到XML文件中,然后UPS WorldShip(用于发送UPS包裹的软件)导入该XML文件并创建自己的文件,结果作为跟踪编号。在下一步中,我将解析该退出文件以获取跟踪号并将其保存在我的本地数据库中。

我的问题是如何只在准备好(创建)时才获得刚刚创建的(.out)文件。此刻我的代码如下:

tree.write("C:/ProgramData/UPS/WSTD/IMPEXP/XML Auto Import/" + today + "-" + order_id + ".xml", encoding="utf-8", xml_declaration=True)
time.sleep(1)
out_file = etree.parse("C:/ProgramData/UPS/WSTD/IMPEXP/XML Auto Import/" + today + "-" + order_id + ".out")

这是一个糟糕的解决方案。我想"等到文件被创建"。

我在python中知道fonction isfile()检查文件是否存在,但我不知道如何检查,直到它实际上会有。

2 个答案:

答案 0 :(得分:3)

最简单的解决方案是进行民意调查。在这里,我从Selenium的WebDriverWait课程中汲取灵感。

from time import time, sleep

class Waiter(object):
    def __init__(self, poll=0.5, timeout=60):
        self.poll = poll
        self.timeout = timeout

    def until(self, callable, message='Timed out'):
        end_time = time() + self.timeout

        while True:
            value = callable()
            if value:
                break

            sleep(self.poll)

            if time() > end_time:
                raise Exception(message)

要使用上面的类,只需初始化它并将callable传递给它的until()方法。

import os
wait = Waiter()
wait.until(lambda: os.path.exists('fake.txt'))

答案 1 :(得分:0)

可能的解决方案是继续检查输出目录中的文件列表:当列表更改时,意味着您添加了可以处理的新文件。

伪代码:

import os

checked_files = []

while(1):

   all_files = os.listdir(output_folder)
   new_files = set(all_files) - set(checked_files)

   for file in new_files:
       # Process them
       ....

   checked_files = all_files