使用python读取.gz文件的内容

时间:2015-02-09 23:11:33

标签: gzip

我是Python新手,遇到了读取.gz文件内容的问题:

我有一个充满.gz文件的文件夹,我使用私有API以编程方式提取。每个.gz文件的内容都是一个.xml文件,因此我需要遍历dir并提取它们。

问题是,当我以编程方式将这些.gz文件提取到各自的.xml版本中时...文件创建没有错误,当我打开一个文件(使用TextWrangler)时,它看起来像一个普通的.xml文件,但不是当我在十六进制编辑器中查看它。另外,当我以编程方式打开.xml文件并打印它的内容时,它会显示为一堆(二进制?)混乱的文本。

考虑到上述情况,如果我手动提取其中一个文件(即:使用OSX,而​​不是Python),则可以在十六进制编辑器中查看该文件,如我所料。

这是我的代码片段(相应的导入未显示,但它们是glob和gzip):

searchpattern = siteid + "_" + resource + "_*.gz"
for infile in glob.glob(workingDir + searchpattern):
    print infile

    #read the zipped contents  (https://docs.python.org/2/library/gzip.html)
    f = gzip.open(infile, 'rb')
    file_content = f.read()
    file_content = str(file_content) #This was an attempt to fix
    print file_content #  This shows a bunch of mumbo jumbo

    #write the contents we just read to a new file (uncompressed)
    newfilename = infile[0:-3] # the filename without the ".gz"
    newfilename = newfilename + ".xml"
    fnew = open(newfilename, 'w+b')
    fnew.write(str(file_content))
    fnew.close()

    #delete the .gz version of the file
    #os.remove(infile)

2 个答案:

答案 0 :(得分:0)

如果我针对XML运行此操作,我就不会对该程序产生任何问题。

如果我压缩和XML并使用此程序提取它并将原始文件与此程序的输出区分开来,我就没有差异。

这个程序确实添加了额外的" .xml"扩展

答案 1 :(得分:0)

所以这对我来说是一个愚蠢的错误,但我会将此作为后续行为发布给其他犯同样错误的人。

问题是我在我的程序中已经压缩了之前已压缩的内容。所以考虑到这一点,我在这个帖子上的代码片段没有任何问题。我的代码也没有用技术创建.gz文件。如下所示。正常打开文件,而不是使用程序中早期的gzip库就可以了。

    #Download and write the contents of each response to a .gz file
    if limitCounter < limit or int(limit) == 0:
        print _name + "  " + scopeStartDate + " through " + scopeEndDate + " at " + href
        file = api.get(href)
        gz_file_content = file.content
        #gz_file = gzip.open(workingDir + _name, "wb") # This breaks the program later
        gz_file = open(workingDir + _name, 'wb') # This works.
        gz_file.write(gz_file_content)
        gz_file.close()