Python章分隔线

时间:2018-12-07 08:51:00

标签: python

我现在要花很多时间来创建一个脚本来解析我的文本。

我有一个看起来像下面的文本。我想做的是浏览一章,查看其中的所有文章,然后输出字典,该字典以该章的名称作为键,并且作为每篇文章的值,有一个列表,其中包含该文章中引用的所有文章一个。

下面是文本的示例

  

第一章

     

艺术。 1 -(1)所有进入公共道路的车辆均根据条所述的《紧急条例》的规定。 2,参数(2)和>不包括在第7条第7款中列出的车辆。 (6)

     

艺术。 2 -(1) TEXT TEXT TEXT art。 3 TEXT TEXT

     

(2)文本文本文本

     

艺术。 3 -(1)引用 art的文字。 1 个文本

     

艺术。 4 -文字未提及其他文章

     

第二章

示例输出:

第1章 = {第1条:[“第2条;第2款”,“第7条;第(6)款”]; 第二条:[“第三条”]; 艺术。 3 :[“第1条”]; 第4条:“无参考”}

此脚本应存储本章,以便我可以对其进行解析并根据解析结果输出一些内容。

codul_rutier.txt是我必须通过的文件

cod_rutier= open('codul_rutier.txt','r')
text = cod_rutier.read()

for chapter in text:
    chapter.split('CHAPTER')
    for line in capitol:
            if re.match(r'^Art.', line):
                    print line
                    break

我什至不知道该如何开始,我尝试了多种方法来打开文件以逐章读取,拆分,if循环中的for循环。

如果有人可以帮助我,我将不胜感激!

1 个答案:

答案 0 :(得分:0)

您可以从以下代码开始。它包含3个正则表达式chapter_reart_relink_rebordersnew_borders用于保持比赛的位置,以便以后在比赛之间进行搜索。 chapter_zeroCHAPTER I之前的文本的名称。我对正则表达式没有经验,所以我认为代码可能会得到显着改善。我从Mark Summerfield的Programming in Python 3: A Complete Introduction了解了正则表达式,并在https://regex101.com/网站上尝试了在线表达式。

import re

chapter_re = re.compile('(?P<chapter>CHAPTER [IVX]+)')
art_re = re.compile('(?P<art>^Art. [0123456789]+) - ', re.MULTILINE)
link_re = re.compile('(?P<link>[Aa]rt[.][ ]*[0123456789]+[,]*[ ]*[Pp]ar[.][ ]*[(]*[0123456789]+[)]*|[Aa]rt[.][ ]*[0123456789]+)', re.MULTILINE)

with open('1.txt', mode='r', encoding='UTF-8') as file:
    data = file.read()

chapters = ['chapter_zero']
borders = [[0, None]]
result = {'chapter_zero': dict()}

# search for CHAPTERs
for match in chapter_re.finditer(data):
    result[match.group('chapter')] = dict()
    chapters.append(match.group('chapter'))
    borders[-1][1] = match.span()[0]
    borders.append([match.span()[1], None])

borders[-1][1] = len(data)

for chp, brd in zip(chapters, borders):

    arts = ['art_zero']
    new_borders = [[0, None]]

    # search for Arts
    for match in art_re.finditer(data[brd[0]:brd[1]]):
        result[chp][match.group('art')] = list()
        arts.append(match.group('art'))
        new_borders[-1][1] = match.span()[0]
        new_borders.append([match.span()[1], None])

    new_borders[-1][1] = brd[1] - brd[0]

    # search for links
    for art, nbrd in zip(arts, new_borders):
        for nmatch in link_re.finditer(data[brd[0]:brd[1]][nbrd[0]:nbrd[1]]):
            result[chp][art].append(nmatch.group('link'))

# printing results        
for k, v in result.items():
    print(k)
    for k, v in v.items():
        print('\t{}: {}'.format(k, v))
    print()

输出:

chapter_zero

CHAPTER I
    Art. 1: ['art. 2, par. (2)', 'art.7, par. (6)']
    Art. 2: ['art. 3']
    Art. 3: ['art. 1']
    Art. 4: []

CHAPTER II