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

引言

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

问题背景

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

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

相关推荐
逸模2 小时前
告别熬夜手工整理台账,逸模智能归集实现项目数据自动化存档
大数据·运维·人工智能·笔记·其他·信息可视化·自动化
sbjdhjd2 小时前
Redis 主从复制、哨兵高可用与 Cluster 集群部署实验手册
运维·前端·redis·云原生·开源·bootstrap·html
AOwhisky3 小时前
MySQL 学习笔记(第四期):SQL 语言之多表查询
linux·运维·网络·数据库·笔记·学习·mysql
Phantom Void3 小时前
服务器处理客户端请求的设计方法
linux·运维·网络
倔强的石头1063 小时前
Fooocus开源神器+cpolarAI让绘画告别服务器依赖
运维·服务器·cpolar
wei_shuo3 小时前
服务器挂了等用户投诉才发现?我用Beszel搭了轻量监控系统,宕机第一时间通知我
运维·服务器
王码码20353 小时前
多台服务器怎么统一看状态?Beszel 轻量监控,搭起来不费事
运维·服务器·后端·安全·阿里云·接口·web
福建佰胜张工4 小时前
MAXON 机电高压油安全切断阀技术全解
安全·自动化
APItesterCris6 小时前
实战教程:借助 Open Claw + 淘宝商品 API,低成本实现电商自动化监控与智能选品
大数据·运维·自动化
风曦Kisaki8 小时前
# 自动化运维Day03:Ansible模块进阶(setup,debug),四种常用变量,进阶语法;Ansible Roles(角色)
运维·自动化·ansible