我想使用从API返回的字符串(“项目”)的一部分。字符串如下所示:
{'Project Title': 'LS003942_EP - 5 Random Road, Sunny Place, SA 5000'}
我想将'LS003942_EP ...'部分存储在名为foldername
的新变量中。我认为一种好方法是使用正则表达式在Title
之后查找文本。这是我的代码:
orders = api.get_all(view='Folder', fields='Project Title', maxRecords=1)
for new in orders:
print ("Found 1 new project")
print (new['fields'])
project = (new['fields'])
s = re.search('Title(.+?)', result)
if s:
foldername = s.group(1)
print(foldername)
这给我一个错误-
TypeError:预期的字符串或类似字节的对象。
我希望有foldername = 'LS003942_EP - 5 Random Road, Sunny Place, SA 5000'
答案 0 :(得分:0)
我认为您不需要在这里使用build_dir
regex
基本上,我要找到第一个冒号的位置,然后加2以获取文件夹名称的起始索引(即单引号),然后使用索引切片并将从索引到第二个的所有内容切片-最后一个字符(最后一个撇号)。
但是,如果您的字符串始终以有效的Python string = "{'Project Title': 'LS003942_EP - 5 Random Road, Sunny Place, SA 5000'}"
foldername = string[string.index(":") + 2: len(string)-1]
的形式出现,则只需执行dict
。在这里,我将您的字符串视为foldername = (eval(string).values)[0]
,并从中获取第一个值,即您想要的dict
。但是,正如@AKX在评论中指出的那样,foldername
是不安全的,因为有人可以将恶意代码作为字符串传递。除非您确定输入字符串中不包含代码(这不太可能),否则最好使用ast.literal_eval(),因为它仅计算文字。
但是,正如@MaximilianPeters在评论中指出的那样,您的回复看起来像是有效的JSON,因此您可以轻松地使用eval()
对其进行解析。
答案 1 :(得分:0)
您可以使用ast.literal_eval
安全地评估包含Python文字的字符串:
import ast
s = "{'Project Title': 'LS003942_EP - 5 Random Road, Sunny Place, SA 5000'}"
print(ast.literal_eval(s)['Project Title'])
# LS003942_EP - 5 Random Road, Sunny Place, SA 5000
(在我看来)您有字典而不是字符串。考虑到这种情况,您可以尝试:
s = {'Project Title': 'LS003942_EP - 5 Random Road, Sunny Place, SA 5000'}
print(s['Project Title'])
如果有时间,请看看dictionaries。
答案 2 :(得分:0)