python腳本編輯oss文件

1、安裝oss2庫

root@ubuntu:~# pip3 install oss2
Collecting oss2Downloading oss2-2.18.5.tar.gz (283 kB)|████████████████████████████████| 283 kB 6.9 MB/s 
Collecting aliyun-python-sdk-core>=2.13.12Downloading aliyun-python-sdk-core-2.15.1.tar.gz (443 kB)|████████████████████████████████| 443 kB 67.8 MB/s 
Collecting aliyun-python-sdk-kms>=2.4.1Downloading aliyun_python_sdk_kms-2.16.3-py2.py3-none-any.whl (98 kB)|████████████████████████████████| 98 kB 8.3 MB/s 
Collecting crcmod>=1.7Downloading crcmod-1.7.tar.gz (89 kB)|████████████████████████████████| 89 kB 14.3 MB/s 
Collecting pycryptodome>=3.4.7Downloading 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.3Downloading jmespath-0.10.0-py2.py3-none-any.whl (24 kB)
Building wheels for collected packages: oss2, aliyun-python-sdk-core, crcmodBuilding wheel for oss2 (setup.py) ... doneCreated wheel for oss2: filename=oss2-2.18.5-py3-none-any.whl size=118170 sha256=cd8f24bb98e8449af56d9df9e826cce691d0527e53420f9c2f14a5b85b059d0cStored in directory: /root/.cache/pip/wheels/b6/af/6a/36f940ed11f11b5e1002f94160a82c3dc35e8a357cedc02bb7Building wheel for aliyun-python-sdk-core (setup.py) ... doneCreated wheel for aliyun-python-sdk-core: filename=aliyun_python_sdk_core-2.15.1-py3-none-any.whl size=535318 sha256=83c40a77e365ad83d4b74b43e757c6cea78628e8054706e48ae424ed8ddf7b69Stored in directory: /root/.cache/pip/wheels/64/af/7e/b3ec025852e53d69463404a2b281d4587d45ee710cd45d0f38Building wheel for crcmod (setup.py) ... doneCreated wheel for crcmod: filename=crcmod-1.7-cp38-cp38-linux_x86_64.whl size=35994 sha256=9fc029c468fe548c4862be3ab4783e1d17b2ba52b72aef537d520b42f1c0a0adStored 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)更改后將文件更美觀的輸出

參數indent=4:以將 JSON 數據格式化為具有縮進的形式,使其更易于閱讀。
參數ensure_ascii=False:以確保中文字符能夠正確地輸出

腳本json格式化輸出

import json
import oss2def update_oss_json_value(access_key_id, access_key_secret, endpoint, bucket_name, file_path, key_value_map):# 創建 OSS 客戶端auth = oss2.Auth(access_key_id, access_key_secret)bucket = oss2.Bucket(auth, endpoint, bucket_name)# 讀取文件內容content = bucket.get_object(file_path).read()# 解析 JSONdata = 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)# 上傳修改后的文件內容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'
}# 調用函數更新 OSS 文件內容
update_oss_json_value('XXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXX', endpoint, 'test', file_path, key_value_map)

執行后會將json文件格式化輸出,如有不是很規范的都會更加美觀的顯示
2)保持每個鍵值對都占據一行,并在開頭空四格

import json
import oss2def update_oss_json_value(access_key_id, access_key_secret, endpoint, bucket_name, file_path, key_value_map):# 創建 OSS 客戶端auth = oss2.Auth(access_key_id, access_key_secret)bucket = oss2.Bucket(auth, endpoint, bucket_name)# 讀取文件內容content = bucket.get_object(file_path).read()# 解析 JSONdata = json.loads(content)# 修改指定 key 的值for key, value in key_value_map.items():if key in data:data[key] = value# 將修改后的 JSON 轉換為字符串,保持每個鍵值對都占據一行,并在開頭空四格new_content = ',\n'.join([f'    "{k}": "{v}"' for k, v in data.items()])# 添加大括號,保持 JSON 格式new_content = '{\n' + new_content + '\n}'# 上傳修改后的文件內容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'
}# 調用函數更新 OSS 文件內容
update_oss_json_value('XXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXX', endpoint, 'test', file_path, key_value_map)

3、通過位置參數進行新增鍵值對

import json
import oss2
import argparsedef update_oss_json_value(access_key_id, access_key_secret, endpoint, bucket_name, file_path, *superSigns):# 創建 OSS 客戶端auth = oss2.Auth(access_key_id, access_key_secret)bucket = oss2.Bucket(auth, endpoint, bucket_name)# 讀取文件內容content = bucket.get_object(file_path).read()# 解析 JSONdata = 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] = valueprint(key,value)# 將修改后的 JSON 轉換為字符串,保持每個鍵值對都占據一行,并在開頭空四格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}")# 上傳修改后的文件內容bucket.put_object(file_path, new_content.encode('utf-8'))print("File content has been updated.")if __name__ == "__main__":# 創建參數解析器parser = argparse.ArgumentParser(description="Update OSS JSON file")# 添加命令行參數#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")# 解析命令行參數args = parser.parse_args()# 調用函數更新 OSS 文件內容update_oss_json_value('XXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXX', 'http://oss-cn-hongkong.aliyuncs.com', args.bucket_name, args.file_path, *args.superSigns)

執行

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.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13206.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vmvare—windows中打不開攝像頭

1、檢查本地攝像頭是否能正常打開 設備管理器—查看—顯示隱藏設備—選中照相機—啟動 USB2.0 HD UVC—打開相機查看 2、檢查虛擬機的設置 虛擬機—虛擬機—可移動設備—USB2.0 HD UVC—勾選在狀態欄中顯示 虛擬機—打開windows主機—右小角選中圓圈圖標—勾選連接主機 此時…

Android14音頻進階之ADSP調試(七十二)

簡介: CSDN博客專家,專注Android/Linux系統,分享多mic語音方案、音視頻、編解碼等技術,與大家一起成長! 優質專欄:Audio工程師進階系列【原創干貨持續更新中……】?? 優質專欄:多媒體系統工程師系列【原創干貨持續更新中……】?? 優質視頻課程:AAOS車載系統+AOSP…

Java | Leetcode Java題解之第91題解碼方法

題目&#xff1a; 題解&#xff1a; class Solution {public int numDecodings(String s) {int n s.length();// a f[i-2], b f[i-1], cf[i]int a 0, b 1, c 0;for (int i 1; i < n; i) {c 0;if (s.charAt(i - 1) ! 0) {c b;}if (i > 1 && s.charAt(i …

小紅書筆記怎么發瀏覽量高?

小紅書筆記發布是有技巧和策略的&#xff0c;為什么有的小紅書筆記瀏覽量那么高&#xff0c;是因為下足了功夫&#xff0c;小紅書筆記怎么發瀏覽量高&#xff1f;今天伯樂網絡傳媒就來給大家揭秘一下。 一、選題與定位 1. 熱門話題選擇 要想提高小紅書筆記的瀏覽量&#xff0…

虛擬化技術 使用vSphere Web Client管理ESXi主機

一、實驗內容 通過vSphere Web Client將ESXi主機連接到iSCSI共享存儲通過vSphere Web Client&#xff0c;使用共享存儲創建虛擬機并安裝windows 2008 R2操作系統通過vSphere Web Client&#xff0c;為虛擬機創建快照 二、、實驗主要儀器設備及材料 安裝有64位Windows操作系統…

Redis如何避免數據丟失?——AOF

目錄 AOF日志 1. 持久化——命令寫入到AOF文件 寫到用戶緩沖區 AOF的觸發入口函數——propagate 具體的實現邏輯——feedAppendOnlyFile 從用戶緩沖區寫入到AOF文件(磁盤&#xff09; 函數write、fsync、fdatasync Redis的線程池 AOF文件的同步策略 觸發的入口函數——…

24.HashMap的擴容機制

ps&#xff1a;沒看太懂源碼&#xff0c;不確定是否正確... 一、擴容條件 當HashMap中元素的總個數超過&#xff08;threshold&#xff09;閾值&#xff08;數組容量乘以負載因子&#xff09;時&#xff0c;會觸發擴容。默認情況下&#xff0c;&#xff08;capacity&#xff0…

JavaScript函數聲明

JS函數聲明 JS中的方法,多稱為函數,函數的聲明語法和JAVA中有較大區別 語法1&#xff1a;function 函數名 (參數列表){函數體} 語法2&#xff1a;var 函數名 function (參數列表){函數體} 函數說明 函數沒有權限控制符不用聲明函數的返回值類型,需要返回在函數體中直接return即…

UBUNTU下指定執行文件運行時查找庫的路徑

在Ubuntu下&#xff0c;當指定執行文件時&#xff0c;程序運行時會查找庫文件。通常情況下&#xff0c;程序會在系統默認的庫文件路徑中查找&#xff0c;例如/lib和/usr/lib。 如果需要程序在執行時查找特定路徑下的庫文件&#xff0c;可以通過以下方法實現&#xff1a; 設置環…

Gone框架介紹18 - redis 分布式緩存 和 分布式鎖

gone是可以高效開發Web服務的Golang依賴注入框架 github地址&#xff1a;https://github.com/gone-io/gone 文檔地址&#xff1a;https://goner.fun/zh/ 請幫忙在github上點個 ??吧&#xff0c;這對我很重要 &#xff1b;萬分感謝&#xff01;&#xff01; 文章目錄 利用redi…

Python | Leetcode Python題解之第92題反轉鏈表II

題目&#xff1a; 題解&#xff1a; class Solution:def reverseBetween(self, head: ListNode, left: int, right: int) -> ListNode:# 設置 dummyNode 是這一類問題的一般做法dummy_node ListNode(-1)dummy_node.next headpre dummy_nodefor _ in range(left - 1):pre…

云計算第十八課

目錄操作 移動 改名 批量改名&#xff0c;寫腳本 mv [選項] … 源文件或目錄… 目標文件或目錄 單個文件 移動 或者改名 -f&#xff1a;強制覆蓋&#xff0c;如果目標文件已經存在&#xff0c;則不詢問&#xff0c;直接強制覆蓋&#xff1b; -i&#xff1a;交互移動&#x…

零基礎學Java第十四天之抽象類

抽象類和抽象類的深入 抽象類 1、理解 抽象類&#xff08;Abstract Class&#xff09;是面向對象編程中的一個重要概念&#xff0c;尤其在像Java、C#和C等編程語言中。抽象類是一種特殊的類&#xff0c;它不能被實例化&#xff08;即不能創建抽象類的對象&#xff09;&#x…

鼠標懸浮(hover)時顯示提示框的效果

在Vue中&#xff0c;你可以使用多種方法來實現鼠標懸浮&#xff08;hover&#xff09;時顯示提示框的效果。以下是一個簡單的示例&#xff0c;它使用了Vue的指令&#xff08;directive&#xff09;和條件渲染&#xff08;conditional rendering&#xff09;來實現這個功能。 首…

關于FIFO Generator IP和XPM_FIFO在涉及位寬轉換上的區別

在Xilinx FPGA中&#xff0c;要實現FIFO的功能時&#xff0c;大部分時候會使用兩種方法&#xff1a; FIFO Generator IP核XPM_FIFO原語 FIFO Generator IP核的優點是有圖形化界面&#xff0c;配置參數非常直觀&#xff1b;缺點是參數一旦固定&#xff0c;想要更改的化就只能重…

一次tomcat閃退處理

雙擊tomcat目錄下bin目錄中startup.bat 在我的電腦上是一閃而過&#xff0c;不能正常地啟動tomcat軟件 以記事本打開startup.bat文件&#xff0c;在文件的結尾處加上pause 然后再雙擊該bat執行&#xff0c;此時窗口就不會關閉&#xff0c;并會將錯誤信息打印在提示框中 可能是…

英偉達發布 VILA 視覺語言模型,實現多圖像推理、增強型上下文學習,性能超越 LLaVA-1.5

前言 近年來&#xff0c;大型語言模型 (LLM) 的發展取得了顯著的成果&#xff0c;并逐漸應用于多模態領域&#xff0c;例如視覺語言模型 (VLM)。VLM 旨在將 LLM 的強大能力擴展到視覺領域&#xff0c;使其能夠理解和處理圖像和文本信息&#xff0c;并完成諸如視覺問答、圖像描…

一看就會的AOP事務

文章目錄 AOPAOP簡介AOP簡介和作用AOP的應用場景為什么要學習AOP AOP入門案例思路分析代碼實現AOP中的核心概念 AOP工作流程AOP工作流程AOP核心概念在測試類中驗證代理對象 AOP切入點表達式語法格式通配符書寫技巧 AOP通知類型AOP通知分類AOP通知詳解 AOP案例案例-測量業務層接…

Linux bc命令(bc指令)(基本計算器)(任意精度計算語言:支持浮點數運算、變量賦值和自定義函數等)

文章目錄 bc命令文檔英文中文 Linux bc 命令詳解bc 命令的基本用法啟動 bc 環境進行基本計算退出 bc bc 中的數學功能執行高級數學計算平方根和指數函數對數函數 處理精度問題 變量和數組變量賦值和使用數組的使用 創建和使用自定義函數 bc 命令的高級用法在腳本中使用 bc基本腳…

Google I/O 大會 | 精彩看點一覽

作者 / 開發者關系和開源總監 Timothy Jordan 2024 年 Google I/O 大會于北京時間 5 月 15 日 1:00am 在加利福尼亞的山景城以 Google 主題演講直播拉開序幕。隨后&#xff0c;在北京時間 4:30am 舉行開發者主題演講。大家可前往回看 "Google 主題演講" 以及 "開…