gpt4 book ai didi

python - 如何在 Python 中拆分大型维基百科转储 .xml.bz2 文件?

转载 作者:数据小太阳 更新时间:2023-10-29 02:00:24 25 4
gpt4 key购买 nike

我正在尝试使用 Python 使用维基媒体转储文件 (.xml.bz2) 构建离线维基词典。我从 this 开始文章作为指导。它涉及多种语言,我想将所有步骤合并为一个 python 项目。我已经找到了该过程所需的几乎所有库。现在唯一的难题是有效地将大型 .xml.bz2 文件拆分为多个较小的文件,以便在搜索操作期间更快地进行解析。

我知道python中有bz2库,但它只提供压缩和解压操作。但我需要一些可以做类似 bz2recover 的东西从命令行执行,它将大文件分成许多较小的垃圾。

更重要的一点是拆分不应该拆分以<page>开头的页面内容结束</page>在压缩后的xml文档中。

是否有以前可用的库可以处理这种情况,或者代码必须从头开始编写?(任何大纲/伪代码都会有很大帮助)。

注意:我想让生成的包跨平台兼容,因此不能使用特定于操作系统的命令。

最佳答案

终于自己写了一个Python脚本:

import os
import bz2

def split_xml(filename):
''' The function gets the filename of wiktionary.xml.bz2 file as input and creates
smallers chunks of it in a the diretory chunks
'''
# Check and create chunk diretory
if not os.path.exists("chunks"):
os.mkdir("chunks")
# Counters
pagecount = 0
filecount = 1
#open chunkfile in write mode
chunkname = lambda filecount: os.path.join("chunks","chunk-"+str(filecount)+".xml.bz2")
chunkfile = bz2.BZ2File(chunkname(filecount), 'w')
# Read line by line
bzfile = bz2.BZ2File(filename)
for line in bzfile:
chunkfile.write(line)
# the </page> determines new wiki page
if '</page>' in line:
pagecount += 1
if pagecount > 1999:
#print chunkname() # For Debugging
chunkfile.close()
pagecount = 0 # RESET pagecount
filecount += 1 # increment filename
chunkfile = bz2.BZ2File(chunkname(filecount), 'w')
try:
chunkfile.close()
except:
print 'Files already close'

if __name__ == '__main__':
# When the script is self run
split_xml('wiki-files/tawiktionary-20110518-pages-articles.xml.bz2')

关于python - 如何在 Python 中拆分大型维基百科转储 .xml.bz2 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6184912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com