python腳本編輯oss文件的實現(xiàn)示例
1、安裝oss2庫
root@ubuntu:~# pip3 install oss2 Collecting oss2 Downloading oss2-2.18.5.tar.gz (283 kB) |████████████████████████████████| 283 kB 6.9 MB/s Collecting aliyun-python-sdk-core>=2.13.12 Downloading aliyun-python-sdk-core-2.15.1.tar.gz (443 kB) |████████████████████████████████| 443 kB 67.8 MB/s Collecting aliyun-python-sdk-kms>=2.4.1 Downloading aliyun_python_sdk_kms-2.16.3-py2.py3-none-any.whl (98 kB) |████████████████████████████████| 98 kB 8.3 MB/s Collecting crcmod>=1.7 Downloading crcmod-1.7.tar.gz (89 kB) |████████████████████████████████| 89 kB 14.3 MB/s Collecting pycryptodome>=3.4.7 Downloading pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB) |████████████████████████████████| 2.1 MB 7.0 MB/s Requirement already satisfied: requests!=2.9.0 in /usr/lib/python3/dist-packages (from oss2) (2.22.0) Requirement already satisfied: six in /usr/lib/python3/dist-packages (from oss2) (1.14.0) Requirement already satisfied: cryptography>=2.6.0 in /usr/lib/python3/dist-packages (from aliyun-python-sdk-core>=2.13.12->oss2) (2.8) Collecting jmespath<1.0.0,>=0.9.3 Downloading jmespath-0.10.0-py2.py3-none-any.whl (24 kB) Building wheels for collected packages: oss2, aliyun-python-sdk-core, crcmod Building wheel for oss2 (setup.py) ... done Created wheel for oss2: filename=oss2-2.18.5-py3-none-any.whl size=118170 sha256=cd8f24bb98e8449af56d9df9e826cce691d0527e53420f9c2f14a5b85b059d0c Stored in directory: /root/.cache/pip/wheels/b6/af/6a/36f940ed11f11b5e1002f94160a82c3dc35e8a357cedc02bb7 Building wheel for aliyun-python-sdk-core (setup.py) ... done Created wheel for aliyun-python-sdk-core: filename=aliyun_python_sdk_core-2.15.1-py3-none-any.whl size=535318 sha256=83c40a77e365ad83d4b74b43e757c6cea78628e8054706e48ae424ed8ddf7b69 Stored in directory: /root/.cache/pip/wheels/64/af/7e/b3ec025852e53d69463404a2b281d4587d45ee710cd45d0f38 Building wheel for crcmod (setup.py) ... done Created wheel for crcmod: filename=crcmod-1.7-cp38-cp38-linux_x86_64.whl size=35994 sha256=9fc029c468fe548c4862be3ab4783e1d17b2ba52b72aef537d520b42f1c0a0ad Stored in directory: /root/.cache/pip/wheels/ca/5a/02/f3acf982a026f3319fb3e798a8dca2d48fafee7761788562e9 Successfully built oss2 aliyun-python-sdk-core crcmod Installing collected packages: jmespath, aliyun-python-sdk-core, aliyun-python-sdk-kms, crcmod, pycryptodome, oss2 Successfully installed aliyun-python-sdk-core-2.15.1 aliyun-python-sdk-kms-2.16.3 crcmod-1.7 jmespath-0.10.0 oss2-2.18.5 pycryptodome-3.20.0
2、編寫腳本
1)更改后將文件更美觀的輸出
參數(shù)indent=4:以將 JSON 數(shù)據(jù)格式化為具有縮進(jìn)的形式,使其更易于閱讀。
參數(shù)ensure_ascii=False:以確保中文字符能夠正確地輸出
腳本json格式化輸出
import json import oss2 def update_oss_json_value(access_key_id, access_key_secret, endpoint, bucket_name, file_path, key_value_map): # 創(chuàng)建 OSS 客戶端 auth = oss2.Auth(access_key_id, access_key_secret) bucket = oss2.Bucket(auth, endpoint, bucket_name) # 讀取文件內(nèi)容 content = bucket.get_object(file_path).read() # 解析 JSON data = json.loads(content) # 修改指定 key 的值 for key, value in key_value_map.items(): if key in data: data[key] = value # 將修改后的 JSON 格式化為美觀的字符串 new_content = json.dumps(data, indent=4, ensure_ascii=False) # 上傳修改后的文件內(nèi)容 bucket.put_object(object_key, new_content.encode('utf-8')) print("File content has been updated.") # 要修改的 OSS 文件路徑 file_path = 'test/domain_bak.json' # 指定正確的 endpoint endpoint = 'http://oss-cn-hongkong.aliyuncs.com' # 要修改的 key-value 映射 key_value_map = { 'superSign1': 'https://uykkr.abc.com/c/gulorex6', 'superSign2': 'https://dspcs.abc.com/c/xqjqujc2' } # 調(diào)用函數(shù)更新 OSS 文件內(nèi)容 update_oss_json_value('XXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXX', endpoint, 'test', file_path, key_value_map)
執(zhí)行后會將json文件格式化輸出,如有不是很規(guī)范的都會更加美觀的顯示
2)保持每個鍵值對都占據(jù)一行,并在開頭空四格
import json import oss2 def update_oss_json_value(access_key_id, access_key_secret, endpoint, bucket_name, file_path, key_value_map): # 創(chuàng)建 OSS 客戶端 auth = oss2.Auth(access_key_id, access_key_secret) bucket = oss2.Bucket(auth, endpoint, bucket_name) # 讀取文件內(nèi)容 content = bucket.get_object(file_path).read() # 解析 JSON data = json.loads(content) # 修改指定 key 的值 for key, value in key_value_map.items(): if key in data: data[key] = value # 將修改后的 JSON 轉(zhuǎn)換為字符串,保持每個鍵值對都占據(jù)一行,并在開頭空四格 new_content = ',\n'.join([f' "{k}": "{v}"' for k, v in data.items()]) # 添加大括號,保持 JSON 格式 new_content = '{\n' + new_content + '\n}' # 上傳修改后的文件內(nèi)容 bucket.put_object(object_key, new_content.encode('utf-8')) print("File content has been updated.") # 要修改的 OSS 文件路徑 file_path = 'test/domain_bak.json' # 指定正確的 endpoint endpoint = 'http://oss-cn-hongkong.aliyuncs.com' # 要修改的 key-value 映射 key_value_map = { 'superSign1': 'https://uykkr.abc.com/c/gulorex6', 'superSign2': 'https://dspcs.abc.com/c/xqjqujc2' } # 調(diào)用函數(shù)更新 OSS 文件內(nèi)容 update_oss_json_value('XXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXX', endpoint, 'test', file_path, key_value_map)
3、通過位置參數(shù)進(jìn)行新增鍵值對
import json import oss2 import argparse def update_oss_json_value(access_key_id, access_key_secret, endpoint, bucket_name, file_path, *superSigns): # 創(chuàng)建 OSS 客戶端 auth = oss2.Auth(access_key_id, access_key_secret) bucket = oss2.Bucket(auth, endpoint, bucket_name) # 讀取文件內(nèi)容 content = bucket.get_object(file_path).read() # 解析 JSON data = json.loads(content) # 生成 key-value 映射 key_value_map = {} for i, superSign in enumerate(superSigns, start=1): key = f'superSign{i}' key_value_map[key] = superSign # 修改指定 key 的值 for key, value in key_value_map.items(): #if key in data: data[key] = value print(key,value) # 將修改后的 JSON 轉(zhuǎn)換為字符串,保持每個鍵值對都占據(jù)一行,并在開頭空四格 new_content = ',\n'.join([f' "{k}": "{v}"' for k, v in data.items()]) # 添加大括號,保持 JSON 格式 new_content = '{\n' + new_content + '\n}' # 打印更新后的鍵值對 for key, value in data.items(): print(f"{key}: {value}") # 上傳修改后的文件內(nèi)容 bucket.put_object(file_path, new_content.encode('utf-8')) print("File content has been updated.") if __name__ == "__main__": # 創(chuàng)建參數(shù)解析器 parser = argparse.ArgumentParser(description="Update OSS JSON file") # 添加命令行參數(shù) #parser.add_argument("access_key_id", type=str, help="Access Key ID") #parser.add_argument("access_key_secret", type=str, help="Access Key Secret") #parser.add_argument("endpoint", type=str, help="OSS Endpoint") parser.add_argument("bucket_name", type=str, help="Bucket Name") parser.add_argument("file_path", type=str, help="Object Key") parser.add_argument("superSigns", nargs='+', type=str, help="Values for superSigns") # 解析命令行參數(shù) args = parser.parse_args() # 調(diào)用函數(shù)更新 OSS 文件內(nèi)容 update_oss_json_value('XXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXX', 'http://oss-cn-hongkong.aliyuncs.com', args.bucket_name, args.file_path, *args.superSigns)
執(zhí)行
root@ubuntu:~# python3 kong.py 'test-prod' 'test/domain_bak.json' 'https://uykkr.abc.com/api/c/gulorex6' 'https://dspcs.abc.com/api/c/xqjqujc2' superSign1 https://uykkr.abc.com/api/c/gulorex6 superSign2 https://dspcs.abc.com/api/c/xqjqujc2 。。。。。文本json。。。。。 File content has been updated. root@ubuntu:~# python3 kong.py 'test-prod' 'test/domain_bak.json' 'https://uykkr.abc.com/api/c/gulorex6' 'https://dspcs.abc.com/api/c/xqjqujc2' 'https://dspcs.abc.com/api/c/acrik5' superSign1 https://uykkr.abc.com/api/c/gulorex6 superSign2 https://dspcs.abc.com/api/c/xqjqujc2 superSign3 https://dspcs.abc.com/api/c/acrik5 。。。。。文本json。。。。。 File content has been updated. root@ubuntu:~# python3 kong.py 'test-prod' 'test/domain_bak.json' 'https://uykkr.abc.com/api/c/gulorex6' 'https://dspcs.abc.com/api/c/xqjqujc2' 'https://dspcs.abc.com/api/c/acrik5' 'https://dspcs.abc.com/api/c/acrik5' superSign1 https://uykkr.abc.com/api/c/gulorex6 superSign2 https://dspcs.abc.com/api/c/xqjqujc2 superSign3 https://dspcs.abc.com/api/c/acrik5 superSign4 https://dspcs.abc.com/api/c/acrik5 。。。。。文本json。。。。。 File content has been updated.
到此這篇關(guān)于python腳本編輯oss文件的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)python 編輯oss文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 解決flask 圖片在線瀏覽或者直接下載的問題
今天小編就為大家分享一篇python 解決flask 圖片在線瀏覽或者直接下載的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01python 將對象設(shè)置為可迭代的兩種實現(xiàn)方法
今天小編就為大家分享一篇python 將對象設(shè)置為可迭代的兩種實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01python 并發(fā)編程 多路復(fù)用IO模型詳解
這篇文章主要介紹了python 并發(fā)編程 多路復(fù)用IO模型詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08