本文目录导读:

- 脚本核心功能模块
- Python 脚本示例(命令行版 + CSV 存储)
- 进阶版本(JSON 存储 + 更多功能)
- 极简 Bash 脚本(Linux/Mac 用户)
- Web 版(Flask 简易示例)
- 推荐写作思路(用于技术文档或教程)
下面为您提供一个通用的行程规划记录脚本写作指南,包含核心逻辑、示例代码(Python)以及不同场景的脚本模板,您可以根据自己的技术水平和需求(如命令行工具、Excel记录、网页应用等)选择使用。
脚本核心功能模块
一个标准的行程规划脚本通常包含以下功能:
- 输入模块:接收行程的日期、时间、地点、活动、备注等。
- 存储模块:将数据保存到本地(如 CSV、JSON、SQLite)或云端。
- 展示模块:按时间顺序显示行程,支持按日期筛选。
- 导出模块(可选):生成 iCalendar (.ics) 文件(可导入到手机日历)、PDF 或打印友好的文本。
Python 脚本示例(命令行版 + CSV 存储)
这个脚本适合日常使用,无需安装图形界面,直接在终端运行。
完整代码 (trip_planner.py)
import csv
import json
import os
from datetime import datetime
DATA_FILE = "trips.csv"
# ------ 初始化 CSV 文件(如果不存在)------
def init_file():
if not os.path.exists(DATA_FILE):
with open(DATA_FILE, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(["日期", "时间", "地点", "活动", "备注"])
# ------ 添加一条行程记录 ------
def add_trip():
print("=== 添加新行程 ===")
date = input("日期 (YYYY-MM-DD): ").strip()
time = input("时间 (HH:MM 或自由文本): ").strip()
location = input("地点: ").strip()
activity = input("活动: ").strip()
notes = input("备注 (可选): ").strip()
# 简单校验日期格式
try:
datetime.strptime(date, "%Y-%m-%d")
except ValueError:
print("⚠ 日期格式错误,请使用 YYYY-MM-DD")
return
with open(DATA_FILE, 'a', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow([date, time, location, activity, notes])
print("✅ 行程已添加\n")
# ------ 查看所有行程 ------
def view_trips():
print("\n=== 所有行程 ===")
try:
with open(DATA_FILE, 'r', encoding='utf-8') as f:
reader = csv.reader(f)
rows = list(reader)
if len(rows) <= 1:
print("暂无行程记录")
return
# 跳过表头,按日期排序
for row in sorted(rows[1:], key=lambda x: x[0]):
print(f"{row[0]} | {row[1]} | {row[2]} | {row[3]} | {row[4]}")
except FileNotFoundError:
print("还未创建任何行程。")
# ------ 按日期筛选 ------
def view_by_date():
date = input("输入要查看的日期 (YYYY-MM-DD): ").strip()
print(f"\n=== {date} 的行程 ===")
try:
with open(DATA_FILE, 'r', encoding='utf-8') as f:
reader = csv.reader(f)
found = False
for row in reader:
if row[0] == date:
print(f"{row[1]} | {row[2]} | {row[3]} | {row[4]}")
found = True
if not found:
print("该日期无行程记录。")
except FileNotFoundError:
print("还未创建任何行程。")
# ------ 导出为 iCalendar (.ics) 文件 ------
def export_ics():
trips = []
try:
with open(DATA_FILE, 'r', encoding='utf-8') as f:
reader = csv.reader(f)
next(reader) # 跳过表头
for row in reader:
if len(row) >= 4:
trips.append(row)
except FileNotFoundError:
print("无数据可导出")
return
if not trips:
print("无数据可导出")
return
ics_content = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//TripPlanner//EN\n"
for trip in trips:
date_str = trip[0].replace("-", "")
time_str = trip[1].replace(":", "") if ":" in trip[1] else "0900"
ics_content += "BEGIN:VEVENT\n"
ics_content += f"DTSTART;VALUE=DATE:{date_str}T{time_str}00\n"
ics_content += f"SUMMARY:{trip[3]}\n"
ics_content += f"LOCATION:{trip[2]}\n"
ics_content += f"DESCRIPTION:{trip[4]}\n"
ics_content += "END:VEVENT\n"
ics_content += "END:VCALENDAR"
filename = "trips.ics"
with open(filename, 'w', encoding='utf-8') as f:
f.write(ics_content)
print(f"✅ 已导出为 {filename},可导入 Google/Apple 日历")
# ------ 主菜单 ------
def main():
init_file()
while True:
print("\n===== 行程规划记录器 =====")
print("1. 添加行程")
print("2. 查看所有行程")
print("3. 按日期查看")
print("4. 导出为日历文件 (.ics)")
print("5. 退出")
choice = input("请选择 (1-5): ").strip()
if choice == '1':
add_trip()
elif choice == '2':
view_trips()
elif choice == '3':
view_by_date()
elif choice == '4':
export_ics()
elif choice == '5':
print("再见!")
break
else:
print("无效输入,请重试。")
if __name__ == "__main__":
main()
使用说明
- 运行
python trip_planner.py - 按照提示添加行程,数据保存在
trips.csv - 导出
trips.ics后,可导入到手机日历
进阶版本(JSON 存储 + 更多功能)
使用 JSON 存储(支持更多字段)
import json
import os
from datetime import datetime
DATA_FILE = "trips.json"
# 初始化默认数据结构
def init_data():
if not os.path.exists(DATA_FILE):
with open(DATA_FILE, 'w', encoding='utf-8') as f:
json.dump({"trips": []}, f, indent=2)
def load_data():
with open(DATA_FILE, 'r', encoding='utf-8') as f:
return json.load(f)
def save_data(data):
with open(DATA_FILE, 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
def add_trip_json():
trip = {
"id": int(datetime.now().timestamp()),
"date": input("日期 (YYYY-MM-DD): "),
"time": input("时间: "),
"location": input("地点: "),
"activity": input("活动: "),
"notes": input("备注: "),
"priority": input("优先级 (高/中/低): ") or "普通",
"budget": input("预算 (可选): ") or "0",
"created": datetime.now().strftime("%Y-%m-%d %H:%M")
}
data = load_data()
data["trips"].append(trip)
save_data(data)
print("✅ 已保存 JSON 格式")
优势:支持嵌套、搜索、修改、删除更方便。
极简 Bash 脚本(Linux/Mac 用户)
如果需要快速记录,可以用 shell 脚本把行程追加到文本文件:
#!/bin/bash # trip.sh echo "请输入行程信息(日期 时间 地点 活动)" read -p "日期 (YYYY-MM-DD): " date read -p "时间: " time read -p "地点: " location read -p "活动: " activity echo "$date | $time | $location | $activity" >> trips.txt echo "已记录!"
运行:chmod +x trip.sh && ./trip.sh
查看:cat trips.txt
Web 版(Flask 简易示例)
如果需要图形界面,可以基于 Flask 快速搭建:
from flask import Flask, request, render_template_string
import csv
app = Flask(__name__)
# 简单的 HTML 模板(省略美化)
HTML = '''
<form method="POST">
日期: <input name="date"><br>
时间: <input name="time"><br>
地点: <input name="location"><br>
活动: <input name="activity"><br>
<input type="submit" value="添加">
</form>
'''
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
with open('web_trips.csv', 'a', newline='', encoding='utf-8') as f:
w = csv.writer(f)
w.writerow([request.form['date'], request.form['time'], request.form['location'], request.form['activity']])
return "添加成功!<a href='/'>返回</a>"
return HTML
if __name__ == '__main__':
app.run(debug=True)
运行后访问 http://127.0.0.1:5000 即可。
推荐写作思路(用于技术文档或教程)
如果您是写一份关于如何编写行程规划脚本的教程,建议按以下结构组织:
- 明确需求:输入什么、存储什么、输出什么。
- 选择技术栈:
- 纯文本/CSV/JSON(简单)
- Python + SQLite(中等)
- 网页开发(前端 + 后端)
- 分步实现:
- 第一步:定义数据结构(字段、类型)
- 第二步:实现数据持久化(读/写文件或数据库)
- 第三步:实现用户交互(CLI 菜单 / Web 表单)
- 第四步:增加附加功能(搜索、修改、删除、导出)
- 测试与优化。
| 类型 | 难度 | 适用人群 | 优点 |
|---|---|---|---|
| Bash 脚本 | 极简主义者 | 零依赖,1分钟写好 | |
| Python + CSV | 日常用户 | 容易理解,可导出 ICS | |
| Python + JSON | 需复杂管理 | 支持更多字段,可做数据分析 | |
| Flask Web | 想有图形界面 | 美观,适合多设备 |
建议:先从 Python + CSV 版本开始,满足需求后再升级到 JSON 或 Web 版本,核心是把数据写下来、找得到、能导出到日历。