pbi 读取 zip 文件

读取zip文件在我们平时工作中经常遇到,当我们需要批量读取时,如果手动去打开一个个去读非常费事。
而pbi中借用python脚本变的异常简单,下面我将读取本地桌面"畅心.zip"压缩包内的两个csv文件:
file

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()

file
当然我们也可以写为:

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()

file
有人说这样里面的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()"))

file
注意此时的表名称我强行进行构建为“a0、a1”形式,我们可以分两步走,将zf.namelist()先行输出,然后此处的a"&Text.From(x)用{zf.namelist()的列表形式}{x}引用回来即可!
赶紧来试试吧!
file

道高一尺 魔高一丈
https://pbihub.cn/users/44
M与DAX的恩怨纠葛