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

基于服务名合并多服务器多CSV文件至单个CSV的方案咨询

合并多服务器多服务CSV文件(按服务分组)实现方案

核心思路

我来给你梳理一下实现这个需求的具体思路,用Python的pandas库就能轻松搞定——核心是先把同服务类型的CSV文件归为一组,再分别合并每组内的数据,最后输出成符合要求的单个文件(单工作表CSV或多工作表Excel)。下面是分步操作指南和代码实现:


步骤1:解析文件名,提取关键信息

每个文件名的格式是sum_[服务器名]check_[服务名].csv,我们可以用正则表达式快速拆分出:

  • 服务器名:比如devas1.devad.myworldpanel.com
  • 服务名:比如check_cpu、interface_eth0

步骤2:按服务分组存储数据

用一个字典来管理不同服务的数据,键是服务名,值是该服务对应的所有数据表格。这样能确保同服务的文件被放在一起,后续合并更方便。

步骤3:输出目标文件

根据需求选择输出格式:

  • 单工作表CSV:按服务顺序,先写对应服务的表头,再写入该服务下所有服务器的数据
  • 多工作表Excel(更推荐):每个服务对应一个独立工作表,自动保留各自的表头,不同服务的数据互不干扰,可读性更强

具体代码实现(Python + Pandas)

import pandas as pd
import os
import re

# 1. 定义正则表达式匹配文件名格式
file_pattern = re.compile(r'sum_(.*)check_(.*)\.csv')

# 2. 初始化字典,用来按服务名存储对应的数据表
service_data = {}

# 3. 遍历当前目录下的所有CSV文件
for filename in os.listdir('.'):
    if filename.endswith('.csv'):
        match_result = file_pattern.match(filename)
        if match_result:
            server_name = match_result.group(1)
            service_name = match_result.group(2)
            
            # 读取当前CSV文件(注意示例是空格分隔,实际如果是逗号就改成sep=',')
            df = pd.read_csv(filename, sep=' ')
            
            # 将数据表加入对应服务的列表中
            if service_name not in service_data:
                service_data[service_name] = []
            service_data[service_name].append(df)

# 4. 输出为单工作表CSV(按服务分组展示)
with open('merged_all_services.csv', 'w') as output_file:
    for service_name, df_list in service_data.items():
        # 合并同服务的所有数据
        merged_df = pd.concat(df_list, ignore_index=True)
        # 写入表头和数据
        merged_df.to_csv(output_file, sep=' ', index=False, header=True)
        # 可选:加入分隔线区分不同服务块
        output_file.write('\n--- {} 数据结束 ---\n\n'.format(service_name))

# 5. 或者输出为多工作表Excel(更适合不同表头的场景)
with pd.ExcelWriter('merged_all_services.xlsx') as writer:
    for service_name, df_list in service_data.items():
        merged_df = pd.concat(df_list, ignore_index=True)
        merged_df.to_excel(writer, sheet_name=service_name, index=False)

注意事项

  • 分隔符适配:示例中的CSV用空格分隔,如果你实际文件是逗号或其他分隔符,修改代码里的sep参数即可
  • 表头一致性:假设同服务的所有CSV文件表头完全一致,如果存在表头差异,可以给pd.concat加上join='outer'参数,保留所有列
  • 文件路径:如果CSV文件不在当前工作目录,把os.listdir('.')改成你的文件所在路径即可

内容的提问来源于stack exchange,提问作者Empty Coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:07:34