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

引言

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

问题背景

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

复制代码
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

相关推荐
SkyWalking中文站21 小时前
认识 Horizon UI · 6/17:Trace 探索器
运维·监控·自动化运维
火车叼位1 天前
写给初级开发者:SSL、SSH、HTTPS 与证书体系全解析
运维
小猿姐1 天前
唯品会大规模数据库云原生实践:基于 KubeBlocks 管理数千实例的统一运维之路
运维·elasticsearch·云原生
SkyWalking中文站2 天前
认识 Horizon UI · 5/17:3D 基础设施地图
运维·监控·自动化运维
SkyWalking中文站3 天前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
雪梨酱QAQ3 天前
Kubeneters HA Cluster部署
运维
江华森3 天前
Spring Cloud 微服务全栈实战:从 Eureka 到 Docker Compose 一文贯通
运维
江华森3 天前
Matplotlib 数据绘图基础入门
运维
江华森3 天前
NumPy 数值计算基础入门
运维
乘云数字DATABUFF7 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端