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.mzph.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 主题演讲" 以及 "开…