我有一個程序,它從文本文件中讀取命令幫助與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