我有一個巨大的文本文件(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