我有一个像这样的文本文件: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。
非常感谢任何帮助,谢谢。
答案 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 ,因为它影响了内置的文件类型。