我正在使用python创建基于CLI的待办事项列表应用程序,其中包含以下字段:['T.No','Date','Task','Project','Context','Message' ,“状态”]
所以我想要的是当我输入任务时,例如“遇到@Sam和@Jack” 该代码将Sam和Jack识别为“ @”并将其存储在“ Context”列中 样本csv文件:https://drive.google.com/open?id=1mosno15x3XaBMN4k93E8fFwi32pvmXdP
我写了一个用@标识的代码,但是如果有多个以'@'开头的单词,则不包含所有值。如果没有以'@'开头的单词,则会产生错误。
import csv
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-o', '--option', metavar='', help='-o <option> write either you want to add or view')
parser.add_argument('-t', '--task', metavar='', help='-t <task> Enter the task you want to add in the list')
parser.add_argument('-m', '--msg', metavar='', help='-d <description>Enter the description of the task you want to add')
parser.add_argument('-s', '--done', metavar='', help='-s Enter the status Complete if it is', default='Incomplete')
parser.add_argument('-p', '--project', metavar='', help='-d <project> Enter the project name')
parser.add_argument('-l', '--select', metavar='', help='-l <used to select the task for modification')
args = parser.parse_args()
def addtask():
r = args.task.split()
for i in r:
if i.startswith("@"):
q = i
time = datetime.datetime.now()
t = time.strftime("%d/%m/%Y")
writer.writerow({'T.No': x, 'Date': t, 'Task': args.task, 'Project': args.project,
'Context': q, 'Message': args.msg, 'Status': args.done})
print('TASK ADDED SUCCESSFULLY')
它不能识别以'@'开头的多个单词并产生
Traceback (most recent call last):
File "todoarg.py", line 123, in <module>
main()
File "todoarg.py", line 109, in main
addtask()
File "todoarg.py", line 44, in addtask
'Context': q, 'Message': args.msg, 'Status': args.done})
UnboundLocalError: local variable 'q' referenced before assignment
如果没有以“ @”开头的单词
答案 0 :(得分:1)
您必须在for循环之前定义一个变量,这会将所有以&开头的字符串变成一个列表:
r = args.task.split()
q = []
for i in r:
if i.startswith("@"):
q.append(i)
答案 1 :(得分:1)
您需要记住列表中的所有q
,然后插入列表以为每个q写入新行:
def addtask():
r = args.task.split()
qs = []
for i in r:
if i.startswith("@"):
qs.append(i)
time = datetime.datetime.now()
t = time.strftime("%d/%m/%Y")
for q in qs:
writer.writerow({'T.No': x, 'Date': t, 'Task': args.task, 'Project': args.project,
'Context': q, 'Message': args.msg, 'Status': args.done})
print('TASK ADDED SUCCESSFULLY')
您还可以组合两个循环并直接写行,而不是先附加到列表。
编辑:在澄清之后,您不想为每个上下文都添加一行:
def addtask():
r = args.task.split()
qs = []
for i in r:
if i.startswith("@"):
qs.append(i)
time = datetime.datetime.now()
t = time.strftime("%d/%m/%Y")
q = ",".join( qs )
writer.writerow({'T.No': x, 'Date': t, 'Task': args.task, 'Project': args.project,
'Context': q, 'Message': args.msg, 'Status': args.done})
print('TASK ADDED SUCCESSFULLY')