Как бы я получить цифры в начале строки текста, разделить их и распечатать их - PullRequest
0 голосов
/ 12 июля 2011

Вот моя дилемма: я пишу приложение на Python, которое позволит мне искать плоский файл (KJV bible.txt) для определенных строк и возвращать номер строки, книгу и искомую строку. Однако я также хотел бы вернуть главу и стих, в котором была найдена строка. Это требует, чтобы я пошел в начало строки и получил номер главы и стиха. Я новичок в Python, и в настоящее время все еще читаю учебник по Python Гвидо ван Россума. Это то, что я пытаюсь сделать для группы изучения Библии; что-то переносимое, что можно запустить в модуле cmd практически где угодно. Я ценю любую помощь ... Спасибо. Ниже приведен отрывок из примера библейской главы:

 Daniel


 1:1 In the third year of the reign of Jehoiakim king of Judah came
 Nebuchadnezzar king of Babylon unto Jerusalem, and besieged it.

Скажем, я искал 'Jehoiakim', и одним из результатов поиска была первая строка выше. Я хотел бы перейти к числам, которые предшествуют этой строке (в данном случае 1: 1), получить главу (1) и стих (1) и вывести их на экран.

 1:2 And the Lord gave Jehoiakim king of Judah into his hand, with part
 of the vessels of the house of God: which he carried into the land of
 Shinar to the house of his god; and he brought the vessels into the
 treasure house of his god.

Код:

 import os
 import sys
 import re

 word_search = raw_input(r'Enter a word to search: ')
 book = open("KJV.txt", "r")
 first_lines = {36: 'Genesis', 4812: 'Exodus', 8867: 'Leviticus', 11749: 'Numbers', 15718: 'Deuteronomy',
           18909: 'Joshua', 21070: 'Judges', 23340: 'Ruth', 23651: 'I Samuel', 26641: 'II Samuel',
           29094: 'I Kings', 31990: 'II Kings', 34706: 'I Chronicles', 37378: 'II Chronicles',
           40502: 'Ezra', 41418: 'Nehemiah', 42710: 'Esther', 43352: 'Job', 45937: 'Psalms', 53537: 'Proverbs',
           56015: 'Ecclesiastes', 56711: 'The Song of Solomon', 57076: 'Isaih', 61550: 'Jeremiah',
           66480: 'Lamentations', 66961: 'Ezekiel', 71548: 'Daniel' }


 for ln, line in enumerate(book):
     if word_search in line:
         first_line = max(l for l in first_lines if l < ln)
         bibook = first_lines[first_line]

         template = "\nLine: {0}\nString: {1}\nBook:\n"
         output = template.format(ln, line, bibook)
         print output

Ответы [ 2 ]

5 голосов
/ 12 июля 2011

Сделайте одно разбиение на пустое пространство, затем разбейте на :.

passage, text = line.split(None, 1)
chapter, verse = passage.split(':')
1 голос
/ 12 июля 2011

Используйте регулярное выражение : r'(\d+)\.(\d+)'

Найдя совпадение (match = re.match(r'(\d+)\.(\d+)', line)), вы можете найти главу в группе 1 (chapter = match.group(1)) и стих вгруппа 2.

Используйте этот код:

 for ln, line in enumerate(book):
      match = match = re.match(r'(\d+)\.(\d+)', line)
      if match:
           chapter, verse = match.group(1), match.group(2)

      if word_search in line:
           ...
           print 'Book %s %s:%s ...%s...' % (book, chapter, verse, line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...