使用正则表达式进行文件处理和文件创建的分隔

问题描述 投票:-1回答:1

我有一个文本文件,其中包含成千上万名学生的工作卷编号,并具有他们的工作卷编号,其中包含学生姓名类别,班级,电话号码,父亲的姓名,母亲的姓名,地址,血统和几个字段和

[[我必须使用血型将它们隔离在单独的文件中,例如血型A +应该放在一个A + .txt中,类似地,对于其他血型,我必须将它们分开

我正在使用正则表达式获取,但不知道如何直接获取文件名并将其输入该文件中
python-3.x regex file-handling re
1个回答
0
投票
鉴于您提供的信息很少,我将不得不做很多猜测工作,但这是可行的。

所以考虑,您的文本文件看起来像这样-

名称= Shunzo Roll No-19227 Blood Group-A +父亲的名字=破折号母亲的名字=破折号

Name = Foo Roll No-19527 Blood Group-B父亲的名字=破折号母亲的名字=破折号

您将使用re.findall在整个数据上运行一个正则表达式,这将为您提供元组列表。

这是正则表达式-^Name=(.+) Roll No-(.+) Blood Group-(.+) father's name=(.+) mother's name=(.+)$

这里是live demo

现在,您需要遍历结果,记住索引及其对应的含义-

    0th->名称
  • 1st-> Roll No
  • 第二->血型
  • 3rd->父亲的名字
  • 4th->母亲的名字
  • 因此,在循环时,您必须检查第二个索引以获取文件名并通过它进行相应的处理-

    import re # Initiallize the pattern DATA_PATTERN = re.compile(r"^Name=(.+) Roll No-(.+) Blood Group-(.+) father's name=(.+) mother's name=(.+)$", flags=re.MULTILINE) # Read the data with open('test.txt', 'r') as file: content = file.read() # Parse the data results = DATA_PATTERN.findall(content) # Iterate through the results for entry in results: print(entry[2]) # entry[2] is the blood group, this is your file name # If the file name doesn't exist, create it and put the data in # If it exists, append the data

    编辑:众所周知,您可以在该循环中执行任何操作,每次循环打开和关闭每个文件都不是一个好主意,您可以根据entry[2]首先组织列表,但这仅仅是一个例子,这个问题只询问正则表达式以及如何提取文件名。

    替代解决方案

    如果您知道数据中将出现的每个血型,则可以运行与每个血型相对应的多个正则表达式。因此,如果您运行此正则表达式

    ^Name=(.+) Roll No-(.+) Blood Group-A\+ father's name=(.+) mother's name=(.+)$

    您将获得属于A +血型的所有条目的元组列表。现在,您只需将整个列表直接写入A+.txt文件即可。

    此解决方案与原始解决方案的区别在于,这不需要拆分最终结果列表,而是在同一文件上需要多个正则表达式。

    我个人更喜欢原始解决方案,因为这两个之间的性能差异无可争议,因此您需要的原始代码更少

  • © www.soinside.com 2019 - 2024. All rights reserved.