pbi 读取 zip 文件
读取zip文件在我们平时工作中经常遇到,当我们需要批量读取时,如果手动去打开一个个去读非常费事。
而pbi中借用python脚本变的异常简单,下面我将读取本地桌面"畅心.zip"压缩包内的两个csv文件:
import zipfile
zf=zipfile.ZipFile(r'C:\Users\Administrator\Desktop\畅心.zip')
fn =zf.namelist()
r=[[y.encode('cp437').decode('gbk'),pandas.read_csv(zf.open(y),encoding='gbk')] for y in fn]
表=pandas.DataFrame(r,columns=['表名','数据'])
zf.close()
当然我们也可以写为:
import zipfile
zf=zipfile.ZipFile(r'C:\Users\Administrator\Desktop\畅心.zip')
fn =zf.namelist()
r=[[y.encode('cp437').decode('gbk'),zf.open(y).read().decode('gbk')] for y in fn]
表=pandas.DataFrame(r,columns=['表名','数据'])
zf.close()
有人说这样里面的csv文件其实还是字符串、未能直接解析为table,你可以对数据列进行Csv.Document转换,我们也可以采用外部传入参数的方式循环构建多个表:
List.Transform({0,1},(x)=>Python.Execute("import zipfile
zf=zipfile.ZipFile(r'C:\Users\Administrator\Desktop\畅心.zip')
fn =zf.namelist()
r=[[y.encode('cp437').decode('gbk'),zf.open(y)] for y in fn]
a"&Text.From(x)&"= pandas.read_csv(r["&Text.From(x)&"][1],encoding='gbk')
zf.close()"))
注意此时的表名称我强行进行构建为“a0、a1”形式,我们可以分两步走,将zf.namelist()先行输出,然后此处的a"&Text.From(x)用{zf.namelist()的列表形式}{x}引用回来即可!
赶紧来试试吧!
道高一尺 魔高一丈
https://pbihub.cn/users/44
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)