咨询:AirSim配套数据采集Python脚本运行后预期存储位置未生成CSV文件
无目标CSV文件生成的核心问题
- 硬编码路径字符串,未使用拼接的真实路径变量:代码中所有
open()调用传入的是字面量字符串r"gps_file_name",而非提前拼接好的时间戳文件名变量,更未关联你创建的C:\AirSimData存储目录。该逻辑下文件会被创建在Python进程的当前工作目录,而非你预设的存储位置,自然在目标路径找不到。 - 循环内文件打开模式错误:while循环中始终用
'w'(覆盖写入)模式打开文件,即便路径修正正确,每帧采集时都会清空全文件内容,仅保留最新一行数据,无法实现持续采集写入的目标。 - 生成的文件名不符合Windows系统规则:直接将
datetime.now()的默认字符串转换结果作为文件名,其中包含Windows文件名禁止的冒号字符,即便路径写对,调用open()时也会触发文件名非法异常,无法创建文件本体。
修正后的可运行代码
import setup_path import airsim import os import csv import datetime from pathlib import Path client = airsim.MultirotorClient() client.confirmConnection() # 确保预设存储目录存在 dirmain = Path(r"C:\AirSimData") dirmain.mkdir(exist_ok=True) # 生成符合Windows规则的合法文件名 run_timestamp = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") # 拼接GPS文件的完整存储路径 gps_full_path = dirmain / f"gps_{run_timestamp}.csv" # 首次写入文件表头 with open(gps_full_path, 'w', newline='', encoding='utf-8') as f: csv.writer(f).writerow(['lat', 'lon', 'alt']) # 持续采集数据循环 while True: gps_geo = client.getGpsData().gnss.geo_point gps_row = [gps_geo.latitude, gps_geo.longitude, gps_geo.altitude] # 追加模式写入,不会覆盖已有采集数据 with open(gps_full_path, 'a', newline='', encoding='utf-8') as f: csv.writer(f).writerow(gps_row)
关键修正说明
- 替换所有硬编码的
r"gps_file_name"字面量,使用Path类自动完成路径拼接,保证生成的文件准确落在C:\AirSimData目录下 - 将循环内的文件写入模式从
'w'改为'a'(追加写入),避免每轮循环清空已存数据 - 对时间戳格式做适配处理,替换掉Windows文件名禁止的冒号字符,避免文件创建失败
- 增加
newline=''参数,消除CSV文件生成时的多余空行问题
内容的提问来源于stack exchange,提问作者Shubham Nipanikar
相关产品推荐
相关产品推荐

