2015-10-29 81 views
0

我將4GB的Wiktionary XML數據轉儲分解爲更小的文件,沒有重疊,使用Python處理它並保存不同的頁面(...)。拆分文件大大增加了它的大小

相同的信息分散在不同的文件中,膨脹到18+ GB。

爲什麼會這樣呢?有沒有辦法避免這種情況?

import os 
import re 
import subprocess 

subprocess.call(['mkdir', 'WIKTIONARY_WORDS_DUMP']) 

# English Wiktionary (which noneless contains many foreign words!) 
f = open('enwiktionary-20151020-pages-articles.xml', 'r') 

page = False 
number = 1 
for i, l in enumerate(f): 

    if '<page>' in l: 
     word_file = open(os.path.join('WIKTIONARY_WORDS_DUMP', str(number)+'.xml'), 'a') 
     word_file.write(l) 
     page = True 
     number += 1 

    elif '</page>' in l: 
     word_file.write(l) 
     word_file.close() 
     page = False 

    elif page: 
     word_file.write(l) 


word_file.close() 
f.close() 
+0

正以不同的方式和/或不同的字符編碼序列化的新文件?這真是唯一的解釋。 (另外,我可能會建議不要拆分文件,而是考慮使用SAX解析器處理它?) – Tomalak

+0

不要這麼想。當我在wiktionary.xml和entry.xml上運行文件-bi時,都返回text/html; charset = utf-8 – zadrozny

+0

您正在以'a'(追加)模式打開小文件。如果在文件仍然存在的情況下再次運行此程序,則會將原始信息再次寫入該文件。 –

回答

1

較小的文件是否也保存爲XML,具有相同的標籤層次結構?如果是這樣,你一定會有一些標籤重複。

也就是說,如果你是這個文件分割:

<root> 
    <item>abc</item> 
    <item>def</item> 
    <item>ghi</item> 
</root> 

分爲三個單獨的文件:

<root> 
    <item>abc</abc> 
</root> 

<root> 
    <item>def</abc> 
</root> 

<root> 
    <item>ghi</abc> 
</root> 

<root>標籤在每個小的文件重複。

它會變得更糟,如果你的數據方案更復雜:

<root> 
    <level1> 
     <level2> 
      <level3> 
       <item>abc</item> 
      </level3> 
     </level2> 
    </level1> 
</root> 
+0

我正逐行遍歷文件並保存而不重複。打開生成的文件證實了這一點。 – zadrozny

+0

然後你必須做錯事。除非您向我們展示您的代碼,否則我們無法幫助您 –

+0

現在加入...... – zadrozny