2015-07-24 2 views
0

У меня есть текстовый файл, например так: http://pastie.org/10309944Python Найти метод в строках кажется, терпит неудачу

Это содержит число, соответствующие списки сегментов EDI, которые могли бы быть связаны с ними. Моя цель - написать скрипт, который вводит один из этих кодов (числа) в качестве входных данных и выводит соответствующие списки. Списки окружены символами «-», чтобы упростить синтаксический анализ.

Я написал следующий код: `class SegmentsUsedFinder (object): '' 'Находит код транзакции и возвращает возможные сегменты. «»»

def __init__(self, transaction_code): 
    '''Initializes the segment finder. 

    Args: 
     transaction_code: The transaction code to find possible segments from. 
    ''' 
    self._transaction_code = transaction_code + " -" 

def find_segment(self): 
    '''Finds the possible segments that correspond to the 
     transaction code. 
    ''' 
    fileObject = open("transactioncodes.txt", 'r') 
    data = "" 
    for line in fileObject: 
     line = line.rstrip('\n').rstrip() 
     data += line 
    fileObject.close() 

    position = data.find(self._transaction_code) + len(self._transaction_code) 

    with open("transactioncodes.txt", 'r') as file: 
     file.seek(position) 
     segments = "" 
     char = "" 
     while True: 
      char = file.read(1) 
      if char == "-": 
       break 
      segments += char 
    return segments 

Я затем создать объект искателя так:

finder = SegmentsUsedFinder("270") 
print finder.find_segment() 

Этот код на самом деле работает, но когда я регулирую строку внутри конструктора SegmentsUsedFinder до 271 или 837 он не по какой-то причине , Я думаю, что я, возможно, неправильно использую метод find, но он работает для первого экземпляра. Я также могу заставить его работать 271, если я добавлю 2 к позиции и буду работать на 837, если я добавлю 4 в позицию.

Любая помощь была бы принята с благодарностью, спасибо.

+1

В чем смысл наличия значения в 'data' и последующего использования файла для поиска? Почему бы вам не выполнить поиск внутри данных для 837, найти 1-й «-» из этой позиции и 2-й «-» с этой позиции? Текст между 2 "-" - это то, что вы ищете. Это правильно? – shahkalpesh

+0

Да, это правильно, я думаю, вы правы, что мне действительно не нужно открывать файл снова. – EgoKilla

+0

Вы удаляете правое пустое пространство и символы новой строки в первом поиске, но не во втором. Это может просто дать вам разницу в позиции 2/4. – Evert

ответ

1

Вот как ваш метод find_segment должен выглядеть следующим образом:

def find_segment(self): 
    '''Finds the possible segments that correspond to the 
     transaction code. 
    ''' 
    with open("transactioncodes.txt", 'r') as _file: 
     for line in _file: 
      if line.startswith(self._transaction_code): 
       return line[len(self._transaction_code):line.rfind("-")] 
    return "" 

Конечно, это может быть улучшено (имя файла, чтобы быть частным членом класса), но это прототип, который работает (при условии, что все линии соответствуют шаблону: ID -LIST-).

Примечание: Я также переименовал имя переменной _file, потому что он был затенять встроенный файл типа.

+0

Гораздо более элегантный, чем мой, спасибо! – EgoKilla

Смежные вопросы