我正在尝试打开bulk data from the USPTO。 zip中的xml文件是包含多个xml声明的级联xml文件,并且很大。我试图只从xml中读取行,直到到达下一个xml声明为止。我找到了this相关的问题,没有代码。
我要创建的功能是执行以下操作:
到目前为止,我已经能够打开zip文件,找到所有xml文件并提取每个xml文件。我宁愿不将xml文件写入磁盘,而是创建一个字符串,该字符串是我随后进一步解析的单个xml文档。
def main():
path = 'bulk/'
allFiles = glob.glob(path + '*.zip')
allFiles.sort()
for file in allFiles:
try:
with zipfile.ZipFile(file, mode = 'r', allowZip64 = True) as fin:
print(fin, '- ok')
print(fin.namelist())
for name in fin.namelist():
if name.endswith('xml'):
print(name) # all files that end in 'xml'
fin.extract(name, path='bulk/')
print('extracted ', name)
# TODO function to read lines of the xml file and
except zipfile.BadZipFile:
print(file,'- Bad zip file')
if __name__ == '__main__': main()
答案 0 :(得分:0)
使用read
代替extract
。它返回给定名称的zip文件中的字节。重要的是要了解您实际上是将存档提取到内存中,因此请注意实际要提取多少数据以及您在这方面的限制。
例如,以下函数返回一个dict,其中将zip存档文件的名称作为键,并将文件内容作为值:
from zipfile import ZipFile
def extract(f):
zf = ZipFile(f)
return {name: zf.read(name) for name in zf.namelist()}