Помогите с строками Python - PullRequest
       12

Помогите с строками Python

1 голос
/ 13 января 2010

У меня есть программа, которая читает команды из текстового файла

например, синтаксис команды будет следующим и является строкой

'index command param1 param2 param3'

Количество параметров варьируется от 0 до 3 индекс является целым числом команда является строкой все параметры целые числа

Я бы хотел разделить их, чтобы у меня был следующий список

[index,'command',params[]]

Каков наилучший способ сделать это?

Спасибо

Ответы [ 7 ]

8 голосов
/ 13 января 2010

Не уверен, что это лучший способ, но вот один из способов:

lines = open('file.txt')
for line in lines:
   as_list = line.split()
   result = [as_list[0], as_list[1], as_list[2:]]
   print result

Результат будет содержать

['index', 'command', ['param1', 'param2', 'param3']]
5 голосов
/ 13 января 2010
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())
2 голосов
/ 13 января 2010

Я обычно пишу:

lines = open('a.txt').readlines()
for line in lines:
    para = lines.split()
    index = int(para[0])
    command = para[1]
    para1 = float(para[2])
    ...
1 голос
/ 13 января 2010

Если вы используете Python 3 + , тогда должно быть достаточно следующего, как указано в PEP 3132: расширенная повторяемая распаковка :

(index,command,*parameters) = line.split()

В остальном мне больше всего нравится решение от Джеймса:

def add_command(index, command, *params):
    ...
1 голос
/ 13 января 2010
>>> 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 голос
/ 13 января 2010
  1. Открыть файл
  2. Прочитать каждую строку и разобрать строку с помощью line.split( )
0 голосов
/ 13 января 2010

Ответ, предоставленный 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']]

дайте мне знать, если я что-то пропустил.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...