本文目录导读:

- 基础文本记录脚本(Python - 手动输入)
- 自动采集OBD数据(Python + OBD-II适配器)
- 车载GPS轨迹记录(Bash + gpsd)
- 自动生成日报/周报(Shell + awk)
- Web界面管理(轻量级Flask + SQLite)
- 选择建议
- 额外考虑
记录车辆使用记录可以通过多种脚本实现,具体取决于你使用的平台(如Linux、Windows、车载系统等)以及数据采集方式(手动输入、传感器、OBD接口等),以下是几种常见场景及对应的脚本示例:
基础文本记录脚本(Python - 手动输入)
适合个人或小团队手动记录每次用车信息。
#!/usr/bin/env python3
import csv
import os
from datetime import datetime
FILE_NAME = "vehicle_usage.csv"
def log_usage():
# 检查文件是否存在,不存在则创建并写入表头
if not os.path.exists(FILE_NAME):
with open(FILE_NAME, mode='w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(["日期", "时间", "出发地", "目的地", "起始里程(km)", "结束里程(km)", "行驶里程(km)", "驾驶员", "备注"])
# 获取用户输入
date = input("日期 (YYYY-MM-DD, 默认今天): ") or datetime.now().strftime("%Y-%m-%d")
time = input("时间 (HH:MM, 默认现在): ") or datetime.now().strftime("%H:%M")
start = input("出发地: ")
end = input("目的地: ")
start_mile = input("起始里程 (km): ")
end_mile = input("结束里程 (km): ")
driver = input("驾驶员: ")
note = input("备注 (可选): ")
# 计算行驶里程
try:
distance = float(end_mile) - float(start_mile)
except ValueError:
distance = 0.0
# 写入CSV
with open(FILE_NAME, mode='a', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow([date, time, start, end, start_mile, end_mile, f"{distance:.1f}", driver, note])
print(f"记录已保存至 {FILE_NAME},本次行驶 {distance:.1f} 公里。")
if __name__ == "__main__":
while True:
log_usage()
again = input("是否继续记录?(y/n): ").strip().lower()
if again != 'y':
break
运行方式:保存为 log_vehicle.py,在终端执行 python3 log_vehicle.py。
自动采集OBD数据(Python + OBD-II适配器)
使用ELM327或类似OBD适配器连接车辆OBD接口,自动读取里程、时间、油耗等数据(需安装python-obd库)。
#!/usr/bin/env python3
import obd
import csv
import time
from datetime import datetime
FILE_NAME = "obd_vehicle_log.csv"
def connect_obd():
# 尝试连接OBD适配器(默认波特率38400或115200)
connection = obd.OBD() # 或者指定端口: obd.OBD("/dev/ttyUSB0")
return connection
def log_obd_data(conn):
if not conn.is_connected():
print("OBD连接失败")
return
# 确保文件存在并写入表头
with open(FILE_NAME, mode='a', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
if f.tell() == 0: # 文件为空则写表头
writer.writerow(["时间", "车速(km/h)", "发动机转速(RPM)", "里程(km)", "剩余油量(%)"])
# 循环读取数据
try:
while True:
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
speed = conn.query(obd.commands.SPEED).value # 返回km/h
rpm = conn.query(obd.commands.RPM).value
# 如果支持里程读取(部分车辆)
# mileage = conn.query(obd.commands.FUEL_LEVEL).value # 请根据实际命令调整
fuel = conn.query(obd.commands.FUEL_LEVEL).value # 百分比
# 写入CSV
with open(FILE_NAME, mode='a', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow([now, speed, rpm, "", fuel])
print(f"记录: {now} 速度={speed} km/h")
time.sleep(2) # 每隔2秒采集一次
except KeyboardInterrupt:
print("停止采集")
if __name__ == "__main__":
conn = connect_obd()
if conn.is_connected():
log_obd_data(conn)
else:
print("无法连接OBD设备,请检查适配器与车辆连接。")
前置依赖:pip install python-obd,并需购买ELM327蓝牙/WiFi适配器。
车载GPS轨迹记录(Bash + gpsd)
基于GPS设备实时记录车辆位置、速度、时间。
#!/bin/bash
# 需要安装 gpsd 和 gpspipe
LOG_FILE="gps_track_$(date +%Y%m%d).log"
if ! command -v gpspipe &> /dev/null; then
echo "请先安装 gpsd 和 gpspipe"
exit 1
fi
# 启动gpsd(如果未运行)
sudo gpsd /dev/ttyAMA0 # 替换为你的GPS设备端口
# 监听GPS数据并写入日志
gpspipe -w -n 100000 | while read line
do
# 解析JSON数据,提取时间和经纬度(需安装 jq 以便解析)
if command -v jq &> /dev/null; then
time=$(echo "$line" | jq -r '.time // empty')
lat=$(echo "$line" | jq -r '.lat // empty')
lon=$(echo "$line" | jq -r '.lon // empty')
speed=$(echo "$line" | jq -r '.speed // empty')
if [ -n "$time" ] && [ -n "$lat" ] && [ -n "$lon" ]; then
echo "$time $lat $lon $speed" >> "$LOG_FILE"
fi
else
# 不解析JSON,直接保存原始数据
echo "$line" >> "$LOG_FILE"
fi
done
说明:适用于树莓派、GPS模块等场景,生成带时间戳的位置日志。
自动生成日报/周报(Shell + awk)
基于记录的CSV文件,汇总统计每日里程。
#!/bin/bash
# 统计 vehicle_usage.csv 中每日累计里程
REPORT_FILE="daily_report_$(date +%Y%m%d).txt"
echo "========== 车辆使用日报表 ==========" > "$REPORT_FILE"
echo "日期 | 行驶里程(km) | 驾驶员" >> "$REPORT_FILE"
echo "--------------------------------" >> "$REPORT_FILE"
awk -F',' 'NR>1 {print $1, $7, $8}' vehicle_usage.csv | awk '{
sum[$1] += $2
if (!($1 in drivers)) drivers[$1]=$3
}
END {
for (date in sum) {
printf "%s | %.1f | %s\n", date, sum[date], drivers[date]
}
}' >> "$REPORT_FILE"
echo "报表已生成: $REPORT_FILE"
Web界面管理(轻量级Flask + SQLite)
提供一个网页端手动/自动记录,适合多人使用。
from flask import Flask, request, render_template, redirect
import sqlite3
from datetime import datetime
app = Flask(__name__)
DB_FILE = "vehicle.db"
def init_db():
conn = sqlite3.connect(DB_FILE)
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS usage_records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
date TEXT,
time TEXT,
start_loc TEXT,
end_loc TEXT,
start_mile REAL,
end_mile REAL,
distance REAL,
driver TEXT
)''')
conn.commit()
conn.close()
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
date = request.form.get('date') or datetime.now().strftime("%Y-%m-%d")
time = request.form.get('time') or datetime.now().strftime("%H:%M")
start = request.form['start']
end = request.form['end']
start_mile = float(request.form['start_mile'])
end_mile = float(request.form['end_mile'])
driver = request.form['driver']
distance = end_mile - start_mile
conn = sqlite3.connect(DB_FILE)
c = conn.cursor()
c.execute("INSERT INTO usage_records VALUES (?,?,?,?,?,?,?,?)",
(None, date, time, start, end, start_mile, end_mile, distance, driver))
conn.commit()
conn.close()
return redirect('/')
conn = sqlite3.connect(DB_FILE)
c = conn.cursor()
c.execute("SELECT * FROM usage_records ORDER BY id DESC LIMIT 50")
records = c.fetchall()
conn.close()
return render_template('index.html', records=records)
if __name__ == '__main__':
init_db()
app.run(host='0.0.0.0', port=5000, debug=False)
配套HTML(templates/index.html):略,可自行编写带表单和表格的页面。
选择建议
| 场景 | 推荐脚本 |
|---|---|
| 手动记录,简单快速 | Python文本记录(方案1) |
| 自动采集车辆发动机、速度数据 | OBD脚本(方案2) |
| 实时追踪车辆位置 | GPS脚本(方案3) |
| 生成统计报表 | Shell + awk(方案4) |
| 团队管理、Web可视化 | Flask + SQLite(方案5) |
额外考虑
- 数据存储:CSV适合小规模,SQLite适合多用户查询,InfluxDB适合高频时序数据。
- 合规性:记录车辆使用涉及隐私(如驾驶员、位置),需确保符合当地数据保护法规。
- 硬件成本:OBD适配器约30-100元,GPS模块约50-200元。
根据你的实际需求(是否有OBD/GPS硬件、是否需要网络界面、记录频率等)选择合适的方案即可。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播