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

如何用Regex/Python将专有配置文件解析为CSV?

解决方案汇总

一、PowerShell脚本方案(推荐,适合定期自动化)

PowerShell可直接读取文件并解析内容,无需额外环境,支持定时任务自动化,完全匹配你的权限环境。

脚本代码

# 配置文件路径,替换为实际路径
$configPath = "C:\Your\Config\Path\ptube_config.txt"
# 输出CSV路径,替换为实际路径
$outputPath = "C:\Your\Output\Path\cycles_data.csv"

# 初始化变量
$currentItem = $null
$cyclesValue = $null
$results = @()

# 逐行读取并解析文件
Get-Content $configPath | ForEach-Object {
    $line = $_.Trim()
    # 跳过注释行
    if ($line -match '^//') { return }
    # 匹配项名称(格式:ItemName {)
    if ($line -match '^(\w+)\s*{') {
        # 保存上一个带cycles的项
        if ($currentItem -and $cyclesValue) {
            $results += [PSCustomObject]@{
                ItemName = $currentItem
                Cycles = $cyclesValue
            }
        }
        # 重置当前项和cycles值
        $currentItem = $matches[1]
        $cyclesValue = $null
        return
    }
    # 匹配cycles字段(格式:cycles= 12345;)
    if ($line -match '^cycles\s*=\s*(\d+)\s*;') {
        $cyclesValue = [int]$matches[1]
    }
}

# 处理最后一个项
if ($currentItem -and $cyclesValue) {
    $results += [PSCustomObject]@{
        ItemName = $currentItem
        Cycles = $cyclesValue
    }
}

# 导出为标准CSV(若要生成示例中的纯文本格式,替换为下方注释的命令)
$results | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8

# 纯文本格式导出命令:
# $results | ForEach-Object { "$($_.ItemName), $($_.Cycles)" } | Out-File $outputPath -Encoding UTF8

使用说明

  1. 修改脚本中的路径为实际文件路径
  2. 运行脚本:打开PowerShell,执行.\ParseConfig.ps1
  3. 定期自动化:
    • 通过Windows任务计划创建定时任务,直接调用该脚本
    • 或在Power Automate中配置云流,通过本地网关触发脚本执行

二、Python脚本方案(适合学习,可集成VS2022)

Python语法简洁,适合文本解析场景,VS2022提供完善的Python开发环境,可边学边用。

脚本代码

import re

# 配置文件路径,替换为实际路径
config_path = r"C:\Your\Config\Path\ptube_config.txt"
# 输出文件路径,替换为实际路径
output_path = r"C:\Your\Output\Path\cycles_data.csv"

# 正则表达式匹配规则
item_pattern = re.compile(r'^(\w+)\s*{')
cycles_pattern = re.compile(r'^cycles\s*=\s*(\d+)\s*;')

current_item = None
cycles_value = None
results = []

# 读取并解析文件
with open(config_path, 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        # 跳过注释行
        if line.startswith('//'):
            continue
        # 匹配项名称
        item_match = item_pattern.match(line)
        if item_match:
            # 保存上一个带cycles的项
            if current_item and cycles_value:
                results.append(f"{current_item}, {cycles_value}")
            current_item = item_match.group(1)
            cycles_value = None
            continue
        # 匹配cycles值
        cycles_match = cycles_pattern.match(line)
        if cycles_match:
            cycles_value = cycles_match.group(1)

# 处理最后一个项
if current_item and cycles_value:
    results.append(f"{current_item}, {cycles_value}")

# 写入输出文件
with open(output_path, 'w', encoding='utf-8') as f:
    f.write('\n'.join(results))

使用说明

  1. 在VS2022中创建Python项目,粘贴代码并修改路径
  2. 直接运行脚本生成结果
  3. 定期运行:可将脚本打包为exe,通过Windows任务计划定时触发

三、Power Automate + Excel低代码方案(无需编程,适配Power Platform技能)

利用Power Automate的文本处理能力,结合Excel完成解析,完全适配你熟悉的Power Platform生态。

步骤:

  1. 上传配置文件到SharePoint文档库:将配置文件上传至指定库,方便Power Automate访问
  2. 创建Power Automate云流:
    • 触发条件:选择定时触发(如每日一次)或文件更新触发
    • 核心动作:
      1. 获取文件内容:读取配置文件的文本内容
      2. 拆分文本:按换行符\n拆分所有行
      3. 应用到每一个:遍历每一行
        • 跳过注释行:添加条件判断,若行以//开头则跳过
        • 匹配项名称:用正则表达式匹配动作,匹配规则^(\w+)\s*{,提取项名称并保存到变量CurrentItem
        • 匹配cycles值:用正则表达式匹配动作,匹配规则^cycles\s*=\s*(\d+)\s*;,提取数值并保存到变量CurrentCycles
        • 检测到新项时,若CurrentItem和CurrentCycles均不为空,将这对值添加到数组变量Results
      4. 循环结束后,将剩余的有效项值添加到Results
      5. 创建CSV表:将Results数组转换为CSV格式
      6. 创建文件:将CSV保存到SharePoint文档库或OneDrive
  3. 导入到目标系统:直接将CSV导入Excel,或在流中添加添加行到SharePoint列表动作,批量写入数据

四、SQL Server方案(适配SQL技能背景)

利用SQL Server的文本导入和字符串函数完成解析,适合熟悉SQL的场景。

步骤:

  1. 导入配置文件到临时表:
    • 使用SSMS的导入数据向导,将文本文件导入临时表#ConfigLines,每行作为一条记录
  2. 编写SQL查询解析数据:
WITH LineData AS (
    SELECT 
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS LineNum,
        LTRIM(RTRIM(LineContent)) AS LineContent
    FROM #ConfigLines
    WHERE LineContent NOT LIKE '//%' -- 过滤注释行
),
ItemBlocks AS (
    SELECT 
        LineNum AS StartLine,
        LEAD(LineNum) OVER (ORDER BY LineNum) - 1 AS EndLine,
        SUBSTRING(LineContent, 1, CHARINDEX(' ', LineContent) - 1) AS ItemName
    FROM LineData
    WHERE LineContent LIKE '%{'
),
CycleValues AS (
    SELECT 
        ib.ItemName,
        SUBSTRING(ld.LineContent, CHARINDEX('=', ld.LineContent) + 1, CHARINDEX(';', ld.LineContent) - CHARINDEX('=', ld.LineContent) - 1) AS Cycles
    FROM ItemBlocks ib
    JOIN LineData ld ON ld.LineNum BETWEEN ib.StartLine AND ib.EndLine
    WHERE ld.LineContent LIKE 'cycles=%'
)
SELECT ItemName, Cycles
FROM CycleValues
  1. 导出结果:右键查询结果集 -> 保存结果为 -> 选择CSV格式
  2. 定期运行:将导入和查询步骤封装为SQL作业,通过SQL Server代理定时执行

内容的提问来源于stack exchange,提问作者Griffin W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:57:01