我有一个由文章分隔的巨大文本文件(18Gb),每篇文章都有这样的标题:
<text id="1403" year="" url_source="http://www.adobe.de" error="0.008696">
问题是我应该为每篇文章都有不同的id,但是有一些重复的id,所以我需要做的是在文件中查找id并从1开始连续重新枚举它。我一直在环顾四周,但我找不到合适的解决方案,可能是因为我缺乏知识,我很感激你的建议
答案 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可用空间。