如何读取然后拆分解析并写入文本文件?

How to read then parse with split and write into a text file?

我正在努力让 readline() 和 split() 像我期望的那样协同工作。我正在尝试使用 .split(')') 从文本文件中删除一些数据并将其中一些数据写入下一个文本文件。

我已经尝试从一行中写出所有内容。 我已尝试 [cnt % 2] 得到我期望的结果。

   line = fp.readline()
   fw = open('output.txt', "w+")
   cnt = 1
   while line:
       print("Line {}: {}".format(cnt, line.strip()))
       line = fp.readline()
       line = line.split(')')[0]
       fw.write(line + "\n")
       cnt += 1

示例来自我正在读取的文本文件。

WELD 190 Manufacturing I MasterCAM简介(三) 1½ 小时讲座 - 4½ 小时实验室 注意:交叉列为 DT 190/ENGR 190/IT 190 本课程将向学生介绍 MasterCAM 和 2D 以及基本的 3D 造型。学生将收到需要零件的说明和图纸 2 轴或 3 轴加工。学生将设计、建模、编程、设置和 运行 它们在各种机器上的零件,包括等离子切割机、水刀切割机和 铣床。 WELD 197 焊接技术主题 (.5 - 3)

我离真正有效地抓取这些数据还有很长的路要走,但我正在努力开始。

我的目标是仅提取 class 名称和号码并删除描述。

一如既往的感谢!

我相信要解决您当前的问题,如果您只想解析一行,则只需将第二行 line = fp.readline() 移动到 while 循环的末尾即可。目前,您实际上是从第二行开始解析,因为您已经在示例代码的第一行中使用了 readline

更改后看起来像这样:

   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 Manufacturing I Introduction to MasterCAM (3

假设您的其他 class 文本块与您展示的文本块共享相同的结构,您可能需要使用 正则表达式 来提取 class姓名和 class 号码:

接下来,我假设每个文本块都包含信息 "XX hours lecture",顺序相同,其中 'XX' 代表任何类型的数字(时间范围)。在变量 'match_re' 中,我定义了一个正则匹配表达式,只匹配定义的点 'XX hours lecture'。通过使用 'match.group(2)' 我将匹配限制在最里面的括号对中的部分。

下面的匹配表达式对你来说可能还不完整,因为我不知道你的整个文本文件。

下面我提取字符串:WELD 190 Manufacturing I MasterCAM入门(三)

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")