我正在搜索具有特定主题的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
答案 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