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

2024-10-01 04:45:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的问题是如何得到刚刚创建的(.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中有一个函数isfile(),它检查文件是否存在,但我不知道如何检查,直到它会存在为止。你知道吗


Tags: 文件importid数据库应用程序autotodayorder
2条回答

最简单的解决办法是投票。这里我从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)

要使用上面的类,只需初始化它并将一个可调用的函数传递给它的until()方法。你知道吗

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

一个可能的解决方案是不断检查输出目录中的文件列表:当列表更改时,意味着您添加了可以处理的新文件。你知道吗

伪代码:

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

相关问题 更多 >