第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 shell 腳本/ ANT 腳本/ java 代碼/ python 代碼修改 zip

如何使用 shell 腳本/ ANT 腳本/ java 代碼/ python 代碼修改 zip

牧羊人nacy 2023-07-27 09:57:18
我需要修改 zip 文件內(nèi)的 json 文件內(nèi)的 json 內(nèi)容。zip 文件的層次結(jié)構(gòu)是:abc.zip文件夾1數(shù)據(jù)庫配置配置1.xml配置2.xml文件文件夾JSON文件夾所有包含 json 對象的 json 文件jsonobjects.zip我需要使用與現(xiàn)有 json 格式不同的格式修改 json 對象。json 文件中現(xiàn)有的 JSON 對象是:{ "title":"xyz",  "type":"object", "properties":{ "id":"123", "name":"xyz"}}json 文件中應(yīng)替換的新內(nèi)容應(yīng)為:{  "name":"xyz"  "type":"JSON"  "schema":{ // entire content of the existing JSON should be there in schema  "title":"xyz",   "type":"object",  "properties":{ "id":"123", "name":"xyz"}   }  "owner":"jack"}哪個簡單有效地完成這個任務(wù)(shellscript / python腳本/ java代碼)?
查看完整描述

1 回答

?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個贊

考慮到該文件很小(低于 1MB),使用下一個簡單的 Python 腳本就足夠了(對于如此小的數(shù)據(jù)來說速度會非常快)。

我使用了zipfile.ZIP_DEFLATEDzip 文件最常見的壓縮方式。zipfile.ZIP_STORED如果您需要內(nèi)部未壓縮的文件,您可以使用它?;蛘?zipfile.ZIP_BZIP2 和 zipfile.ZIP_LZMA 用于其他壓縮算法。僅需要為輸出/處理的 zip 設(shè)置壓縮類型,自動導(dǎo)出輸入 zip 壓縮。zipfilejson都是io標(biāo)準(zhǔn)的python模塊,不需要安裝任何東西。

fin.zipfout.zip是示例輸入/輸出 zip 文件名。您需要一個單獨(dú)的輸出/處理的 zip 文件,并且無法就地修改輸入 zip,因?yàn)?JSON 文件會更改其大小,并且輸入 zip 也可能被壓縮,因此需要重新打包/重新壓縮到另一個輸出 zip 文件。此外,輸入和輸出 zip 文件名可能相同,然后輸入文件將被替換,但在這種情況下,不要忘記備份 zip,直到您確定 zip 轉(zhuǎn)換沒有錯誤。

您可以看到對象被修改的行jdata,您可以根據(jù)任務(wù)需要的方式更改它們。jdata 從 json 解碼然后修改,然后編碼回 json。另請注意,如果您需要限制擴(kuò)展條件,則整個層次結(jié)構(gòu)中的所有 json 和 zip 文件都將被修改elif fname.endswith('.json')

看起來您已將拉鏈嵌套在另一個拉鏈內(nèi)。這就是為什么我創(chuàng)建了一個單獨(dú)的ProcessZip()函數(shù),以便遞歸地調(diào)用它來處理嵌套的 zip,它可以處理任何嵌套級別。

更新:我添加了 xml 到 json 轉(zhuǎn)換的示例。它需要xmltodict通過命令安裝模塊python -m pip install xmltodict。此外,由于 xml 可能以不同的方式轉(zhuǎn)換為 json(例如 json 沒有屬性),因此您可能還需要按照您需要的方式修復(fù)轉(zhuǎn)換后的內(nèi)容。另請注意,從 xml 轉(zhuǎn)換后,我將壓縮文件擴(kuò)展名從 更改.xml.json.

import zipfile, json, io

# Needs: python -m pip install xmltodict

import xmltodict


def ProcessZip(file_data):

    res = io.BytesIO()

    with zipfile.ZipFile(io.BytesIO(file_data), mode = 'r') as fin, \

         zipfile.ZipFile(res, mode = 'w', compression = zipfile.ZIP_DEFLATED) as fout:

        for fname in fin.namelist():

            data = fin.read(fname)

            if fname.endswith('.zip'):

                data = ProcessZip(data)

            elif fname.endswith('.json'):

                jdata = json.loads(data.decode('utf-8-sig'))

                # Check that we don't modify already modified file

                assert 'schema' not in jdata, 'JSON file "%s" already modified inside zip!' % fname

                # Modify JSON content here

                jdata = {

                    'name': 'xyz',

                    'type': 'JSON',

                    'schema': jdata,

                    'owner': 'jack',

                }

                data = json.dumps(jdata, indent = 4).encode('utf-8')

            elif fname.endswith('.xml'):

                jdata = xmltodict.parse(data)

                jdata = {

                    'name': 'xyz',

                    'type': 'JSON',

                    'schema': jdata,

                    'owner': 'jack',

                }

                data = json.dumps(jdata, indent = 4).encode('utf-8')

                fname = fname[:fname.rfind('.')] + '.json'

            fout.writestr(fname, data)

    return res.getvalue()


with open('fin.zip', 'rb') as fin:

    res = ProcessZip(fin.read())

with open('fout.zip', 'wb') as fout:

    fout.write(res)


查看完整回答
反對 回復(fù) 2023-07-27
  • 1 回答
  • 0 關(guān)注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號