字符串中的Python查找方法似乎失败

时间:2015-07-24 14:56:57

标签: python

我有一个像这样的文本文件:http://pastie.org/10309944

这包含与可能与之关联的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对象:

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

这段代码实际上有效,但是当我将SegmentsUsedFinder构造函数中的字符串调整为271或837时,由于某种原因它会失败。我想我可能会滥用find方法,但它适用于第一个实例。如果我将2添加到位置并且为837工作,如果我将4添加到位置,我也可以使它工作271。

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分: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 ,因为它影响了内置的文件类型。