[网站搭建]动态文件路径管理方案:告别硬编码,实现自动化用户数据切换

引言

在开发数据分析系统时,我们经常会遇到这样的问题:每次新增用户数据都需要手动修改代码中的文件路径。本文将分享一个实际项目中的解决方案,通过动态文件路径管理,实现了多用户数据的自动识别和切换。

问题背景

原系统中的文件路径是硬编码的:

复制代码
STATS_FILE = r'D:/network/stats2.txt'
HR_FILE = r'D:/network/hr2.txt'

每次采集不同用户的数据后,都需要手动修改这些路径才能查看对应数据,效率极低且容易出错。

解决方案架构

我们采用前后端协同的方案来解决这个问题:

后端实现

1. 动态文件路径生成

复制代码
def get_file_paths(user_tag=None):
    """根据用户标签动态生成文件路径"""
    if user_tag:
        base_dir = os.path.dirname(os.path.abspath(__file__))
        stats_file = os.path.join(base_dir, f"{user_tag}_stats2.txt")
        hr_file = os.path.join(base_dir, f"{user_tag}_hr2.txt")
        
        if os.path.exists(stats_file) and os.path.exists(hr_file):
            return stats_file, hr_file
    
    return DEFAULT_STATS_FILE, DEFAULT_HR_FILE

2. 用户列表自动发现

复制代码
def get_available_users():
    """获取所有可用的用户数据文件"""
    base_dir = os.path.dirname(os.path.abspath(__file__))
    users = []
    
    for filename in os.listdir(base_dir):
        if filename.endswith('_stats2.txt'):
            user_tag = filename.replace('_stats2.txt', '')
            hr_file = os.path.join(base_dir, f"{user_tag}_hr2.txt")
            if os.path.exists(hr_file):
                users.append(user_tag)
    
    return sorted(users)

3. 新增API端点

端点 方法 描述
/get_users GET 获取所有可用用户列表
/get_stats GET 获取指定用户数据

前端实现

1. 用户选择器UI

复制代码
<span style="margin-left:20px;">
    数据用户:
    <select id="user_selector">
        <option value="">默认用户</option>
    </select>
</span>

2. 动态加载用户列表

复制代码
function initUserSelector() {
    fetch('http://127.0.0.1:5002/get_users')
        .then(res => res.json())
        .then(data => {
            const userSelector = document.getElementById('user_selector');
            data.users.forEach(user => {
                userSelector.innerHTML += `<option value="${user}">${user}</option>`;
            });
        });
}

3. 数据动态加载

复制代码
document.getElementById('load_stats_btn').onclick = function() {
    const selectedUser = document.getElementById('user_selector').value;
    const url = selectedUser ? 
        `http://127.0.0.1:5002/get_stats?user=${encodeURIComponent(selectedUser)}` : 
        'http://127.0.0.1:5002/get_stats';
    
    fetch(url)
        .then(res => res.json())
        .then(data => {
            // 更新图表和表格
        });
};

文件命名规范

系统会自动识别符合以下规则的文件:

复制代码
{用户标签}_stats2.txt
{用户标签}_hr2.txt

建议用户标签格式:机构_姓名_ID

示例:

  • www_z_002_stats2.txt

  • www_z_002_hr2.txt

相关推荐
许愿OvO13 分钟前
MySQL 8.3.0 运维与集群架构实战
运维·mysql·架构
凌云拓界16 分钟前
青创赛终评手记:最后的成功
运维·科技·职场和发展·架构·创业创新
zjeweler17 分钟前
宝藏网站推荐:云服务器特惠与网安学习资源的一站式聚合平台
运维·服务器·学习
时空自由民.26 分钟前
Linux,ESP IDF,NuttX OS使用的项目编译管理构建体系Kconfig + Kbuild(或基于 Make/CMake 的构建系统)
linux·运维·服务器
上弦月-编程30 分钟前
C语言位运算:从入门到精通
运维·c语言·开发语言·vscode·算法·leetcode·极限编程
云达闲人30 分钟前
搭建DevOps企业级仿真实验环境:001Proxmox VE 8.x 系统介绍与安装准备
运维·devops·proxmox·idrac·实验环境搭建
开开心心就好34 分钟前
一款既是直播工具又是浏览器的软件
linux·运维·服务器·智能手机·逻辑回归·excel·最小二乘法
tangyal38 分钟前
DNS(BIND) 正反向解析文件的部署实验
linux·运维·服务器·bind·dns正向解析·dns反向解析
煜3641 小时前
环境变量与虚拟内存
linux·运维·服务器
安逸sgr1 小时前
Hermes Agent + Obsidian 打造第二大脑(三):Docker 部署详解——从零到生产环境的完整实战指南!
运维·docker·容器·obsidian·hermes·hermesagent