Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何读取然后用split解析并写入文本文件?_Python_Split_Io_Readline_Modulus - Fatal编程技术网

Python 如何读取然后用split解析并写入文本文件?

Python 如何读取然后用split解析并写入文本文件?,python,split,io,readline,modulus,Python,Split,Io,Readline,Modulus,我正在努力让readline()和split()像我期望的那样协同工作。我正在尝试使用.split(“)”)从文本文件中剪切一些数据,并将其中一些数据写入下一个文本文件 我试着把所有的东西都写下来。 我已尝试[cnt%2]以获得我所期望的结果 line = fp.readline() fw = open('output.txt', "w+") cnt = 1 while line: print("Line {}: {}".format(cnt, line.s

我正在努力让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
示例来自im读取的文本文件

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

我离实际有效地抓取这些数据还差得很远,但我正在尝试开始

我的目标是只提取类名和编号,并删除描述


一如既往地谢谢你

我认为要解决当前的问题,如果您只想解析一行,只需将第二行
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
示例输入文本的输出:

焊接190制造I MasterCAM简介(3


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

接下来,我假设每个文本块都包含信息“XX小时讲座”,其顺序与“XX”表示任何类型的数字(时间范围)的顺序相同。在变量“match_re”中,我定义了一个正则匹配表达式,仅与定义的地点“XX小时讲座”匹配。并使用“match.group(2)'我将匹配限制为最内侧括号对内的零件

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

下面我提取字符串:焊接190制造I MasterCAM简介(3)


你想提取哪一个类名?每个类名还是第一个?你说的类名是指WELD 190,还是说WELD 190作为课程代码,制作我的MasterCAM入门作为类名?@Enthus3d更正抱歉误解。啊,我明白了。如果你要解析这么长的文件,这看起来确实是一个错误我想你也许可以用一个正则表达式来抓取每一个有这种结构的课程,但是去掉重复的可能会很痛苦。[这里](regexr.com/4le96)是我根据你的文件制作的一个例子。它很难处理换行符,但regexr网站是我在我的Uni regex重量级课程中经常使用的。祝你好运!哦,一点问题都没有。使用在线解释器很容易。是的,语法是相当通用的,尽管不同的语言在f对功能的支持。Regex是我的第二个想法。我对它感到非常不舒服。我很可能会在某个时候实现它,因为它的结构更复杂。我会尝试一下。我可以发布你想浏览的整个文本文件吗?@HYUTS:很抱歉时间延迟。我自己不是Regex大师。但是,如果你发布的话,是的整个文本文件(或者更多的文件来理解它的结构)我或者其他人可以尝试更多。我不想让任何人花时间在它上面,我感谢你的提议。我只是需要一个开始,现在我知道我需要regex,我可以试着想出一些策略。
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")