我有一个程序,它从文本文件中读取命令帮助与Python字符串
例如,命令语法将如下并且是一个字符串
'index command param1 param2 param3'
的参数的数目是从0到3 索引变量是整数 命令是字符串 所有PARAMS是整数
我想,这样我不得不分割它们名单如下
[index,'command',params[]]
什么是做到这一点的最好方法是什么?
感谢
我有一个程序,它从文本文件中读取命令帮助与Python字符串
例如,命令语法将如下并且是一个字符串
'index command param1 param2 param3'
的参数的数目是从0到3 索引变量是整数 命令是字符串 所有PARAMS是整数
我想,这样我不得不分割它们名单如下
[index,'command',params[]]
什么是做到这一点的最好方法是什么?
感谢
不知道解析行,如果这是最好的方式,但这里有一个方法:
结果将包含
['index', 'command', ['param1', 'param2', 'param3']]
OP想从文件中读取它。 – 2010-01-13 09:58:41
@Amit:添加文件处理步骤 – 2010-01-13 10:07:02
非常感谢各位,你们都非常感谢 – mikip 2010-01-13 10:10:50
line.split()
+1,没关系,只要命令不包含空格 – 2010-01-13 09:59:57
是否有任何命令包含空格? – 2010-01-13 10:38:45
我通常写:
lines = open('a.txt').readlines()
for line in lines:
para = lines.split()
index = int(para[0])
command = para[1]
para1 = float(para[2])
...
我推荐前两行是'f = open(filename)'和'for line in f:',避免将整个文件读入内存。 – 2010-01-13 09:59:55
@Mike,是的,但是通常一个参数文件并不大......并且一个“打印行”可以直接查看文件是否正确加载。 – 2010-01-13 10:02:16
def add_command(index, command, *params):
index = int(index)
#do what you need to with index, command and params here
with open('commands.txt') as f:
for line in f:
add_command(*line.split())
+1,我打算发布非常类似的方式。 – YOU 2010-01-13 10:12:40
>>> for line in open("file"):
... line=line.rstrip().split(" ",2)
... line[0]=int(line[0])
... line[2]=line[2].split()
... print line
...
[1, 'command', ['param1', 'param2', 'param3']]
+1好了,发现OP要索引一个整数 – 2010-01-13 10:34:05
我喜欢这个解决方案,但它不起作用,如果在命令 – mikip 2010-01-13 11:27:06
中有零参数,它的插入代码很容易检查。您可以检查列表的长度是否始终为3,然后执行必要的操作。或者使用try/except等等......很多方法...... – ghostdog74 2010-01-13 11:36:34
通过cb160提供的答案是正确的和聪明的办法,但是,我做了这个样子。 在cb160的代码中,唯一的事情就是索引应该是Integer格式,就像你刚才提到的那样。
在我的下面的代码中,如果有输入文件中的空行添加了异常。
#Example Input File: (file content)
"""
1 command1 parm1a parm1b parm1c
2 command2 parm2a parm2b parm2c
3 command3 parm3a parm3b parm3c
"""
li = []
for line in open('list_of_commands.txt'):
try:
lis = line.split()
li.append([int(lis[0]),lis[1], lis[2:]])
except IndexError:
pass # do nothing if empty lines are found
print li
输出
[1, 'command1', ['parm1a', 'parm1b', 'parm1c']]
[2, 'command2', ['parm2a', 'parm2b', 'parm2c']]
[3, 'command3', ['parm3a', 'parm3b', 'parm3c']]
让我知道如果我错过了什么。
感谢
你为什么要分三次单行?以及您正在捕捉部分线条的空白线条。我会说这个代码比已发布的版本要逊色得多。 – SilentGhost 2010-01-13 11:59:14
@SilentGhose现在编辑我的代码,谢谢你的建议。是的,这非常和谐。现在好吗? – abhiomkar 2010-01-13 12:04:42
它更好,但你不需要“声明”lin。 – SilentGhost 2010-01-13 12:07:00
如果使用的Python 3+,那么下面应该足够在PEP 3132: Extended Iterable Unpacking表示:
(index,command,*parameters) = line.split()
否则,我喜欢詹姆斯最好的解决办法:
def add_command(index, command, *params):
...
你不需要在拆箱版本 – SilentGhost 2010-01-13 12:04:20
中有括号;只是一种习惯:) – van 2010-01-13 13:04:51
字符串是否包含空格? – 2010-01-13 09:58:57