python - 无法从 Python 中的字符串中去除引号
问题描述
我正在创建 AWS IAM 托管策略列表。当我尝试发出分离命令时,我收到一条错误消息:
Invalid length for parameter PolicyArn, value: 1, valid range: 20-inf
我认为我收到此错误的原因是引号干扰了 detach 命令。
这是我试图提供给命令的列表:
['arn:aws:iam::aws:policy/AmazonAppStreamFullAccess', 'arn:aws:iam::aws:policy/AmazonAPIGatewayAdministrator']
我正在尝试使用以下命令从列表中删除括号和单引号:
managed_policies_list = str(managed_policies_list).replace('[','').replace(']','').replace('\'','')
我在使用删除策略命令时遇到问题,因为引号没有从列表中删除。这是在 strip 命令之后 managed_policies_list 的样子:
'arn:aws:iam::aws:policy/AmazonAppStreamFullAccess, arn:aws:iam::aws:policy/AmazonAPIGatewayAdministrator'
当我运行此代码试图从用户中删除策略时:
managed_user_policies = (iam_client.list_attached_user_policies(UserName=user_name))
tree = objectpath.Tree(managed_user_policies)
managed_policies_list = set(tree.execute('$..AttachedPolicies[\'PolicyArn\']'))
managed_policies_list = list(managed_policies_list)
managed_policies_list = str(managed_policies_list).replace('[','').replace(']','').replace('\'','')
for policy_arn in managed_policies_list:
print(f"Removing: {policy_arn} from User: {user_name}.")
detach_user_policy_response = (iam_client.detach_user_policy(UserName=user_name,PolicyArn=\'policy_arn\'))
我收到此错误,因为报价没有被剥离:
'arn:aws:iam::aws:policy/AlexaForBusinessReadOnlyAccess'
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "C:\Users\tdunphy\AppData\Local\Programs\Python\Python37-32\lib\site-packages\botocore\client.py", line 357, in _api_call
return self._make_api_call(operation_name, kwargs)
File "C:\Users\tdunphy\AppData\Local\Programs\Python\Python37-32\lib\site-packages\botocore\client.py", line 634, in _make_api_call
api_params, operation_model, context=request_context)
File "C:\Users\tdunphy\AppData\Local\Programs\Python\Python37-32\lib\site-packages\botocore\client.py", line 682, in _convert_to_request_dict
api_params, operation_model)
File "C:\Users\tdunphy\AppData\Local\Programs\Python\Python37-32\lib\site-packages\botocore\validate.py", line 297, in serialize_to_request
raise ParamValidationError(report=report.generate_report())
botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid length for parameter PolicyArn, value: 1, valid range: 20-inf
我怎样才能正确地做到这一点?
解决方案
据我所知,您的命令中没有括号也没有单/双引号。您看到的不是命令(字符串)的一部分:
- 方括号 (
[ ]
) 表示它是一个列表/数组。 - 引号 (
'
"
) 表示它是一个字符串。
这些是 Python 解释器的常规指示符,可帮助您查看正在使用的数据类型(字符串、整数、字典等)。
看:
riverman@ubuntu:~$ python3
Python 3.7.3 (default, Apr 3 2019, 05:39:12)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
aws_iam_mp_list = ['arn:aws:iam::aws:policy/AmazonAppStreamFullAccess', 'arn:aws:iam::aws:policy/AmazonAPIGatewayAdministrator']
aws_iam_mp_list # Typing a variable's name into the interpreter prints their content
['arn:aws:iam::aws:policy/AmazonAppStreamFullAccess', 'arn:aws:iam::aws:policy/AmazonAPIGatewayAdministrator']
for managed_policy in aws_iam_mp_list:
print(managed_policy)
arn:aws:iam::aws:policy/AmazonAppStreamFullAccess
arn:aws:iam::aws:policy/AmazonAPIGatewayAdministrator
当您以编程方式使用结果时,这些指标将不会成为代码的一部分。
我对你的理解正确吗?
推荐阅读
- java - 创建不同形状的像素?
- ruby - 运行 RSpec 测试后文件夹具被删除
- android - Android In App 计费失败并显示响应代码 6
- visual-studio-2015 - 在 Q# Quantum Dev kit 中出现错误“已发布的 qubits 未处于零状态”
- sql - 在@SQL 之前替换电子邮件地址中的字母
- regex - 正则表达式:前两个字符中至少一个必须是字母
- java - Apache WS44J 未正确获取环境变量
- python - 升级到 Anaconda Navigator 1.8.7/Python 3.6 (Windows 10) 后无法打开 RStudio 1.1.423
- ruby-on-rails - 将 RSpec 与 Rails 5+ 一起使用时,我应该使用什么来代替“分配”?
- java - 从静态方法返回一个类对象