2 回答
TA贡献1825条经验 获得超6个赞
我相信要解决您当前的问题,如果您只尝试解析一行,您只需将第二line = fp.readline()行移动到 while 循环的末尾。目前,您实际上是从第二行开始解析,因为您已经readline在示例代码的第一行中使用了 a 。
更改后将如下所示:
line = fp.readline() # read in the first line
fw = open('output.txt', "w+")
cnt = 1
while line:
print("Line {}: {}".format(cnt, line.strip()))
line = line.split(')')[0]
fw.write(line + "\n")
cnt += 1
line = fp.readline() # read in next line after parsing done
您的示例输入文本的输出:
WELD 190 制造 I MasterCAM 简介(3
TA贡献1860条经验 获得超8个赞
假设您的其他类文本块与您显示的具有相同的结构,您可能希望使用正则表达式来提取类名和类号:
下面我假设每个文本块都包含信息“XX 小时讲座”,顺序相同,其中“XX”代表任何类型的数字(时间范围)。在变量“match_re”中,我定义了一个正则匹配表达式以仅匹配定义的点“XX 小时讲座”。通过使用“match.group(2)”,我将匹配限制在最里面的括号对中的部分。
下面的匹配表达式可能对您来说还不完整,因为我不知道您的整个文本文件。
下面我提取字符串:WELD 190 Manufacturing I MasterCAM简介(3)
import re
string = "WELD 190 Manufacturing I Introduction to MasterCAM (3) 1½ hours lecture - 4½ hours laboratory Note: Cross listed as DT 190/ENGR 190/IT 190 This course will introduce the students to MasterCAM and 2D and basic 3D modeling. Students will receive instructions and drawings of parts requiring 2- or 3-axis machining. Students will design, model, program, set-up and run their parts on various machines, including plasma cutters, water jet cutters and milling machines. WELD 197 Welding Technology Topics (.5 - 3)"
match_re = "(^(.*)\d.* hours lecture)"
match = re.search(match_re,string)
if match:
print(match.group(2))
else:
print("No match")
添加回答
举报