查了好多资料都没找到满意答案,利用ZipFile可以读取Zip文件中txt的文件名,但在read txt中的内容的时候,显示无此文档,当然这可以理解,本来Zip文件还没解压,确实还没有这个文档,请问大家遇到过类似的问题么?谢谢!
除非这个 zip 就是打包了一下,没有压缩,你才有机会直接解析它得到文档。
通常情况下,肯定要解压之后才能读取内容。
能做的优化一般就是多文件时,只解压特定的文件,并且文件不落地。
有现成的包可以用,调用的 zlib
感谢您的回复!
我的zip文件确实只是对txt打包,没有压缩,利用ZipFile.jl可以读取zip中打包文件的文件名,无法读取文件内容,不知是否有不解包而直接读取txt内容的方法?。
直接读取Zip中的txt的这个需求主要是考虑到解压缩(文件落地)可能会耗费额外时间且会占用一定硬盘空间,且Zip中的每个txt文件都要读取,这也正是苦恼的地方。
python可以实现直接读取,可能julia还需要完善。
再次感谢您的回复!
这样不行吗?这个是文档里的例子。
julia> r = ZipFile.Reader("/tmp/example.zip");
julia> for f in r.files
println("Filename: $(f.name)")
write(stdout, read(f, String));
end
julia> close(r)
应该说 ZipFile 就没有 unzip 的功能吧。得自己读了然后写入硬盘。
主要原因应该是 zlib 根本就不操纵文件,所以没必要先解压后读取。
Zlib is not a library for handling .zip files. It supports decompressing zlib and gzip streams, both of which work on the level of a single stream of data, rather than an “archive” format like .zip.
看了下源码确认是直接读取信息的
成功了!可以读,ZipFile不支持open和readline,得用IO输出,参考修改了您推荐的代码,可能有点笨,但是有效。
r = ZipFile.Reader(indir[1]);
a=[];
io=IOBuffer()
for f in r.files
println("Filename: $(f.name)")
write(io, read(f, String));
end
close(r)
A=String(take!(io));
Btemp=split(A,"\r\n"); #分行提取
谢谢!
试试TableReader.jl.
Read stdout from a process.
dataframe = readcsv(unzip -p data.zip somefile.csv
)
地址:GitHub - bicycle1885/TableReader.jl: A fast and simple CSV parser