Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以格式化文本输入,以便Python将其识别为列表?_Python_List_Python 2.7_Input_User Input - Fatal编程技术网

是否可以格式化文本输入,以便Python将其识别为列表?

是否可以格式化文本输入,以便Python将其识别为列表?,python,list,python-2.7,input,user-input,Python,List,Python 2.7,Input,User Input,我有一个控制台应用程序,提示用户输入各种输入。很好 现在,我想向调用的函数添加一些附加参数,以允许用户过滤结果。特别是,我希望用户能够输入一个日期范围,以返回在该时间段内创建的所有记录 我可以向函数中添加两个单独的参数,例如lowerDateLimit和upperDateLimit。但在我看来,接受一对值作为元组更为整洁:dateLimits,它的形式是:(lowerDateLimit,upperDateLimit) 对于在控制台中输入文本的用户,是否有任何方法可以格式化他们的输入,以便Pyth

我有一个控制台应用程序,提示用户输入各种输入。很好

现在,我想向调用的函数添加一些附加参数,以允许用户过滤结果。特别是,我希望用户能够输入一个日期范围,以返回在该时间段内创建的所有记录

我可以向函数中添加两个单独的参数,例如lowerDateLimit和upperDateLimit。但在我看来,接受一对值作为元组更为整洁:dateLimits,它的形式是:(lowerDateLimit,upperDateLimit)

对于在控制台中输入文本的用户,是否有任何方法可以格式化他们的输入,以便Python将其识别为列表或元组


或者更具python风格的做法是只使用两个单独的参数作为日期下限和上限吗?

我还不能评论,但如果您需要列表而不是元组,ast.literal\u eval可以通过包含括号来处理:

In [84]: nums = [int(i) for i in raw_input("Enter space separated integers: ").split()]
Enter space separated integers: 1 5 6 7 3 56  2 3 4 2 1

In [85]: nums
Out[85]: [1, 5, 6, 7, 3, 56, 2, 3, 4, 2, 1]
In [1]: import ast

In [2]: ast.literal_eval('[1,2,3]')
Out[2]: [1, 2, 3]

我还不能评论,但是如果您需要列表而不是元组,ast.literal\u eval可以通过包含括号来处理:

In [1]: import ast

In [2]: ast.literal_eval('[1,2,3]')
Out[2]: [1, 2, 3]

如果您使用的是
input
确保他们只需要输入逗号分隔的值。。。如果您使用的是
raw_input
,您总是会得到一个字符串……您希望日期采用哪种格式?
(2013,6,7)
有效吗?还是需要解析“2013年2月13日”之类的数字格式?只是一个提示:通用解析库(如
ast.literal\u eval
)可能有效,但可能太难实现,不可能是一个好的实用选择。我建议选择一种输入格式并构建一个解析器,如@inspectorG4dget has done.@DSM:我希望能将日期的多种格式解析为文本。例如“2013年2月13日”、“2013年2月13日”、“2013年2月13日”、“2013-02-13”。@DSM:如果我不知道将使用哪种格式,则看起来非常适合解析多个日期格式。如果您使用的是
input
确保他们只需要输入逗号分隔的值。。。如果您使用的是
raw_input
,您总是会得到一个字符串……您希望日期采用哪种格式?
(2013,6,7)
有效吗?还是需要解析“2013年2月13日”之类的数字格式?只是一个提示:通用解析库(如
ast.literal\u eval
)可能有效,但可能太难实现,不可能是一个好的实用选择。我建议选择一种输入格式并构建一个解析器,如@inspectorG4dget has done.@DSM:我希望能将日期的多种格式解析为文本。例如“2013年2月13日”、“2013年2月13日”、“2013年2月13日”、“2013-02-13”。@DSM:如果我不知道将使用哪种格式,那么它似乎非常适合解析多个日期格式。ast.literal_eval()和eval()之间的区别是什么?ast.literal_eval()只是eval()的一个更安全的版本吗?@SimonTewsi:不仅如此,它还将只允许看起来像Python文本的输入。在玩了一会儿之后,我决定将此作为解决方案。对计划使用ast.literal_eval(raw_input())的其他人的一个警告:我发现,如果我作为用户尝试输入纯文本,而不是逗号分隔的列表,那么在使用ast.literal_eval时,我必须将文本括在引号中。因此,我添加了一个分支:对于预期为列表的用户输入,请使用ast.literal_eval(raw_input()),否则只需使用raw_input(),这样用户就不需要将其条目括在引号中。关于我选择执行的操作,我的评论如下:,我还使用dateutil库解析用户在datetime对象中输入的列表中的日期文本?ast.literal_eval()只是eval()的一个更安全的版本吗?@SimonTewsi:不仅如此,它还将只允许看起来像Python文本的输入。在玩了一会儿之后,我决定将此作为解决方案。对计划使用ast.literal_eval(raw_input())的其他人的一个警告:我发现,如果我作为用户尝试输入纯文本,而不是逗号分隔的列表,那么在使用ast.literal_eval时,我必须将文本括在引号中。因此,我添加了一个分支:对于预期为列表的用户输入,请使用ast.literal_eval(raw_input()),否则只需使用raw_input(),这样用户就不需要将其条目括在引号中。关于我选择的操作,我还使用dateutil库解析用户输入datetime对象的列表中的日期文本。