You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用Python从无序TXT文件按公司分组离线站点的实现思路

解决思路与代码示例

核心思路

  • 识别文本中的路径标识行(以Root\开头),从中提取公司名称
  • 遍历文本时维护「当前所属公司」状态变量,后续站点行默认归属于最近路径行对应的公司
  • 用字典存储分组结果:键为公司名,值为该公司下所有Offline站点的列表

具体步骤

  1. 解析文本结构
    先快速扫描TXT文件,确认路径行与站点行的对应规则:通常路径行是一批站点的归属标识,后续站点直到下一个路径行都属于该公司。若存在乱序(如站点行先于路径行),可将这类站点归入「Unknown Company」。

  2. 提取公司名称
    对路径行(如Root\XX Company X\Local Sites)用split('\\')分割字符串,取索引为1的元素(即XX Company X)作为公司名,用strip()清理多余空格。

  3. 筛选Offline站点并分组
    遍历每一行:

    • 若为路径行:更新「当前公司」,并在字典中初始化该公司的空列表(如果不存在)
    • 若为站点行:按': '分割提取站点名和状态,转小写判断是否为offline,若是则添加到当前公司的列表中
    • 空行或无效行直接跳过

代码示例

# 初始化存储结构:公司名 -> Offline站点列表
offline_groups = {}
current_company = None

# 读取报告文件
with open('network_monitor.txt', 'r', encoding='utf-8') as report_file:
    for line in report_file:
        clean_line = line.strip()
        # 跳过空行
        if not clean_line:
            continue
        
        # 处理路径行,更新当前公司
        if clean_line.startswith('Root\\'):
            path_parts = clean_line.split('\\')
            # 确保路径格式符合预期(至少3层:Root\公司\站点类型)
            if len(path_parts) >= 3:
                current_company = path_parts[1].strip()
                # 初始化公司对应的列表(如果不存在)
                if current_company not in offline_groups:
                    offline_groups[current_company] = []
            continue
        
        # 处理站点状态行
        if ': ' in clean_line:
            site_info = clean_line.split(': ', 1)
            if len(site_info) != 2:
                # 格式无效的行,跳过
                continue
            site_name, status = site_info
            site_name = site_name.strip()
            status = status.strip().lower()
            
            # 仅收集Offline状态的站点
            if status == 'offline':
                if current_company is not None:
                    offline_groups[current_company].append(site_name)
                else:
                    # 无归属公司的Offline站点,归入Unknown
                    if 'Unknown Company' not in offline_groups:
                        offline_groups['Unknown Company'] = []
                    offline_groups['Unknown Company'].append(site_name)

# 输出分组结果
print("Offline站点按公司分组:")
for company, sites in offline_groups.items():
    print(f"\n* {company}:")
    for site in sites:
        print(f"  - {site}")

优化建议

  • 合并同公司多路径:如果同一家公司有多个路径行(如Local和Remote),字典会自动合并该公司的所有Offline站点
  • 扩展状态判断:如果状态字段有其他写法(如Down、Unavailable),可扩展判断条件为if status in ['offline', 'down', 'unavailable']
  • 异常日志:添加logging模块记录无效行或异常路径,方便后续排查

内容的提问来源于stack exchange,提问作者Jonathan López

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:46:37