我正在尝试使用一个函数来返回要执行的任务(对于一个todolist项目),该函数将某些字符串作为参数... 事实上,Iam试图在python 3中编写这个https://github.com/todotxt/todo.txt
所以基本上我有一个我必须填写的词典:•优先级(从最高优先级到Z最低优先级)
•'x'任务是否已完成
•查找并填写完成日期和创建日期(YYYY-MM-DD)
•找到以'@'开头的上下文并更新dict
•找到以“+”开头并更新字典的项目..
•文件中任务的N顺序..(稍后会看到)
•最后没有这些的字符串是任务,所以我用这个任务更新dict并返回它...
到目前为止,这是我的Python代码:
def parser_task(line):
"""
:param:(str) a line
:return: (dict) dict representing the task to do
:Contraints: None?
Examples:
>>> parser_task('x (A) 2018-03-02 2018-03-04 do you homeworks +studies @home')
{'text': 'do your homeworks'}
>>> parser_task('Call mom (A) @ phone @sededay')
{'text': 'Call mom'}
>>> parser_task('X 2019-01-01 wish happy new year to everyone')
{'text': 'wish happy new year to everyone'}
"""
dict = {
'N': '',
'X':'',
'completionDate':'',
'creationDate':'',
'priority':'',
'context':'',
'project':'',
'text':''
}
liste_prioritie = [chr(k) for k in range(ord("A"),ord("Z"))]
ligne_decouped = ligne.split(' ')
for i in range(len(ligne_decouped)):
if '(' in ligne_decouped[i]:
a = ligne_decouped[i]
for char in ligne_decouped[i]:
if char == "(":
a = a.replace(char,"")
if char == ")":
a = a.replace(char,"")
dict['priority'] = a
del ligne_decouped[i]
if 'x' == ligne_decouped[i]:
dict['X'] = ligne_decouped[i]
del ligne_decouped[i]
if '-' in ligne_decouped[i]:
dict['creationnDate'] = ligne_decouped[i]
del ligne_decouped[i]
if '-' in ligne_decouped[i]:
dict['completionDate'] = ligne_decouped[i]
del ligne_decouped[i]
if '+' in ligne_decouped[i]:
dict['project'] = ligne_decouped[i]
del ligne_decouped[i]
if '@' in ligne_decouped[i]:
dict['context'] = ligne_decouped[i]
del ligne_decouped[i]
return ligne_decouped
我一直在if '(' in line_decouped[i]:
感谢您的帮助:)
答案 0 :(得分:0)
我强烈推荐regex
执行此任务(BTW,仍然不确定您打算在词典中分配给N
)。以下内容适用于您提供的示例,但是如果没有多个示例,则无法保证适用于您的所有情况:
import re
def parser_task(ligne):
ligne_decouped = {
'N': '',
'X':'',
'completionDate':'',
'creationDate':'',
'priority':'',
'context':'',
'project':'',
'text':''
}
dates = re.findall(r'\d{4}\-\d{2}\-\d{2}', ligne)
ligne_decouped['creationDate'] = dates[0]
ligne_decouped['completionDate'] = dates[1]
ligne_decouped['priority'] = re.search(r'\(([A-Z])\)', ligne).group(1)
ligne_decouped['context'] = re.search(r'(?<=@)(.*)$', ligne).group(1)
ligne_decouped['X'] = re.search(r'^(.)', ligne).group(1)
ligne_decouped['project'] = re.search(r'(?<=\+)(\S+)', ligne).group(1)
ligne_decouped['text'] = re.search(dates[1] + r'\s+(.*?)\s+\+', ligne).group(1)
return ligne_decouped
print(parser_task('x (A) 2018-03-02 2018-03-04 do you homeworks +studies @home'))
收率:
{
'N': '',
'X': 'x',
'completionDate': '2018-03-04',
'creationDate': '2018-03-02',
'priority': 'A',
'context': 'home',
'project': 'studies',
'text': 'do you homeworks'
}