在python中的两个标记之间打印文本的多个部分

时间:2019-03-24 21:44:42

标签: python parsing text

我使用以下代码将this页(这是不同运动队的名单)从PDF转换为文本:

const {promisify} = require("es6-promisify");

// Convert the stat function
const fs = require("fs");
const stat = promisify(fs.stat);

// Now usable as a promise!
stat("example.txt").then(function (stats) {
    console.log("Got stats", stats);
}).catch(function (err) {
    console.error("Yikes!", err);
});

输出看起来像这样:

import PyPDF3
import sys
import tabula
import pandas as pd


#One method
pdfFileObj = open(sys.argv[1],'rb')
pdfReader = PyPDF3.PdfFileReader(pdfFileObj)

num_pages = pdfReader.numPages
count = 0
text = ""

while count < num_pages:
    pageObj = pdfReader.getPage(count)
    count +=1
    text += pageObj.extractText()

print(text)

我想将此输出转换为制表符分隔的文件,该文件包含三列:球队名称,球员名称和编号。因此,对于我给出的示例,输出如下所示:

2019 SEASON 

PREMIER DIVISION SQUAD NUMBERS 
CLUB: BOHEMIANS

1

James Talbot

GK

2

Derek Pender 

DF

3

Darragh Leahy 

DF

.... some more names....

2019 SEASON 


PREMIER DIVISION SQUAD NUMBERS 
CLUB: CORK CITY 

1

Mark McNulty

GK

2

Colm Horgan

DF

3

Alan Bennett

DF
....some more names....


2019 SEASON 

PREMIER DIVISION SQUAD NUMBERS 
CLUB: DERRY CITY

1

Peter Cherrie

GK

2

Conor McDermott

DF

3

Ciaran Coll

DF

我知道我需要首先(1)根据团队将文件划分为多个部分,然后(2)在每个团队部分中;将每个名称+数字字段组合成对,以将每个数字分配给一个名称。

我编写了以下代码,将大文件解析为各个运动队:

Bohemians   James Talbot  1
Bohemians   Derek Pender  2
Bohemians   Darragh Leahy 3
Cork City   Mark McNulty  1
Cork City   Colm Horgan   2
Cork City   Alan Bennett  3
Derry City  Peter Cherrie  1
Derry City  Conor McDermott  2
Derry City  Ciaran Coll  3

但是我被困住了,因为上面的代码不会按每个团队 划分文本块(即我需要提取多个文本块来分隔字符串或列表吗?)。有人可以建议如何分割每个团队的文本文件吗(因此,在此示例中,我应该剩下三个文本块...然后以某种方式可以对每个团队划分的文本块进行配对,以使数字和名称)。

1 个答案:

答案 0 :(得分:0)

糟糕,形式不一定正确,我也没有考虑您使用过的其他库,但是它旨在为您提供一个起点。您可以根据自己的意愿重新格式化。

>>> string = '''2019 SEASON 

PREMIER DIVISION SQUAD NUMBERS 
CLUB: BOHEMIANS

1

James Talbot

GK

2

Derek Pender 

DF

3

Darragh Leahy 

DF

.... some more names....

2019 SEASON 


PREMIER DIVISION SQUAD NUMBERS 
CLUB: CORK CITY 

1

Mark McNulty

GK

2

Colm Horgan

DF

3

Alan Bennett

DF
....some more names....


2019 SEASON 

PREMIER DIVISION SQUAD NUMBERS 
CLUB: DERRY CITY

1

Peter Cherrie

GK

2

Conor McDermott

DF

3

Ciaran Coll

DF'''



>>> def reorder(string):
        import re
        headers = ['Team', 'Name', 'Number']
        print('\n')
        print(headers)
        print()
        paragraphs = re.findall('2019[\S\s]+?(?=2019|$)', string)
        for paragraph in paragraphs:
            club = re.findall('(?i)CLUB:[\s]*([\S\s]+?)\n', paragraph)
            names_numbers = re.findall('(?i)([\d]+)[\n]{1,3}[\s]*([\S\ ]+)', paragraph)
            for i in range(len(names_numbers)):
                if len(club) == 1:
                    print(club[0]+' | '+names_numbers[i][1]+' | '+names_numbers[i][0])




>>> reorder(string)


['Team', 'Name', 'Number']

BOHEMIANS | James Talbot | 1
BOHEMIANS | Derek Pender  | 2
BOHEMIANS | Darragh Leahy  | 3
CORK CITY  | Mark McNulty | 1
CORK CITY  | Colm Horgan | 2
CORK CITY  | Alan Bennett | 3
DERRY CITY | Peter Cherrie | 1
DERRY CITY | Conor McDermott | 2
DERRY CITY | Ciaran Coll | 3