如何在文件中从字符“ xxx”读写字符“ yyy”

时间:2019-01-31 23:30:35

标签: python python-3.x

我需要从文本文件中提取数据。内部,每条学生记录由20-30行组成。我正在尝试获取每个学生的相关信息-然后将其放入Excel。 我可以输入学生信息-因为它们带有名称:,ID#等标记。

我想出了如何打开文本文件并使用标签提取数据并将其写入另一个文本文件的方法。但是每个学生我也需要一大块(行数不固定),并且无法弄清楚如何读写。

对于每个学生,第一行始终以“ Ref No”开头,然后是某些行,然后以“ ======”结尾。我无法弄清楚如何从Ref No开始读取并将所有行写入文本文件,直到到达=====。然后转到下一个学生记录。

添加文本示例
姓名:约翰·史密斯
ID:1234456
应付金额:$ 0.00
参考编号日期代码收费付款余额
001234 12/6/18 BA 123.00 0 123.00
002345 12/7/18 DE 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)

1 个答案:

答案 0 :(得分:0)

根据需要在数据上使用正则表达式(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)

说明:

  • ()+-外部组,它找到多个组
  • 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 '='
...