搜索并替换枚举找到的字符串

时间:2014-01-31 08:40:41

标签: python perl shell text replace

我有一个由文章分隔的巨大文本文件(18Gb),每篇文章都有这样的标题:

<text id="1403" year="" url_source="http://www.adobe.de" error="0.008696">

问题是我应该为每篇文章都有不同的id,但是有一些重复的id,所以我需要做的是在文件中查找id并从1开始连续重新枚举它。我一直在环顾四周,但我找不到合适的解决方案,可能是因为我缺乏知识,我很感激你的建议

2 个答案:

答案 0 :(得分:1)

在python中: 如果它是有效的xml文件,则可以使用xml解析器,例如ElementTree

否则,迭代输入文件并写入输出文件:

new_id=1
with open('out_file','w') as out_f:
    with open('in_file','r') as in_f:
        for line in in_f:
            if line[:5] == '<text':
                newline = line.split(' ')
                newline[1] = "id=" + '"' + str(new_id) + '"'
                newline = ' '.join(newline)
                line = newline
                new_id += 1
            out_f.write(line)

请注意,这假设每个<text ...标记都从行的开头开始。如果不是这种情况,你必须稍微修改一下。

答案 1 :(得分:1)

假设id始终是每个文本标记的第一个属性,在Perl中:

perl -M5.010 -wpi.bak -e'our $article; s/<text id="\K[0-9]+/++$article/ge' hugetextfile

请注意,它会使用添加的.bak重命名您的文件并通读它,写出原始名称,因此您需要18Gb可用空间。