如何使用 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 = FS01234NAME = 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 文件。