File Target Writer

本文介绍了使用Infa9.0.1版本工具导出数据到不同格式文件的方法,包括xls(制表符分隔)、csv(逗号分隔)和txt等文本格式,并指出了该版本不支持生成xlsx文件。通过示例展示了如何定义文件头来创建这些文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可生成xls(tab键分隔),csv(逗号分隔),txt (或者任何自命名后缀的文件)

infa9.0.1不能生成xlsx文件

header.sh内容:

excel文件:echo -en "ORG_WID\tMONTH_WID\tDSM_POSTN_WID\tSR_POSTN_WID\tPOINT_AVE\tPOINT_SCOPE\tCOACH_TYPE_CD\r\n"

csv文件:echo -en "ORG_WID,MONTH_WID,DSM_POSTN_WID,SR_POSTN_WID,POINT_AVE,POINT_SCOPE,COACH_TYPE_CD\r\n"

 

def write2csv_optimized(value_dict, output_file, name, batch_size=10000): """优化后的写入函数(分批次+异步)""" if not value_dict: print('CSV数据为空') return # 1. 定义字段名(原逻辑保持不变) fieldnames = { "ins": ['timestamp', 'longitude_ins', 'latitude_ins','INS_PreciousLvl'], "gnss": ['timestamp', 'gnss_lon', 'gnss_lat', 'postype'], "loc": ['timestamp', 'loc_lon', 'loc_lat', 'loc_height', 'loc_heading','loc_vehicle_spd_err'], "compare": [ 'gnss_timestamp', 'fusion_time', 'timestamp_delta', 'lon_delta', 'lon_delta_m', 'lat_delta', 'lat_delta_m', 'fusion_lon', 'fusion_lat', 'fusion_height', 'fusion_heading', 'gnss_lon', 'gnss_lat', 'gnss_lon_02', 'gnss_lat_02', 'postype','loc_vehicle_spd_err','INS_PreciousLvl' ] }.get(name) # 2. 排序数据(原逻辑保持不变) sorted_items = sorted(value_dict.items(), key=lambda item: int(item[0])) # 3. 分批次写入 def _write_batch(batch): with open(output_file, mode='a', newline='') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=fieldnames) if csvfile.tell() == 0: # 仅首次写入表头 writer.writeheader() for utc, values in batch: row_dict = {'gnss_timestamp': utc} if name == "compare" else {'timestamp': utc} row_dict.update(dict(zip(fieldnames[1:], values))) writer.writerow(row_dict) # 4. 异步写入控制 def _async_writer(q): while True: batch = q.get() if batch is None: # 终止信号 break _write_batch(batch) q.task_done() # 启动异步写入线程 q = Queue() writer_thread = Thread(target=_async_writer, args=(q,), daemon=True) writer_thread.start() # 5. 分块提交数据 for i in range(0, len(sorted_items), batch_size): batch = sorted_items[i:i + batch_size] q.put(batch) q.put(None) # 发送结束信号 writer_thread.join() # 等待写入完成 return 1
07-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值