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

请求协助:XML文件中channel id值替换为从1000开始的递增数字

Hey there! Let's solve this problem of replacing those channel IDs with incrementing numbers. I'll give you two solid options—one using Python (great for reliability, especially with XML) and a quick command-line approach with awk if you prefer that.


Option 1: Python Script (Robust for XML)

This method works even if your XML has slight formatting quirks (as long as the id attribute is on the same line as the opening tag). It's also easy to adapt for your second file with different tags.

Here's a reusable function you can use:

import re

def replace_incrementing_ids(input_file, output_file, tag_prefix, start_number=1000):
    # We use a list for the counter so we can modify it inside the nested function
    counter = [start_number]
    
    def swap_id(match):
        current_num = str(counter[0])
        counter[0] += 1
        # Re-build the tag with the new ID
        return f'{match.group(1)}id="{current_num}"'
    
    # Create a regex pattern that matches the tag start and its id attribute
    pattern = re.compile(r'(' + re.escape(tag_prefix) + r')id="[^"]+"')
    
    # Process the file
    with open(input_file, 'r') as infile, open(output_file, 'w') as outfile:
        content = infile.read()
        updated_content = pattern.sub(swap_id, content)
        outfile.write(updated_content)

# For your first file (channel tags)
replace_incrementing_ids('original_channels.xml', 'updated_channels.xml', '<channel ')

# For your second file—just change the tag_prefix to match its tag (e.g., '<program ')
replace_incrementing_ids('original_other.xml', 'updated_other.xml', '<program ')

Option 2: Awk Command (Quick & Dirty)

If you're comfortable with the command line and your XML tags are each on a single line, this is super fast.

For your first file:

awk -v start=1000 '/<channel id="/ {sub(/id="[^"]+"/, "id=\"" start "\""); start++} 1' original_channels.xml > updated_channels.xml

For your second file, just swap out the tag pattern (replace <program id="/ with whatever your second file uses):

awk -v start=1000 '/<program id="/ {sub(/id="[^"]+"/, "id=\"" start "\""); start++} 1' original_other.xml > updated_other.xml

Important Notes:

  • Both solutions start numbering at 1000 and go up by 1 for each matching tag.
  • If your XML has tags split across multiple lines, the awk method will miss them—stick with the Python script in that case.
  • Always make backups of your original files before running these changes! Better safe than sorry.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:41:49