Разбор текстового файла для строки, в Python - PullRequest
1 голос
/ 04 августа 2011

система генерирует текстовый файл.он содержит более 100 строк.Я хотел бы получить строку в файле.

some text **
Actions Pending are: Action-1, Action-2,....Action-3 (this is another new line)
some text**

необходимо получить Действия в массиве.

я использовал

for index in text:
    rc.logMessage(str(index))

это печать каждогосимвол за раз, а не строка.

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

Заранее спасибо

Ответы [ 7 ]

4 голосов
/ 04 августа 2011

Что-то вроде:

d = """some text **
Actions Pending are: Action-1, Action-2, Action-3
some text**
"""
res = []
for line in re.findall('Actions Pending are: (.+)', d):
    res.extend([action.strip() for action in line.split(',')])
['Action-1', 'Action-2', 'Action-3']
3 голосов
/ 04 августа 2011

Вам нужно перебирать файл , а не строку, считанную из файла.

with open(filename) as text:
    for line in text:
         rc.logMessage(some_function_of_the_line(line))

Перебор файла дает вам строки;итерация по строке дает вам символы / байты.

3 голосов
/ 04 августа 2011

Вы можете попробовать что-то вроде этого:

pendingActions = []
textToSearch = 'Actions Pending are:'
for line in open(filename, 'r'):
    line = line.strip()
    if line and line.startswith(textToSearch):
        pendingActions.extend([x.strip() for x in line[len(textToSearch):].split(',') if x.strip()])
2 голосов
/ 04 августа 2011

Вы хотите str.splitlines() http://docs.python.org/library/stdtypes.html#str.splitlines

for index in text:
    rc.logMessage(str(index))

становится:

for index in text.splitlines():
    rc.logMessage(str(index))
1 голос
/ 04 августа 2011

Попробуйте что-то вроде этого

with file("your_file") as logfile:
   result = [line for line in logfile if line.startswith("Actions pending")]

Таким образом, в результате вы получите все строки действий.

0 голосов
/ 02 октября 2013

Вот одна строка (для развлечения):

s = """some text **
Actions Pending are: Action-1, Action-2, Action-3
Actions Pending are: Action-4, Action-5, Action-6
some text**"""

[a for ln in s.splitlines() if ln.startswith("Actions Pending") for a in ln[len("Actions Pending are: "):].split(', ')]
------
['Action-1', 'Action-2', 'Action-3', 'Action-4', 'Action-5', 'Action-6']

Чтобы использовать файл вместо строки, замените s.splitlines () на f.readlines (). Обратите внимание, я бы не использовал этот код на практике; Это просто для удовольствия.

0 голосов
/ 04 августа 2011
    search_string = 'Actions Pending are: '
    for line in open('yourfile.txt', 'r').readlines():
      if line.startswith(search_string):
        actions = line[len(search_string):].split(',')
        break
    print actions

Artsiom был быстрее: парсинг текстового файла для строки в python , возможно, моя версия более читабельна.

...