如何写行程规划记录脚本

wen 实用脚本 28

本文目录导读:

如何写行程规划记录脚本

  1. 脚本核心功能模块
  2. Python 脚本示例(命令行版 + CSV 存储)
  3. 进阶版本(JSON 存储 + 更多功能)
  4. 极简 Bash 脚本(Linux/Mac 用户)
  5. Web 版(Flask 简易示例)
  6. 推荐写作思路(用于技术文档或教程)

下面为您提供一个通用的行程规划记录脚本写作指南,包含核心逻辑、示例代码(Python)以及不同场景的脚本模板,您可以根据自己的技术水平和需求(如命令行工具、Excel记录、网页应用等)选择使用。


脚本核心功能模块

一个标准的行程规划脚本通常包含以下功能:

  1. 输入模块:接收行程的日期、时间、地点、活动、备注等。
  2. 存储模块:将数据保存到本地(如 CSV、JSON、SQLite)或云端。
  3. 展示模块:按时间顺序显示行程,支持按日期筛选。
  4. 导出模块(可选):生成 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 即可。


推荐写作思路(用于技术文档或教程)

如果您是写一份关于如何编写行程规划脚本的教程,建议按以下结构组织:

  1. 明确需求:输入什么、存储什么、输出什么。
  2. 选择技术栈
    • 纯文本/CSV/JSON(简单)
    • Python + SQLite(中等)
    • 网页开发(前端 + 后端)
  3. 分步实现
    • 第一步:定义数据结构(字段、类型)
    • 第二步:实现数据持久化(读/写文件或数据库)
    • 第三步:实现用户交互(CLI 菜单 / Web 表单)
    • 第四步:增加附加功能(搜索、修改、删除、导出)
  4. 测试与优化

类型 难度 适用人群 优点
Bash 脚本 极简主义者 零依赖,1分钟写好
Python + CSV 日常用户 容易理解,可导出 ICS
Python + JSON 需复杂管理 支持更多字段,可做数据分析
Flask Web 想有图形界面 美观,适合多设备

建议:先从 Python + CSV 版本开始,满足需求后再升级到 JSON 或 Web 版本,核心是把数据写下来、找得到、能导出到日历

抱歉,评论功能暂时关闭!