Python代码出现Invalid Argument错误求助:大日志文件解压问题
解决Python解压大日志文件时的Invalid Argument错误
嘿,作为Python初学者遇到这种问题很正常,别着急!先别急着认定是文件大小的锅,咱们一步步排查:
先排查基础问题
首先得排除最容易忽略的小问题:
- 路径与权限:先确认你的
GZ_DIR路径/Users/kiya/Desktop/mysql/csv是不是完全正确?可以在终端里跑ls /Users/kiya/Desktop/mysql/csv看看能不能列出文件,同时确保你有读取这些gz文件的权限。 - 文件完整性:2GB的大文件很容易在下载/传输时损坏,用终端命令
gzip -t /Users/kiya/Desktop/mysql/csv/你的日志文件名.gz验证一下,如果返回错误,说明文件本身坏了,得重新获取。
针对大文件的解压优化
如果文件没问题,那大概率是一次性读取整个大文件到内存导致的问题——2GB的文件直接读进内存很容易触发各种异常。咱们改成分块读取的方式,既节省内存又能避免错误:
import glob import gzip import os import pymysql import logging # path to gz directory GZ_DIR = '/Users/kiya/Desktop/mysql/csv' # 遍历目录下所有gz文件 for gz_file in glob.glob(os.path.join(GZ_DIR, '*.gz')): output_filename = os.path.splitext(gz_file)[0] try: # 用二进制模式打开gz文件,分块读取解压 with gzip.open(gz_file, 'rb') as f_in: with open(output_filename, 'wb') as f_out: # 每次读取1MB的块,可以根据你的内存情况调整大小 chunk_size = 1024 * 1024 while True: chunk = f_in.read(chunk_size) if not chunk: break f_out.write(chunk) logging.info(f"成功解压: {gz_file}") except Exception as e: logging.error(f"解压{gz_file}失败: {str(e)}") # 这里可以根据需要添加错误处理逻辑,比如跳过损坏文件等
额外提示
如果之后处理数据库时还有问题,记得检查数据库连接参数、表结构是否匹配日志内容,但当前的Invalid Argument错误应该先从解压环节解决。
内容的提问来源于stack exchange,提问作者anna97
相关产品推荐
相关产品推荐

