2015-10-29 4 views
0

Я разбиваю 4-х гигабайтный файл данных из Викисловаря XML на небольшие файлы, не накладываясь, обрабатывая его с помощью Python и сохраняя отдельные страницы (...).Разделение файла резко увеличивает его размер.

Такая же информация, разделенная на разные файлы, раздувается до 18+ ГБ.

Почему это может быть? И есть ли способ избежать этого?

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

Не думайте так. Когда я запускаю файл -bi на wiktionary.xml и на entry.xml возвращают текст/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