我有一个文本文件,其中包含成千上万名学生的工作卷编号,并具有他们的工作卷编号,其中包含学生姓名类别,班级,电话号码,父亲的姓名,母亲的姓名,地址,血统和几个字段和
[[我必须使用血型将它们隔离在单独的文件中,例如血型A +应该放在一个A + .txt中,类似地,对于其他血型,我必须将它们分开
我正在使用正则表达式获取,但不知道如何直接获取文件名并将其输入该文件中所以考虑,您的文本文件看起来像这样-
名称= 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
现在,您需要遍历结果,记住索引及其对应的含义-
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
文件即可。此解决方案与原始解决方案的区别在于,这不需要拆分最终结果列表,而是在同一文件上需要多个正则表达式。
我个人更喜欢原始解决方案,因为这两个之间的性能差异无可争议,因此您需要的原始代码更少