我可以使用正则表达式,但我想知道是否有更好的方法.
例如,值可能返回为:
1.) '{"username": "joe.soap", "password": "pass@word123"}'
要么
2.) 'https://www.url-example.com'
在1.)的情况下我想将内容转换为实际的字典.我很高兴我知道如何进行转换.我坚持如何识别1.)而不回复使用正则表达式.
编辑:因为有人问我,这就是我计划进行转换的方式:
import ast
if string_in_question == '{"username": "joe.soap", "password": "pass@word123"}':
return ast.literal_eval(str??ing_in_question)
else:
return valid_command_return??s
Run Code Online (Sandbox Code Playgroud)
不要打扰复杂的正则表达式,只需尝试将字符串转换为字典.
我假设你正在使用json.loads它.如果字符串不表示字典json.loads将引发异常.
请注意,如果使用json.loads转换将失败如果"键"没有用双引号括起来,即尝试将字符串转换"{'username': 'joe.soap', 'password': 'pass@word123'}"为字典也会引发异常.
import json
a = '{"username": "joe.soap", "password": "pass@word123"}'
b = 'https://www.url-example.com'
try:
json.loads(a)
except ValueError:
print("{} is not a dictionary".format(a))
try:
json.loads(b)
except ValueError:
print("{} is not a dictionary".format(b))
Run Code Online (Sandbox Code Playgroud)
该程序的输出将是
https://www.url-example.com is not a dictionary
更新:
当使用ast.literal_eval概念是相同的,但你将不得不抓住SyntaxError而不是ValueError.请注意,literal_eval单引号和双引号都可以接受.
import ast
a = '{"username": "joe.soap", "password": "pass@word123"}'
b = "{'username': 'joe.soap', 'password': 'pass@word123'}"
c = 'https://www.url-example.com'
try:
ast.literal_eval(a)
except SyntaxError:
print("{} is not a dictionary".format(a))
try:
ast.literal_eval(b)
except SyntaxError:
print("{} is not a dictionary".format(b))
try:
ast.literal_eval(c)
except SyntaxError:
print("{} is not a dictionary".format(c))
Run Code Online (Sandbox Code Playgroud)
和以前一样,输出是https://www.url-example.com is not a dictionary.
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |