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

2024-01-01

我正在尝试使用 Python 使用 wikimedia 转储文件 (.xml.bz2) 构建离线维基词典。我开始于this http://users.softlab.ece.ntua.gr/~ttsiod/buildWikipediaOffline.html文章作为指导。它涉及多种语言,我想将所有步骤合并为一个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')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中分割大型维基百科转储.xml.bz2文件? 的相关文章

  • 如何从另一个xml文件动态更新xml文件?

    我想从另一个 xml 文件更新 xml 文件 我使用了一个 xml 文件 如下所示 one xml
  • 在Python3.6中调用C#代码

    由于完全不了解 C 编码 我希望在我的 python 代码中调用 C 函数 我知道有很多关于同一问题的问答 但由于一些奇怪的原因 我无法从示例 python 模块导入简单的 c 类库 以下是我所做的事情 C 类库设置 我使用的是 VS 20
  • on_delete=models.PROTECT 和 on_delete=models.CASCADE 在 Django 模型上有什么作用?

    我对 Django 很熟悉 但最近注意到有一个on delete models CASCADE and on delete models PROTECT模型的选项 on delete models CASCADE and on delete
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • Paramiko - 使用私钥连接 - 不是有效的 OPENSSH 私钥/公钥文件

    我正在尝试找到解决方案 但无法理解我做错了什么 在我的 Linux 服务器上 我运行了以下命令 ssh keygen t rsa 这产生了一个id rsa and id rsa pub file 然后我将它们复制到本地并尝试运行以下代码 s
  • Python igraph:从图中删除顶点

    我正在使用安然电子邮件数据集 并尝试删除没有 enron com 的电子邮件地址 即我只想拥有安然电子邮件 当我尝试删除那些没有 enron com 的地址时 一些电子邮件由于某些原因被跳过 下面显示了一个小图 其中顶点是电子邮件地址 这是
  • 使用php将文本文件转换为xml?

    data txt ha15rs 250 home2 gif 2 ha36gs 150 home3 gif 1 ha27se 300 home4 gif 4 ha4678 200 home5 gif 5 我想使用 php 使用 simplex
  • 无法打开 Python。错误 0xc000007b

    我最近一直在学习 Python 3 我在我的上网本 32 位 Windows 7 上创建简单的小程序没有任何问题 当我将它安装在我的上网本上时 我没有遇到任何问题 但现在我已经开始使用它了 我想将它安装在我的台式机上 并且我有一个 我的桌面
  • 如何在 Python 中将彩色输出打印到终端?

    是否有与 Perl 等效的 Python 语言 print color red print
  • matplotlib matshow 标签

    我一个月前开始使用 matplotlib 所以我仍在学习 我正在尝试用 matshow 制作热图 我的代码如下 data numpy array a reshape 4 4 cax ax matshow data interpolation
  • Python 中的 @staticmethod 与 @classmethod

    方法和方法有什么区别装饰的 https peps python org pep 0318 with staticmethod http docs python org library functions html staticmethod和
  • 如何列出 python PDB 中的当前行?

    在 perl 调试器中 如果重复列出离开当前行的代码段 可以通过输入命令返回到当前行 点 我无法使用 python PDB 模块找到任何类似的东西 如果我list如果我自己离开当前行并想再次查看它 似乎我必须记住当前正在执行的行号 对我来说
  • 将一个列表的元素除以另一个列表的元素

    我有两个清单 比如说 a 10 20 30 40 50 60 b 30 70 110 正如你所看到的 列表 b 由一个列表的元素总和组成 其中 window 2 b 0 a 0 a 1 10 20 30 etc 如何获得另一个列表 该列表由
  • 导入错误:没有名为 google.auth 的模块

    当我尝试导入时firebase admin in python 2 7我收到错误 导入错误 没有名为 google auth 的模块 这是Docker文件 https github com ammaratef45 Attendance bl
  • Python组合目录中的所有csv文件并按日期时间排序

    我有 2 年的每日数据分成每月文件 我想将所有这些数据合并到一个按日期和时间排序的文件中 我正在使用的代码组合了所有文件 但不按顺序 我正在使用的代码 import pandas as pd import glob os import cs
  • 为什么我们应该在 def __init__(self, n) -> None: 中使用 -> ?

    我们为什么要使用 gt in def init self n gt None 我读了以下摘录来自 PEP 484 https www python org dev peps pep 0484 the meaning of annotatio
  • 全局变量是 None 而不是实例 - Python

    我正在处理Python 中的全局变量 代码应该可以正常工作 但是有一个问题 我必须使用全局变量作为类的实例Back 当我运行应用程序时 它说 back is None 这应该不是真的 因为第二行setup 功能 back Back Back
  • 如何禁止 celery 中的 pickle 序列化

    Celery 默认使用 pickle 作为任务的序列化方法 如中所述FAQ http ask github com celery faq html isn t using pickle a security concern 这代表一个安全漏
  • 使用 Python 生成类似于 Messenger 或 kik 代码的圆形二维码

    我可以使用 Python 生成圆形 QR 码 就像 Facebook Messenger 或 kik 使用的那样吗 我访问了很多网站 但找不到这种类型的二维码 默认情况下 Python 生成方形 QR 码 但在我的项目中我想要圆形 QR 码

随机推荐

  • 需要使用“显示更多”按钮从网页中抓取信息,有什么建议吗?

    目前出于教育原因正在开发 爬虫 一切工作正常 我可以提取 url 和信息并将其保存在 json 文件中 一切都很好 除了 该页面有一个 加载更多 按钮 我需要与之交互 以便爬虫继续寻找更多网址 这就是我可以利用你们这些出色的男孩和女孩的地方
  • 访问Python数组中的元素

    这是我第一次处理多维数组 并且在访问元素时遇到问题 我正在尝试获取图片的红色像素 但仅获取数组中的前 8 个元素 这是代码 import Image import numpy as np im Image open C Users Jone
  • iTunes 歌曲标题在 Cocoa 中滚动

    我进行了广泛的搜索 但我无法找到任何有关如何在 Cocoa 中文本太大的情况下实现与 iTunes 歌曲标题滚动类似的效果的信息 我尝试在 NSTextField 上设置边界但无济于事 我尝试过使用 NSTextView 以及使用 NSSc
  • Facebook SDK iOS 邀请用户,无需 FBWebDialogs

    我想从 Facebook 获取不是我的应用程序用户的朋友列表 并能够邀请他们 Using FBWebDialogs我可以选择用户 但我想知道 foursquare 是如何做到的 截屏 有一个选项frictionless requests 在
  • 仅在某些服务器上出现错误“SQL 语句的某些部分嵌套太深”

    我们将实体框架更新到 6 1 3 从那时起 在某些服务器上 不幸的是运行单元测试的服务器 我们现在得到了异常 System Data SqlClient SqlException SQL 语句的某些部分嵌套得太深 重写查询或将其分解为更小的
  • 使用 SMO 获取表默认值的创建脚本

    我正在尝试为我正在使用的本地数据库创建一个数据库脚本编写工具 我已经能够为表 主键 索引和外键生成创建脚本 但我找不到任何方法为表默认值生成创建脚本 对于索引来说 很简单 foreach Index index in table Index
  • 无条件地设置一个 unsigned char 的一位与另一个 unsigned char 的另一位

    我使用按位方式来打开和关闭位 unsigned char myChar some value myChar 0x01 lt lt N turn on the N th bit myChar 0x01 lt lt N turn off the
  • 无法在 XNA4 中加载 spriteFont

    我正在闲逛 XNA 现在已经到了需要加载字体的部分了 很简单吧 Font1 Content Load
  • 如何使用同一行中定义的上下文设置默认值?

    我正在创建一个不和谐的机器人 我正在尝试使其如果成员说出没有提及用户的命令 则默认为他们自己 它不能内联工作 我需要在同一行中使用 arg 我尝试将默认值放在同一行中 但我需要 ctx 并且 ctx 是在同一行中定义的 因此它不起作用 bo
  • 核心情节 mouseMoved

    我想在 a 中显示 注释 值散点图 https code google com p core plot source browse examples CorePlotGallery src plots SimpleScatterPlot m
  • Unity 2.0 中的 XML 配置更改

    我们刚刚将一个项目从 prism 2 0 升级到 prism 4 0 并且 Unity 遇到了问题 显然 unity 2 0 容器 XML 配置发生了一些变化 因为我们得到了第一个错误 无法识别的元素 typeConfig 这是代码 应用程
  • 使用 boost iostream 套接字读写文件

    我正在尝试使用 boost iostream 套接字发送和接收文件 读取文件内容然后发送到流的最有效方法是什么 以及如何在服务器端读取这些内容并写入文件 Send boost asio io service svc using boost
  • 错误:无法解析模块“babel-loader”

    当我推送到 heroku 时 我尝试在 package json 中的安装后脚本上运行 webpack 但出现以下错误 ERROR in Entry module not found Error Cannot resolve module
  • 在自定义视图上启用对讲时,不会调用 onTouchEvent

    我正在为密码字段实现自定义键盘 通过自定义视图 并尝试添加辅助功能 因此当用户单击视图时 它应该读出所选值 在我的自定义键盘中 我需要来自的坐标MotionEvent因此视图可以计算按下的绘图 值 但在这种情况下 当 Talkback 启用
  • Celery 中每个任务的分叉流程

    我目前使用 Python 的 C 扩展库 但它似乎存在内存泄漏 在我的上运行的任务celeryd使用这个 C 扩展库做一些事情 并且celeryd大约一个小时后会消耗大量内存 由于多种原因 我无法修补这个 C 扩展库 但我想为 Celery
  • 在 macOS High Sierra 上创建 APFS RAM 磁盘

    通常创建 RAM 磁盘可以使用以下命令 hdid nomount ram
  • Android WebView 上的 setOnClickListener 不响应

    我有 Android ListView 包含 TextView 来显示列表中的数据 我添加将其更改为 Webview 之后一切看起来都很好 除了 setOnClickListener 不再响应 我读过有关Webview的内容 发现不支持se
  • 在 jenkins 结帐期间排除目录

    我的 trunk 下有 20 个目录 trunk a1 trunk a2 trun a3 trunk a20 如何在 Jenkins 签出期间排除 不包括 某些 任意目录 例如我想要trunk下的所有目录除了 主干 a3 b1这个怎么做 我
  • 如果主 SQL 中使用别名,则子查询函数会调用两次

    我试图了解 Oracle 如何处理 SQL 以研究优化复杂 SQL 的方法 考虑下面的测试函数 CREATE OR REPLACE FUNCTION FCN SLOW RETURN NUMBER IS BEGIN DBMS LOCK SLE
  • 如何在Python中分割大型维基百科转储.xml.bz2文件?

    我正在尝试使用 Python 使用 wikimedia 转储文件 xml bz2 构建离线维基词典 我开始于this http users softlab ece ntua gr ttsiod buildWikipediaOffline h