我有一个巨大的文本文件(18GB)的物品分开,每篇文章都有一个标题是这样的:搜索和替换枚举发现串
<text id="1403" year="" url_source="http://www.adobe.de" error="0.008696">
的问题是,我应该有不同的ID为每篇文章,但有一些重复的,所以我需要做的是沿文件查找ID并从1开始连续重新枚举它们。我一直在四处查看,但我还没有找到合适的解决方案,可能是因为我的缺乏知识,我会很感激你的建议
我有一个巨大的文本文件(18GB)的物品分开,每篇文章都有一个标题是这样的:搜索和替换枚举发现串
<text id="1403" year="" url_source="http://www.adobe.de" error="0.008696">
的问题是,我应该有不同的ID为每篇文章,但有一些重复的,所以我需要做的是沿文件查找ID并从1开始连续重新枚举它们。我一直在四处查看,但我还没有找到合适的解决方案,可能是因为我的缺乏知识,我会很感激你的建议
假设ID始终是每一个文本标签的第一个属性,在Perl:
perl -M5.010 -wpi.bak -e'our $article; s/<text id="\K[0-9]+/++$article/ge' hugetextfile
注意,它会与添加.BAK重命名文件,并通过它读,写出原来的名字,所以你需要18Gb的可用空间。
在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 ...
标签开始在该行的开头。如果不是这种情况,你必须修改一下。
非常感谢,它完美的作品 –
是整个文件的XML吗? –
内容是这样的等等等等等等..... 等等等等等等等..... –
你能告诉我们你的文件多一点吗? – Toto