paulmcguire,pyparsing的作者,是kind enough to help a lot with a problem I'm trying to solve。我们已经落后1码了,但我甚至不能把球踢过球门线。孔子说,如果他给了一个学生1/4的答案,而他没有带着另外3/4的答案回来,那么他就不会再教这个学生了。所以,在经历了将近一周的挫折之后,我怀着极大的焦虑问这个问题。。。在
如何打开用于pyparsing的输入文件并将输出打印到另一个文件?在
这是我目前所得到的,但这确实是他的全部工作
from pyparsing import *
datafile = open( 'test.txt' )
# Backaus Nuer Form
num = Word(nums)
accessionDate = Combine(num + "/" + num + "/" + num)("accDate")
accessionNumber = Combine("S" + num + "-" + num)("accNum")
patMedicalRecordNum = Combine(num + "/" + num + "-" + num + "-" + num)("patientNum")
gleason = Group("GLEASON" + Optional("SCORE:") + num("left") + "+" + num("right") + "=" + num("total"))
patientData = Group(accessionDate + accessionNumber + patMedicalRecordNum)
partMatch = patientData("patientData") | gleason("gleason")
lastPatientData = None
# PARSE ACTIONS
def patientRecord( datafile ):
for match in partMatch.searchString(datafile):
if match.patientData:
lastPatientData = match
elif match.gleason:
if lastPatientData is None:
print "bad!"
continue
print "{0.accDate}: {0.accNum} {0.patientNum} Gleason({1.left}+{1.right}={1.total})".format(
lastPatientData.patientData, match.gleason
)
patientData.setParseAction(lastPatientData)
# MAIN PROGRAM
if __name__=="__main__":
patientRecord()
看来你需要帮忙把它组装起来。@BrenBarn的建议很贴切,在你把它们放在一起之前先处理简单复杂的问题。我给你举一个简单的例子来帮你。您可以将其用作learn how to read/write a file in python的模板。考虑输入文本文件
data.txt
:让我们解析这个文件并输出结果。为了好玩,让我们把第二列乘以2:
^{pr2}$这给出了
data2.txt
:把每一部分都分解,直到你明白为止。从这里开始,您可以慢慢地将这个最小的示例应用于上面更复杂的问题。从Paul himself notes开始读入文件(只要文件相对较小):
看起来您需要调用
datafile.read()
才能读取文件的内容。现在您正在尝试对file对象本身调用searchString,而不是文件中的文本。您应该看看Python教程(尤其是this section)来了解如何读取文件等相关问题 更多 >
编程相关推荐