如何并排表示多个字符串数据(列表),并使用Python 3.2或更高版本进行比较?
我是Python的初学者 我的任务是编写一个交互式文本库程序,该程序有三个功能:如何并排表示多个字符串数据(列表),并使用Python 3.2或更高版本进行比较?,python,variable-assignment,Python,Variable Assignment,我是Python的初学者 我的任务是编写一个交互式文本库程序,该程序有三个功能: 要求用户输入要使用的数据/文件(.text)的名称 然后要求他们输入命令: 一,sd yyyymmdd yyyymmdd-->命令1 其中sd=当天(其间)所有服务器的互联网负载,但I 有2个文本文件,注意所有值必须作为列返回/打印 二,dl服务器1服务器2-->命令2 其中dd=服务器1和服务器2之间的负载差异 从所选文件中,他们可以使用以下命令查看平均服务器负载: iii.年度YYYY--->命令3 显示从第一
年度YYYY--->命令3
显示从第一年(YYYY)到最后一年(YYYY)的一般负荷/平均负荷。问题#1: 我应该使用
s.spilt()
问题#2:
使用bool
函数(True、False)可以吗?您试图构建的部分是命令解析器
如果您的命令语言非常简单,那么可以使用split
。只有在以下情况下,这才有效:
- 命令行总是恰好是一行
- 命令和参数被任何空格分割(特定的空格并不重要)
- 在任何命令名或参数中都不可能有空格(甚至不带引号或转义)
如果所有这些都是真的,那么您的解析器就非常简单:
cmd, *args = line.strip().split()
如果输入是'sd yyyyymmdd yyyymmdd\n'
,那么您将得到cmd='sd'
和args=['yyyyyymmdd','yyyyymmdd']
,这(我认为)是您想要的。然后,如果您有一个dict映射命令名到处理这些命令的函数,您可以执行以下操作:
handlers[cmd](*args)
在本例中,如果您的处理程序
是{'sd':handle\u sd,'q':handle\u quit}
,那么这将调用handle\u sd('yyyyymmdd','yyyyymmdd')
,我想这也是您想要的。(当然,在现实生活中,您需要一些错误处理,以防用户键入dict中没有的命令名,或者给出错误的参数数,但这只是一个简单的示例。)
如果您需要一些更复杂的东西,例如,在参数中包含引号或转义空格的方法,类似于bash
或cmd.exe
shell的方式,那么您可能可以使用csv
模块(或者shlex
模块)
如果您需要更复杂的东西,您需要构建自己的解析器,使用类似于pyparsing
的东西
您可能还希望了解如何使用该模块,而不是围绕input
编写自己的循环,在地图中查找cmd
字符串等。请参见文档页面底部的示例。PyPI上还有许多功能更强大的选项供您搜索。如果您意识到您的问题难以理解,请不要添加解释如何阅读的注释,只需编辑该问题,这样就可以在第一时间阅读。对于糟糕的文字,我深表歉意。我不知道如何编辑stackoverflow中的文字,因为每当你按“回车”键时,它都会输入一条“评论”。道歉既没有必要,也没有帮助。再次编辑问题。我希望这对现在有所帮助。(请注意,不同服务器的数据都是以.text文件的形式提供给我的,我不知道在编写之前是否应该导入它们)我仍然没有真正理解它。i.
是命令的一部分吗?还是使用-->命令1
?也许给我们看一个真实用户输入的假文本?谢谢你的指导,但是,如果我不想使用全局变量,我该怎么办???@WhomICan:你的意思是你不想让命令映射成为全局变量?然后将整个命令处理器包装在一个类中,并使命令映射成为一个实例变量。即使您不想使用cmd
模块,也应该看看它是如何实现的。以及一些第三方替代方案。还可以看看一些RPC服务处理器,比如说bjsonrpc
,它们具有类似的设计,即使它们的内部结构非常不同。@WhomICan值得注意的是,仅仅在Python源文件的顶部粘贴一个文本并没有那么糟糕(可能一点也不糟糕?)正如一些黑客所做的那样,在C语言中使用全局变量更符合“全局变量不好”的口号。@BlacklightShining:很好的解释。当然,在Python中,在顶层定义的每个函数和类都是一个全局变量(因为,与C及其亲属不同,它们是第一类对象,以与任何其他值相同的方式存储在变量中)…