gzip是Python中的一个文件

gzip是Python中的一个文件,python,gzip,subprocess,Python,Gzip,Subprocess,我想用Python编写一个gzip文件。我正在尝试使用subcss.check_call(),但它一直失败,错误为“OSError:[Errno 2]没有这样的文件或目录”。我在这里尝试的东西有问题吗?有没有比使用subprocess.check\u调用更好的方法来gzip文件 from subprocess import check_call def gZipFile(fullFilePath) check_call('gzip ' + fullFilePath) 谢谢 试试这个:

我想用Python编写一个gzip文件。我正在尝试使用subcss.check_call(),但它一直失败,错误为“OSError:[Errno 2]没有这样的文件或目录”。我在这里尝试的东西有问题吗?有没有比使用subprocess.check\u调用更好的方法来gzip文件

from subprocess import check_call

def gZipFile(fullFilePath)
    check_call('gzip ' + fullFilePath)
谢谢

试试这个:

check_call(['gzip', fullFilePath])
根据您对这些文件的数据所做的操作,Skirmantas的链接也可能会有所帮助。请注意页面底部附近的示例。如果您不需要访问数据,或者Python代码中没有数据,那么执行gzip可能是最干净的方法,这样您就不必用Python处理数据。

有一个模块。用法:

如何创建压缩GZIP文件的示例:

import gzip
content = b"Lots of content here"
f = gzip.open('/home/joe/file.txt.gz', 'wb')
f.write(content)
f.close()
import gzip
content = "Lots of content here"
f = gzip.open('file.txt.gz', 'wb')
f.write(content)
f.close()
如何GZIP压缩现有文件的示例:

import gzip
f_in = open('/home/joe/file.txt')
f_out = gzip.open('/home/joe/file.txt.gz', 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()
import gzip
f_in = open('file.txt', 'rb')
f_out = gzip.open('file.txt.gz', 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()
编辑:

在Python>=2.7中使用
显然更简洁易读,因此我的第二个代码片段应该如下所示:

import gzip
with open('/home/joe/file.txt', 'rb') as f_in, gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
    f_out.writelines(f_in)
使用模块:



您的错误:
OSError:[Errno 2]没有这样的文件或目录“
告诉您文件
fullFilePath
不存在。如果您仍然需要这样做,请确保您的系统中存在该文件,并且您使用的是绝对路径而不是相对路径。

以二进制(
rb
)模式读取原始文件,然后使用创建gzip文件,您可以使用以下方法像普通文件一样写入该文件:

更简短的是,您可以将
语句组合在一行:

with open('path/to/file', 'rb') as src, gzip.open('path/to/file.gz', 'wb') as dst:
    dst.writelines(src)

关于这一点的文档实际上非常简单

如何读取压缩文件的示例:

import gzip
f = gzip.open('file.txt.gz', 'rb')
file_content = f.read()
f.close()
如何创建压缩GZIP文件的示例:

import gzip
content = b"Lots of content here"
f = gzip.open('/home/joe/file.txt.gz', 'wb')
f.write(content)
f.close()
import gzip
content = "Lots of content here"
f = gzip.open('file.txt.gz', 'wb')
f.write(content)
f.close()
如何GZIP压缩现有文件的示例:

import gzip
f_in = open('/home/joe/file.txt')
f_out = gzip.open('/home/joe/file.txt.gz', 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()
import gzip
f_in = open('file.txt', 'rb')
f_out = gzip.open('file.txt.gz', 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()

这就是全部文档

import gzip

def gzip_file(src_path, dst_path):
    with open(src_path, 'rb') as src, gzip.open(dst_path, 'wb') as dst:
        for chunk in iter(lambda: src.read(4096), b""):
            dst.write(chunk)
Gzip现有文件 创建新的gzip文件: 请注意,
内容
已转换为字节

如果您没有像上面的示例那样将内容创建为字符串/字节文本,那么另一种方法是

import gzip
# get content as a string from somewhere else in the code
with gzip.open("file.txt.gz", "wb") as f:
    f.write(content.encode("utf-8"))

有关其他编码方法的讨论,请参阅。

为什么不?相关:要从目录
/dir/path
创建gzip tarball
archive.tar.gz
,可以使用
shutil.make_archive('archive','gztar','/dir/path'))
感谢大家的快速回复。这里的每个人都在建议gzip。我也尝试过。这是一种更好的方法吗?我不使用它的原因是它保留了原始文件的原样。因此,我最终使用了两个版本-常规和gzip文件。不过我正在访问文件的数据。@retracile,你的修复程序成功了,非常感谢。我仍然在想我是否应该使用subprocess或gzip。@Rinks最简单的方法是:gzip完成后,调用
os.unlink(original_file_Name)
删除制作gzip的原始文件。请参阅我的编辑。@Rinks:我之所以不使用它,是因为它保留了原始文件的原样-所以为什么不在以后删除该文件?再次感谢。我当然可以稍后删除该文件。我将测试这两种方法-gzip和check_调用几天,并最终确定一个。第二个版本是否会像gzip命令那样用gzip替换原始文件?@Benoît:由于输出文件的名称与正在读取的文件的名称不同,很明显它没有这样做。这样做需要将压缩的数据临时存储在其他地方,直到原始文件中的所有数据都被压缩。使用gzip,输出文件名与输入文件名不同。在创建输出文件之后,它仍然会删除输入文件。我只是问Pythongzip模块是否做了同样的事情。在读取模式下打开的文件只是正常地从中读取。gzip模块无法知道数据来自何处,也无法执行诸如删除文件之类的操作。用于在以后删除该文件。或者只需使用
check\u call(['gzip',in\u path])
,压缩速度更快,删除文件。我建议更正:content=b“这里有很多内容”好吧,idk如果“clean”是正确的词,但肯定是最快的方式,而且是你这边需要最少代码的那一个。我不知道ExitStack
…很有趣!我觉得这值得更多的投票,因为第一个例子来自官方文件。