[英]Open a zip file and stream the xml file inside of the zip file
我正在嘗試從 USPTO打開批量數據。 zip 文件中的 xml 文件是包含多個 xml 聲明的串聯 xml 文件,並且非常大。 我試圖只從 xml 中讀取行,直到我到達下一個 xml 聲明。 我發現了這個相關的問題,沒有代碼。
我要創建的是一個執行以下操作的函數:
到目前為止,我已經能夠打開 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()
使用read
而不是extract
。 它返回 zip 中文件的字節,給定名稱。 重要的是要了解您實際上是將存檔提取到內存中,因此請注意實際要提取的數據量以及您在這方面的限制。
例如,以下函數返回一個字典,以 zip 存檔文件的名稱作為鍵,文件的內容作為值:
from zipfile import ZipFile
def extract(f):
zf = ZipFile(f)
return {name: zf.read(name) for name in zf.namelist()}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.