在Python中保存多个文件

我试图在每次运行以下命令时创建一个新文件。目前它会创建 1 个文件并覆盖它。是否有一个方法可以使其不覆盖并为每个循环创建一个新文件?


import xml.etree.ElementTree as ET

import time

import csv


with open('OrderCSV.csv', newline='') as csvfile:

    reader = csv.DictReader(csvfile)

    for row in reader:

        orders_data = ET.Element('orders_data')

        orders = ET.SubElement(orders_data, 'orders')


        ##Order Details

        order_reference = ET.SubElement(orders, 'order reference')

        order_reference.set('',"12345")

        order_date = ET.SubElement(order_reference, 'order_date')

        order_priority  = ET.SubElement(order_reference, 'order_priority')

        order_category = ET.SubElement(order_reference, 'order_category')

        delivery_service = ET.SubElement(order_reference, 'delivery_service')

        delivery_service.text = row['delivery_service']


        timestr = time.strftime("%Y%m%d%H%M%S")


        mydata = ET.tostring(orders_data)

        myfile = open(timestr, "wb")

        myfile.write(mydata)


慕的地8271018
浏览 36回答 2
2回答

jeck猫

您可以查看该文件是否已经存在并稍等一下    while True:        timestr = time.strftime("%Y%m%d%H%M%S")        if not os.path.exists(timestr):            break        time.sleep(.1)    with open(timestr, "wb") as myfile:        mydata = ET.tostring(orders_data)        myfile.write(mydata)您不必等待,只需添加几秒钟即可。如果您每秒处理大量文件,这将导致文件名在时间上向前漂移。    mytime = time.time()    while True:        timestr = time.strftime("%Y%m%d%H%M%S", time.localtime(mytime))        if not os.path.exists(timestr):            break        time.sleep(.1)    with open(timestr, "wb") as myfile:        mydata = ET.tostring(orders_data)        myfile.write(mydata)另一种选择是在循环之前获取单个时间戳并随时更新它。mytime = time.strftime("%Y%m%d%H%M%S")for index, row in enumerate(reader):     ....     mytime = f"mytime-{index}"     ....

当年话下

每次运行循环时更改变量名称,我建议使用 with 语句打开文件,因为打开文件后还必须关闭它with open(timestr, 'wb') as myfile:     myfile.write(mydata)编辑:我能想象到你的代码中唯一的缺陷是打开文件后没有关闭文件
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python