如何在fi中从字符“xxx”读写到字符“yyy”

2024-04-19 10:47:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从文本文件中提取数据。在里面,每个学生记录由20-30行组成。我试着把每个学生的相关信息拉出来,然后放到excel里。 我可以把学生信息拉进来,因为他们的标签上有名字:,ID#,等等

我想出了如何打开文本文件,用标签提取数据,然后将其写入另一个文本文件。但是,我也需要为每个学生提供一个块(可变的行数),我不知道如何读写。你知道吗

对于每个学生来说,第一行总是以“Ref No”开头…然后是一些行,然后以“========”结尾。我不知道如何从Ref No开始读取并将所有行写入文本文件,直到达到======。然后转到下一张学生唱片。你知道吗

添加文本示例
姓名:约翰·史密斯
编号:1234456
应付金额:0.00美元
参考无日期代码费用付款余额
001234 12/6/18巴123.00 0 123.00
002345 12/7/18德1000.00 1000.00 0
总计:1123.00 1000.00 123.00
============================
姓名:萨利·史密斯
ID等

一切正常,直到你到达该区域:

outfile = open('Output.txt', 'w')
with open('ARSP_MGRIFFIT_3728.txt','r') as inFile:
for line in inFile:
    line = line.strip()
    if line.find( 'Name') != -1:
        outfile.write(line + "\n")
    if line.find( 'ID#' ) != -1:
        outfile.write(line + "\n")
    if line.find( 'Term...:' ) != -1:
        outfile.write(line + "\n")
    if line.find( 'Amount Due' ) != -1:
        balance = line[:20]
        outfile.write(balance + "\n")
#        if line.startswith ('Reg No'):
#            flag=True
#            if flag:
#                data.append(line)
#            if line.strip().endswith('==='):
#                flag=False
#            outfile.write(data)

Tags: 数据noref信息idifline标签
1条回答
网友
1楼 · 发布于 2024-04-19 10:47:55

在数据块上使用regex (Name(.[^=]|\n|\r)*)+可以根据需要对其进行处理:

import re

with open('ARSP_MGRIFFIT_3728.txt', 'r') as f:
    data = f.read()

matches = re.findall('(Name(.[^=]|\n|\r)*)+', data)
print(matches)

说明:

  • ()+-outer group,它可以找到多个组
  • Name-确保组必须包含Name
  • (.[^=]|\n\r)*匹配除=和换行符以外的任何字符

应用此方法可产生如下输出:

Name: john smith
ID: 1234456
Amount Due: $0.00
Ref No   Date    Code   Charges  Payment   Balance
001234   12/6/18  BA     123.00   0        123.00
002345   12/7/18  DE    1000.00  1000.00   0
                Total:   1123.00 1000.00   123.00
                      <  added to emphasize the whitespace matched up to the '='
...

相关问题 更多 >