本文目录导读:

- 脚本核心功能模块
- 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 版本,核心是把数据写下来、找得到、能导出到日历。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播