如何用Python处理SUMO连续运行带TIME前缀的XML文件并直接导出CSV
SUMO动态前缀XML文件解析及CSV导出方案
文件名匹配规则
- SUMO的
--output-prefix参数会将你传入的前缀字符串直接拼接在所有指定输出文件的文件名最前方,按照你当前的配置:
最终生成的tripinfo XML文件名为sumoCmd = [sumoBinary, "-c", "test4.sumocfg", "--tripinfo-output", "tripinfo.xml", "--output-prefix", " TIME"]TIMEtripinfo.xml(注意前缀开头带的空格会保留在文件名中,建议删除前缀值的前置空格,避免后续文件读取异常)。
动态前缀适配方案
如果你需要每次运行都用不同的时间戳作为前缀区分运行批次,可以将前缀定义为公共变量,运行SUMO和解析XML时复用该变量即可,完整示例如下:
import time import csv import xml.etree.ElementTree as ET import traci import sumolib # 1. 定义动态时间前缀 time_prefix = time.strftime("%Y%m%d%H%M%S") # 2. 配置SUMO运行命令 sumoBinary = sumolib.checkBinary('sumo') sumoCmd = [ sumoBinary, "-c", "test4.sumocfg", "--tripinfo-output", "tripinfo.xml", "--output-prefix", time_prefix ] # 3. 启动SUMO运行 traci.start(sumoCmd) while traci.simulation.getMinExpectedNumber() > 0: traci.simulationStep() traci.close() # 4. 解析生成的带前缀XML文件 xml_file = f"{time_prefix}tripinfo.xml" tree = ET.parse(xml_file) root = tree.getroot() # 5. 导出为CSV文件 extract_fields = ["id", "depart", "arrival", "duration", "totalDelay", "distance"] with open(f"{time_prefix}tripinfo_output.csv", "w", newline="", encoding="utf-8") as csvf: writer = csv.DictWriter(csvf, fieldnames=extract_fields) writer.writeheader() for trip_node in root.findall("tripinfo"): row = {k: trip_node.attrib.get(k) for k in extract_fields} writer.writerow(row)
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

