python直接按行读取gz压缩文件中的文本文件的数据

之前写了一个从日志文件中(txt文件)提取特定的日志,写入mysql数据库的脚本,由于日志太大,维护人员把日志打包压缩成了tar.gz格式。

之前txt文件单个文件超过2G,把单个txt文件打包压缩成一个tar.gz文件了。所以我的python脚本也需要修改。(服务器centos6.3)

本来想过一个方案,就是把tar.gz解压出来,然后再读取,读取完成后再把这个解压出来的文件删除掉,这个方案不是不可行,但不是很好,一个大文件的解压缩比较慢,另一个解压后比较占服务器磁盘。


后来发现另一个方案,直接按行读取gz压缩文件中的文本文件的数据。


这个是我windows下的测试脚本:

import os
import os.path
import gzip


def read_gz_file(path):
    if os.path.exists(path):
        with gzip.open(path, 'r') as pf:
            for line in pf:
                yield line
    else:
        print('the path [{}] is not exist!'.format(path))

con = read_gz_file('c:\\1.gz')
if getattr(con, '__iter__', None):
    for line in con:
        print(line)

strZipFile = 'c:\\1.gz'
strDstFile = 'c:\\2'
file   =   gzip.GzipFile(strZipFile,   "r")
outFile   =   open(strDstFile   , "w ")
outFile.write(file.read())
outFile.close()


附件是1.gz文件



运行结果:

sdfasfda


asdfasdf






asdfasdf


adsfadf



  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: 你可以使用Pythongzip库来将数据保存为gz文件。下面是一个示例代码: ```python import gzip import pickle # 假设你有一个名为data的Python对象 data = [1, 2, 3, 4, 5] # 将数据保存到gz文件 with gzip.open('data.gz', 'wb') as f: pickle.dump(data, f) ``` 这段代码将Python对象`data`保存为名为`data.gz`的gz文件。使用`gzip.open()`函数打开文件,并将其模式设置为`wb`以进行写入。使用`pickle.dump()`将数据写入文件。这将自动压缩数据并将其保存为gz文件。注意,使用pickle时要小心,因为它可以执行任意代码。 ### 回答2: 将数据保存为.gz文件的方法有许多。下面是一种常用的方法: 1. 导入相关库:首先,我们需要导入相关的库,如gzip库。 2. 打开要保存的文件:使用open函数打开要保存的文件,并将其赋值给一个变量。 3. 创建gzip文件对象:使用gzip.open函数创建一个gzip文件对象,将其赋值给一个变量。 4. 将数据写入gzip文件对象:使用gzip文件对象的write方法,将要保存的数据写入其。 5. 关闭gzip文件对象:使用gzip文件对象的close方法,关闭文件对象。 6. 关闭原始文件对象:使用原始文件对象的close方法,关闭文件对象。 以下是一个示例代码,用于将数据保存为.gz文件: ```python import gzip # 打开要保存的文件 with open("data.txt", "rb") as file: data = file.read() # 创建gzip文件对象 with gzip.open("data.txt.gz", "wb") as gzip_file: # 将数据写入gzip文件对象 gzip_file.write(data) # 关闭原始文件对象 # 关闭gzip文件对象 ``` 以上示例代码将名为"data.txt"的文件保存为名为"data.txt.gz"的.gz文件。需要注意的是,这个示例假设要保存的数据是二进制格式的,如果是文本格式的数据,可以使用文本模式进行读取和写入。 另外,还可以使用其他方法来保存数据为.gz文件,如使用shutil库的gzip函数进行压缩,或使用命令行工具如gzip进行压缩。具体选择哪种方法,取决于个人的需求和偏好。 ### 回答3: 将数据保存为.gz文件的主要步骤如下: 1. 导入gzip模块:首先,在Python代码导入gzip模块,以便使用其提供的相关函数和方法。 ```python import gzip ``` 2. 打开要保存的文件:使用内置的open函数打开要保存的文件,指定文件路径和打开模式。 ```python file_path = "data.txt" file_mode = "rb" # 如果是文本文件,使用"r"模式;如果是二进制文件,使用"rb"模式 file = open(file_path, file_mode) ``` 3. 创建.gz文件并打开:通过gzip模块的open函数创建.gz文件,并指定要保存的文件路径和打开模式。 ```python gz_file_path = "data.txt.gz" gz_file_mode = "wb" # 如果是文本文件,使用"w"模式;如果是二进制文件,使用"wb"模式 gz_file = gzip.open(gz_file_path, gz_file_mode) ``` 4. 逐行或逐字节读取文件内容,并写入.gz文件:使用循环读取文件的每一行或每一个字节,并将其写入.gz文件。 ```python for line in file: gz_file.write(line) ``` 5. 关闭文件:在完成文件写操作后,记得关闭文件,以释放系统资源。 ```python file.close() gz_file.close() ``` 完成上述步骤后,就成功将数据保存为.gz文件。在需要使用保存的数据时,只需使用gzip模块的open函数打开.gz文件,并进行数据读取操作即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值