You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Julia中读取gzip压缩的XLSX文件并转为DataFrame?

问题描述

我通过HTTP下载了一个gz压缩文件,其中包含xlsx格式的文件,目标是读取该文件并转换为DataFrame。我尝试了以下代码:

using HTTP, XLSX, DataFrames, GZip

file = HTTP.get("http://www.tsetmc.com/tsev2/excel/IntraDayPrice.aspx?i=35425587644337450&m=30")

write("c:/users/shayan/desktop/file.xlsx.gz", file.body);

df = GZip.open("c:/users/shayan/desktop/file.xlsx.gz", "r") do io
    XLSX.readxlsx(io)
end

运行后抛出MethodError错误,具体信息如下:

ERROR: MethodError: no method matching readxlsx(::GZipStream)
Closest candidates are:
  readxlsx(::AbstractString) at C:\Users\Shayan\.julia\packages\XLSX\FFzH0\src\read.jl:37
Stacktrace:
 [1] (::var"#23#24")(io::GZipStream)
   @ Main c:\Users\Shayan\Documents\Python Scripts\test.jl:15
 [2] gzopen(::var"#23#24", ::String, ::String)
   @ GZip C:\Users\Shayan\.julia\packages\GZip\JNmGn\src\GZip.jl:269
 [3] open(::Function, ::Vararg{Any})
   @ GZip C:\Users\Shayan\.julia\packages\GZip\JNmGn\src\GZip.jl:265
 [4] top-level scope
   @ c:\Users\Shayan\Documents\Python Scripts\test.jl:14
解决方法

报错核心原因是XLSX.readxlsx仅支持传入文件路径(AbstractString类型),不直接兼容GZipStream类型的IO流。以下是两种可行的解决方式:

方法1:内存中直接处理(无需写入本地文件)

using HTTP, XLSX, DataFrames, GZip

# 获取压缩响应数据
response = HTTP.get("http://www.tsetmc.com/tsev2/excel/IntraDayPrice.aspx?i=35425587644337450&m=30")

# 解压后读取为XLSX文件对象
xlsx_file = GZip.open(IOBuffer(response.body), "r") do gz_io
    # 将解压后的字节数据包装为标准IO流,供XLSX读取
    XLSX.readxlsx(IOBuffer(read(gz_io)))
end

# 将第一个工作表转换为DataFrame(可根据实际情况修改工作表索引/名称)
df = DataFrame(xlsx_file[1][:])

方法2:先解压到本地文件再读取

如果需要保留本地文件副本,可以先解压出完整的xlsx文件再处理:

using HTTP, XLSX, DataFrames, GZip

response = HTTP.get("http://www.tsetmc.com/tsev2/excel/IntraDayPrice.aspx?i=35425587644337450&m=30")
write("c:/users/shayan/desktop/file.xlsx.gz", response.body)

# 解压gz文件到xlsx格式
GZip.open("c:/users/shayan/desktop/file.xlsx.gz", "r") do gz_io
    write("c:/users/shayan/desktop/file.xlsx", read(gz_io))
end

# 读取xlsx文件并转换为DataFrame
xlsx_file = XLSX.readxlsx("c:/users/shayan/desktop/file.xlsx")
df = DataFrame(xlsx_file[1][:])

内容的提问来源于stack exchange,提问作者Shayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:48:30