【发布时间】:2020-06-21 02:04:52
【问题描述】:
我有一个 70GB 的 .gz 文件,我正在尝试解压缩并保存到其他目录,但到目前为止没有成功。
以下是我尝试过的一些事情:
import gzip
f = gzip.open('/directory1/file.txt.gz', 'rb')
decompressed_file = gzip.GzipFile(fileobj=f)
with open('/directory2/file.txt', 'wb') as s:
s.write(decompressed_file.read())
s.close
当我运行上述程序时,'/directory2/file.txt' 被创建,但文件为空,终端终止进程。
import subprocess
subprocess.run(['zcat', '/directory1/file.txt.gz', '>', '/directory2/file.txt'])
这个 zcat 命令在终端中执行时运行良好,但在 Python 中运行时,我正在解压缩的文件的全部内容都会打印到控制台。这显然会显着减慢解压缩速度。我正在运行这些命令的远程服务器有一个时间限制,它将在进程完成之前结束。
subprocess.run(['zcat', '/directory1/file.txt.gz', '>', '/directory2/file.txt'], stdout = subprocess.PIPE)
当我运行上面的,我得到这个错误:
File "/usr/lib64/python3.6/subprocess.py", line 425, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/usr/lib64/python3.6/subprocess.py", line 850, in communicate
stdout = self.stdout.read()
OSError: [Errno 14] Bad address
我做错了什么,或者完成我想做的事情的正确方法是什么?感觉解压 .gz 文件并将其保存到不同的目录应该是微不足道的,但到目前为止我还没有运气。
【问题讨论】:
-
"read" 可以采用大小参数。您需要一个循环来读取文件的合理部分,写入它,重复。当“读取”返回空字节对象时停止循环。
标签: python subprocess gzip