python-在特定单词后面获取一个字符串

时间:2018-03-29 09:03:02

标签: python json string

我正在搜索具有特定主题的JIRA票证。我将结果放入JSON文件中(整个文件:https://1drv.ms/f/s!AizscpxS0QM4attoSBbMLkmKp1s

我写了一个python代码来获取故障单描述

#!/usr/bin/python
import sys
import json

if sys.version[0] == '2':

    reload(sys)

    sys.setdefaultencoding("utf-8")

sys.stdout = open('output.txt','wt')
datapath = sys.argv[1]
data = json.load(open(datapath))
for issue in data['issues']:
  if len(issue['fields']['subtasks']) == 0 or 'description' in issue['fields']:
   custom_field = issue['fields']['description']
   my_string=custom_field
   #print custom_field
   print my_string.split("name:",1)[1] 

某些故障单在说明中具有此值:

 "description": "name:some name\r\n\r\ncount:5\r\n\r\nregion:some region\r\n\r\n\u00a0",

我需要在所有门票的名称,计数和区域之后获取值:

所需的输出(在此示例中为JSON文件):

some name 5  some region
some name 5  some region

使用上面的代码,我可以获得名称

之后的所有值
some name^M
^M
count:5^M
^M
region:some region

另外,如何跳过处理说明中没有这些值的票证,在这种情况下我得到:

 print custom_field.split("name",1)[2]
IndexError: list index out of range

2 个答案:

答案 0 :(得分:1)

这看起来像正则表达式的工作:

>>> import re
>>> x = r"(\w+):(.+)\r\n\r"
>>> regexp = re.compile(x)
>>> s = "name:some name\r\n\r\ncount:5\r\n\r\nregion:some region\r\n\r\n\u00a0"
>>> regexp.findall(s)
[('name', 'some name'), ('count', '5'), ('region', 'some region')]

或者,如果你想要一本字典,

>>> dict(regexp.findall(s))
{'count': '5', 'region': 'some region', 'name': 'some name'}

您可以从dict中删除键:

>>> mydict = dict(regexp.findall(s))
>>> mydict.values()
mydict.values()
['5', 'some region', 'some name']

但要小心,因为它们可能不符合您的预期。要匹配您想要的输出:

>>> mydict = dict(regexp.findall(s))
>>> print("{name} {count:2s} {region}".format(**mydict))
some name 5  some region

如果您没有预期值,findall()调用将返回空列表或不完整列表。在这种情况下,您必须在打印之前检查返回的dict,否则format()调用将失败。

确保dict始终具有预期值的一种方法是事先使用默认值进行设置。

>>> mydict = {'count': 'n/a', 'region': 'n/a', 'name': 'n/a'}
>>> mydict.update(dict(regexp.findall(s)))

然后format()调用将始终有效,即使数据中缺少其中一个字段。

答案 1 :(得分:0)

你可以使用这个try catch表达式

cmd