提问人:David H. J. 提问时间:11/9/2023 更新时间:11/10/2023 访问量:24
如何在不提取 Python 的情况下将 zip 文件中的 DBF 文件加载到变量中?
How to load a DBF file within a zip file to a variable without extracting it in Python?
问:
我正在尝试将 zip 文件中包含的 DBF 文件加载到变量中,而不提取 zip 文件。我尝试使用以下代码,但它不起作用:
import zipfile
from dbfread import DBF
def load_dbf_from_zip(zip_filename):
with zipfile.ZipFile(zip_filename, 'r') as z:
dbf_filename = z.namelist()[0]
with z.open(dbf_filename) as f:
dbf = DBF(f)
return dbf
dbf = load_dbf_from_zip('my_zip_file.zip')
此代码不起作用,因为它尝试使用 DBF 构造函数从 zip 文件中读取 DBF 文件,该构造函数需要文件对象作为输入。但是,ZipFile 类的 open() 方法返回一个 ZipExtFile 对象,该对象不是文件对象。
如何在不提取 zip 文件的情况下将 DBF 文件加载到变量中?
答:
0赞
Marco Bonelli
11/10/2023
#1
看起来你不能。您使用的库需要文件名作为 的第一个参数,然后尝试打开并读取文件本身。而且,该类似乎在内部函数中多次打开和读取文件,因此您不能只创建一个临时文件并在实例化后将其删除。不幸的是,这很傻。DBS()
DBS
DBS(filename)
您必须将文件解压缩到磁盘或创建一个 NamedTemporaryFile
,将数据写入其中并将其名称传递给 。不过,该文件应该与您使用的类一样长。DBS
DBS
总的来说,我会说这个库提供了一个非常糟糕的界面,底层文件甚至可能会更改,并且库会在更改后重新打开它,我不确定这是人们通常所期望的。
评论