如何使用 python 从 txt 文件中提取和组织数据?
How would I extract & organize data from a txt file using python?
情况:我有一个包含各种元素的平面数据文件,我需要提取特定部分。我是 Python 的初学者,使用正则表达式和其他函数将其写出来。这是我收到的 txt 文件中的数据示例:
**ACCESSORID = FS01234** TYPE = USER SIZE = 1024 BYTES
**NAME = JOHN SMITH** FACILITY = TSO
DEPT ACID = D12RGRD DEPARTMENT = TRAINING
DIV ACID = NR DIVISION = NRE
CREATED = 01/17/05 00:00 LAST MOD = 11/16/21 10:42
**PROFILES = VPSNRE P11NR00A**
LAST USED = 12/02/21 09:03 CPU(SYSB) FAC(SUPRSESS) COUNT(06051)
**XA SSN = 123456789** OWNER(JB112)
XA TSOACCT = 123456789 OWNER(JB112 )
XA TSOAUTH = JCL OWNER(JB112 )
XA TSOAUTH = RECOVER OWNER(JB112 )
XA TSOPROC = NR005PROC OWNER(JB112 )
----------- SEGMENT TSO
TRBA = NON-DISPLAY FIELD
TSOCOMMAND =
TSODEFPRFG =
TSOLACCT = 111111111
TSOLPROC = NR9923PROC
TSOLSIZE = 0004096
TSOOPT = MAIL,NONOTICES,NOOIDCARD
TSOUDATA = 0000
TSOUNIT = SYSDD
TUPT = NON-DISPLAY FIELD
----------- SEGMENT USER
**EMAIL ADDR = john.smith@nre.ago.com**
我需要提取的部分已加粗。我知道我需要提供我到目前为止所做的并且没有 post 我的整个脚本,这是我正在做的提取 ACCESSORID = FS01234 和 NAME = JOHN SMITH 部分。
def RemoveSpace():
f = open("PROJECTFILE.txt","r")
f1 = open("RemoveSpace.txt", "w")
data1 = f.read()
word = data1.split()
s = ' '.join(word)
f1.write(s)
print("Data Written Successfully")
RemoveSpace()
f = open(r"C:\Users\user\Desktop\HR\PROJECTFILE\RemoveSpace.txt".format(g), "r").read()
TSS = []
contents = re.split(r"ACCESSORID =",f)
contents.pop(0)
for item in contents:
TSS_DICT = {}
emplid = re.search(r"FS.*", item)
if emplid is not None:
s_emplid = re.search("FS\w*", emplid.group())
else:
s_emplid = None
if s_emplid is not None:
s_emplid = s_emplid.group()
else:
s_emplid = None
TSS_DICT["EMPLOYEE ID"] = s_emplid
name = re.search(r"NAME =.*", item)
if name is not None:
emp_name = re.search("[^NAME = ][^,]*", name.group())
else:
emp_name = None
if emp_name is not None:
emp_name = emp_name.group()
else:
emp_name = None
TSS_DICT["EMPLOYEE NAME"] = emp_name
问题:我很难找到 John Smith。它不断将 John Smith 之后的所有内容引入到电子邮件地址的最后一行。我的最终目标是获得一个 CSV 文件,其中每个粗体项目作为其自己的列。更直接地说,专家将如何使用这种数据清理方法来简化流程?如果需要,我可以 post 完整代码,但不想把它弄得乱七八糟。
为了练习正则表达式,我建议使用像 RegExr 这样的网站。在这里,您可以粘贴您想要匹配的文本,您可以尝试使用不同的匹配表达式来获得您想要的结果。
假设您要将此代码用于同一组织的多个文件,并且每个文件中的数据格式相同,您可以大大简化代码。
假设我们想从文本文件中提取 NAME = JOHN SMITH
。我们可以编写以下 Python 代码来执行此操作:
import re
pattern = "NAME = \w+ \w+"
name = re.findall(pattern, text_to_search)[0][7:]
print(name)
pattern
是我们的 Regex 搜索表达式。 text_to_search
是您已读入 Python 脚本的文本文件。 re.findall()
returns 一个匹配项的列表,然后我们使用 [0]
访问第一个索引。然后我们可以使用字符串切片 ([7:]
) 删除 NAME =
位。
以上代码将输出如下:
JOHN SMITH
您应该能够将相同的原则应用于文本文件的其他粗体部分。
就将提取的数据写入 CSV 文件而言,可能值得阅读有关这方面的好教程。例如 Reading and Writing CSV Files in Python。在写作之前有几种不同的方式来存储你的信息,比如列表和字典。但是您可以使用内置 Python 工具或手动编写 CSV 文件。
情况:我有一个包含各种元素的平面数据文件,我需要提取特定部分。我是 Python 的初学者,使用正则表达式和其他函数将其写出来。这是我收到的 txt 文件中的数据示例:
**ACCESSORID = FS01234** TYPE = USER SIZE = 1024 BYTES
**NAME = JOHN SMITH** FACILITY = TSO
DEPT ACID = D12RGRD DEPARTMENT = TRAINING
DIV ACID = NR DIVISION = NRE
CREATED = 01/17/05 00:00 LAST MOD = 11/16/21 10:42
**PROFILES = VPSNRE P11NR00A**
LAST USED = 12/02/21 09:03 CPU(SYSB) FAC(SUPRSESS) COUNT(06051)
**XA SSN = 123456789** OWNER(JB112)
XA TSOACCT = 123456789 OWNER(JB112 )
XA TSOAUTH = JCL OWNER(JB112 )
XA TSOAUTH = RECOVER OWNER(JB112 )
XA TSOPROC = NR005PROC OWNER(JB112 )
----------- SEGMENT TSO
TRBA = NON-DISPLAY FIELD
TSOCOMMAND =
TSODEFPRFG =
TSOLACCT = 111111111
TSOLPROC = NR9923PROC
TSOLSIZE = 0004096
TSOOPT = MAIL,NONOTICES,NOOIDCARD
TSOUDATA = 0000
TSOUNIT = SYSDD
TUPT = NON-DISPLAY FIELD
----------- SEGMENT USER
**EMAIL ADDR = john.smith@nre.ago.com**
我需要提取的部分已加粗。我知道我需要提供我到目前为止所做的并且没有 post 我的整个脚本,这是我正在做的提取 ACCESSORID = FS01234 和 NAME = JOHN SMITH 部分。
def RemoveSpace():
f = open("PROJECTFILE.txt","r")
f1 = open("RemoveSpace.txt", "w")
data1 = f.read()
word = data1.split()
s = ' '.join(word)
f1.write(s)
print("Data Written Successfully")
RemoveSpace()
f = open(r"C:\Users\user\Desktop\HR\PROJECTFILE\RemoveSpace.txt".format(g), "r").read()
TSS = []
contents = re.split(r"ACCESSORID =",f)
contents.pop(0)
for item in contents:
TSS_DICT = {}
emplid = re.search(r"FS.*", item)
if emplid is not None:
s_emplid = re.search("FS\w*", emplid.group())
else:
s_emplid = None
if s_emplid is not None:
s_emplid = s_emplid.group()
else:
s_emplid = None
TSS_DICT["EMPLOYEE ID"] = s_emplid
name = re.search(r"NAME =.*", item)
if name is not None:
emp_name = re.search("[^NAME = ][^,]*", name.group())
else:
emp_name = None
if emp_name is not None:
emp_name = emp_name.group()
else:
emp_name = None
TSS_DICT["EMPLOYEE NAME"] = emp_name
问题:我很难找到 John Smith。它不断将 John Smith 之后的所有内容引入到电子邮件地址的最后一行。我的最终目标是获得一个 CSV 文件,其中每个粗体项目作为其自己的列。更直接地说,专家将如何使用这种数据清理方法来简化流程?如果需要,我可以 post 完整代码,但不想把它弄得乱七八糟。
为了练习正则表达式,我建议使用像 RegExr 这样的网站。在这里,您可以粘贴您想要匹配的文本,您可以尝试使用不同的匹配表达式来获得您想要的结果。
假设您要将此代码用于同一组织的多个文件,并且每个文件中的数据格式相同,您可以大大简化代码。
假设我们想从文本文件中提取 NAME = JOHN SMITH
。我们可以编写以下 Python 代码来执行此操作:
import re
pattern = "NAME = \w+ \w+"
name = re.findall(pattern, text_to_search)[0][7:]
print(name)
pattern
是我们的 Regex 搜索表达式。 text_to_search
是您已读入 Python 脚本的文本文件。 re.findall()
returns 一个匹配项的列表,然后我们使用 [0]
访问第一个索引。然后我们可以使用字符串切片 ([7:]
) 删除 NAME =
位。
以上代码将输出如下:
JOHN SMITH
您应该能够将相同的原则应用于文本文件的其他粗体部分。
就将提取的数据写入 CSV 文件而言,可能值得阅读有关这方面的好教程。例如 Reading and Writing CSV Files in Python。在写作之前有几种不同的方式来存储你的信息,比如列表和字典。但是您可以使用内置 Python 工具或手动编写 CSV 文件。