问题标签 [bz2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python:忽略 XML 文件中的 EOF
我目前正在从事一个项目,该项目涉及从 Wikipedia 转储中获取文章标题。可下载的文件是 .bz2 格式,包含一个 XML 文件,如果我要解压缩它,它的大小约为 80GB。
我可以用 Python 打开并阅读前几行,但我的脚本在 43 行后停止阅读。之后,第一篇文章页面开始。我假设页面之间有一个EOF。
有没有办法忽略它并继续阅读?我真的不想解压它,也不想从外部更改文件。
我的代码看起来与此类似:
python - Python bz2 readlines slow in byte-mode
I have a bz2-compressed log file with a lot of lines. Every line has to undergo a small analysis which is of no importance here.
I started by reading the lines in text mode like:
(The analysis happens in the list comprehension.) prun gives:
I thought I might be better off, doing this in byte mode.
As it turns out, this is much worse performance-wise than my first solution. prun now gives:
Does anyone know what is the problem here? I suspected the byte mode to be much more "machine-like" and therefore faster. But it isn't.
python - 加快读取压缩 bz2 文件('rb' 模式)
我有一个超过 10GB 的 BZ2 文件。我想在不将其解压缩为临时文件的情况下阅读它(它将超过 50GB)。
使用这种方法:
我每秒只能读取 ~ 250k 行。在一个类似的文件上,首先解压缩,我每秒得到大约 3M 行,即 x10 因子:
我认为这不仅是由于固有的解压 CPU 时间(因为解压到临时文件的总时间 + 读取为未压缩文件的总时间远小于此处描述的方法),还可能是由于缺乏缓冲或其他原因。还有其他更快的 Python 实现bz2.open
吗?
如何以二进制模式加速 BZ2 文件的读取并循环“行”?(由 分隔\n
)
注意:目前time to decompress test.bz2 into test.tmp + time to iterate over lines of test.tmp
远小于time to iterate over lines of bz2.open('test.bz2')
,这可能不应该是这种情况。
链接主题:https ://discuss.python.org/t/non-optimal-bz2-reading-speed/6869
python - 资源有限的 Python 多处理
问题陈述
我目前正在构建一个包含三个任务的交换刮板,每个任务都独立运行process
:
- #1:接收实时网络提要:非常快的数据进入,立即放入
multiprocessing
队列并继续。 - #2:使用队列数据并优化:使用我编写的一些逻辑来使用和优化它。慢但不会太慢,当数据进入慢时最终赶上并清除队列。
- #3:使用压缩提要
bz2
并上传到我的 s3 存储桶:每小时,我压缩优化的数据(以进一步减小文件大小),然后上传到我的 s3 存储桶。这在我的机器上大约需要 10-20 秒。
我遇到的问题是这些任务中的每一个都需要自己的并行process
。生产者 (#1) 无法进行优化 (#2),否则它会停止提要连接,并且网站会因为线程 #1 没有响应而终止我的套接字。上传器(#3)不能和任务#2在同一个进程上运行,否则我会填满队列太多,我永远赶不上。我试过这个:不起作用。
这个刮刀在我的本地机器上工作得很好,每个任务都有自己的进程。但是当它部署在服务器上时,我真的不想在三核机器上花很多钱。我发现 Digital Ocean 的 4vCPU 选项最便宜,每月 40 美元。但我想知道是否有比购买 4 核更好的方法。
需要注意的一些事项:在我的 16 英寸 MBP 上,任务 #1 使用 99% 的 CPU,任务 #2 使用 20-30% 的 CPU,任务 #3 一直休眠到整点,所以它主要使用 0.5-1%中央处理器。
问题:
如果我在 2 核机器上运行三个进程,这实际上与运行两个进程相同吗?我知道这取决于系统调度,但这是否意味着它将在压缩时停止,或者继续移动直到压缩结束?启动(并支付)一个每小时只使用一次的全新核心似乎真的很浪费。但是这个每小时的任务让整个队列停滞了太多,我不知道如何解决这个问题。
无论如何我可以在同一个进程/核心上压缩文件时继续 Task#2吗?
如果我运行一个 bash 脚本来进行压缩,那还会停止软件吗?我的电脑是 6 核的,所以我无法真正在本地测试服务器的约束
有比 DigitalOcean 更便宜的替代品吗?老实说,我对 AWS 感到害怕,因为我听说过人们因意外使用而收到 1,000 美元账单的恐怖故事。我宁愿像 DigitalOcean 这样更可预测的东西
我试过的
如前所述,我尝试在同一进程中组合 Task#2 和 Task#3。一旦压缩开始,它就会停止。压缩是同步的,并使用此线程中的代码完成。找不到异步 bz2 压缩,但我不确定这是否有助于不停止 Task#2。
PS:我真的尽量避免带着这样的开放性问题来 StackOverflow,因为我知道这些会得到不好的反馈,但是当我对云不太了解时,另一种方法是尝试并投入大量时间和金钱老实说计算。我更喜欢一些专家的意见
python - Pycharm 环境 Pandas/BZ2 的问题
在尝试在 Pycharm 中导入和运行 pandas 时,出现以下错误:
我尝试升级熊猫并恢复到版本 1.0.1 无济于事。我还在需求文件(pandas==1.1.5)中指定了在 google collab 上为我工作的确切需求包
我也试过安装 bzip2 https://www.sourceware.org/bzip2/downloads.html但它不能解决问题。
我在这里发现了一个类似的问题,否则没有解决方案:Python3.7.4 - Error while importing pandas library
python - 如何*正确*使用 bz2 和 python 压缩和解压缩文本文件
所以我有这个系统,现在使用 bz2 压缩来抓取和压缩文件。这样做的方式是使用几个月前我在 SO 上找到的以下代码块:
让我们假设为了这篇文章的目的,文件名始终file.XXXX
是XXXX
相关扩展名的位置。我们从.txt
现在,要解压它,我总是使用我称为 Keka 的解压软件来工作,该软件将.tar.bz2
文件解压缩为.tar
,然后我再次通过 Keka 运行它以获得一个“无扩展”文件,然后.txt
我在mac 然后就可以了。
现在,要以编程方式进行解压缩,我尝试了一些方法。我已经尝试过这篇文章中的内容和这篇文章中的代码。我试过使用 BZ2Decompressor 和 BZ2File 和一切。我只是似乎遗漏了一些东西,我不确定它是什么。
这是我到目前为止所拥有的,我想知道这段代码有什么问题:
此代码由于“ tarfile.ReadError: truncated header
”问题而崩溃。我认为第一个上下文管理器输出一个二进制文本文件,我尝试对其进行解码,但也失败了。我在这里想念什么,我觉得自己像个菜鸟。
如果您希望使用最少的可运行代码来复制它,请添加以下内容以创建一个虚拟文件:
python - Python 3 bz2 大文件和进度
我正在实现一个工具,它可以解析大量以 bz2 格式压缩的 248GB 文件。平均压缩因子为 0.04,因此事先将它们解压缩到超过 6 TB 是完全不可能的。
内容文件的每一行都是一个完整的 JSON 记录,所以我使用 bz2 模块读取文件,open
然后使用for line in bz2file
套索,它工作得很好。问题是我不知道如何显示任何进度度量,因为我不知道我读取了多少压缩字节,也不知道每个文件中有多少记录。文件很大。有些高达 24 GB。
你会如何处理这个问题?
python - Python bz2 在读取整个文件之前返回 EOFerror
我正在尝试从 Zenodo 中的压缩文件中延迟加载项目。我的目标是迭代地产生项目而不将文件存储在我的计算机中。我的问题是在读取第一个非空行后立即发生 EOFerror。我该如何克服这个问题?
这是我的代码:
我得到的错误如下:
要运行代码,您需要一个 Zenodo 访问令牌,您需要一个帐户。登录后,您可以在此处创建令牌:https ://zenodo.org/account/settings/applications/tokens/new/
python - 在 jupyter 中解压的值太多(预期为 2)
我使用压缩的 pickle 使用以下代码保存 sklearn gridsearch 的结果。
然后我使用下面的代码来获取搜索对象。
当我在终端的虚拟环境中运行时,pickle 加载有效,但如果我在 jupyter 实验室中运行代码,它会报告以下错误。我检查了泡菜的版本。虚拟环境和 jupyter 实验室都使用 pickle 4.0。
顺便说一句,我也尝试使用 .pickle 文件而不是 bz2。这个问题仍然存在。任何意见和建议将不胜感激。
python - 下载bz2,读取内存中的压缩文件(避免内存溢出)
正如标题所说,我正在下载一个 bz2 文件,里面有一个文件夹和很多文本文件......
我的第一个版本是在内存中解压的,但解压后虽然只有90mbs,但它有60个文件,每个文件750mb....电脑坏了!显然无法处理像 40gb 的 ram XD)
所以,问题是它们太大了,无法同时将所有内容保存在内存中......所以我正在使用这段代码,但它很糟糕(太慢了):
有没有一种方法可以在不将其转储到磁盘的情况下做到这一点......并且一次只能从 .bz2 解压缩和读取一个文件?
非常感谢您提前抽出时间,我希望有人知道如何帮助我...