2016-12-05 29 views
0

我想从文件系统中读取King James版本圣经的文本数据,并将该数据转换为Python数据结构访问书籍,章节和诗句以前产生的数据结构搜索KJV圣经的文本。如何返回属于该书的诗句清单

parse_line(line): 

给定的文本(即,字符串)的从bible.tsv文件中的一行,去除所有尾随空白(使用“.strip”方法)中,然后使用一个制表符分隔符(‘\ t’的)分成它

转换结果列表中的第二和第三个元素(引经据典)成整数

返回表

这是我为我的parse_line代码。我相信这段代码是正确的。

def parse_line(line): 
    line = aline.strip().split('\t') 
    line[1] = int(line[1]) 
    line[2] = int(line[2]) 
    return line 

parse_kjv_tsv():

创建一个空的列表提供给经文存储在bible.tsv文件

打开kjv.tsv文件进行读取

对于的每个线文件,将该行传递给parse_line并将parse_line的输出附加到一列诗句

返回创建的诗句列表

这是我为我的代码为parse_kjv_tsv()

def parse_kjv_tsv(): 
    kjv_file = open('kjv.tsv', 'r') 
    verses = [] 
    for line in kjv_file: 
     verse = parse_line(line) 
     verses.append(verse) 
    kjv_file.close() 
    return verses 

它不返回正确的信息。我需要对于文件的每一行,将该行传递给parse_line并将parse_line的输出附加到一个诗句列表。然后,返回创建的诗句列表。

例如,输出应为:

>>> import bible 
>>> verses = bible.parse_kjv_tsv() 
>>> verses[0] 
['ge', 0, 0, 'In the beginning God created the heaven and the earth.'] 

注意,第二和第3元素“经文[0]”为整数,而不是字符串。

访问KJV

在这个部分,你将创建功能从以前创建的Python数据结构访问的书籍,章节和诗句。您需要创建以下功能:

我需要get_book帮助(诗,书)

get_book(verses, book): 

考虑:

  • 经文的名单(即

    • 名单:中parse_kjv_tsv)和
    • 一本书的名字(字符串)

    返回属于那本书

    get_chapter(verses, book, chapter): 
    

    鉴于经文的列表输​​出(即输出parse_kjv_tsv)和

  • 书名(字符串)和
  • 章节序号(整数)

返回属于那本书经文列表和章

get_verse(verses, book, chapter, verse): 

考虑:

  • 经文的名单(即的parse_kjv_tsv)和
  • 一本书的名字(字符串)和
  • 章号(整数)
  • 一首诗数(整数)

返回的文本字符串输出这节经文

search_bible(verses, search_text): 

考虑:

  • 经文列表(即的parse_kjv_tsv)和
  • 字符串输出这些经文

返回搜索的字典导致

+1

我清理了问题的格式。请[请阅读此](https://stackoverflow.com/help/formatting)并确保使用适当的标记。不是所有的描述性文本都应该是粗体的(用'**'包围)或标题(用一个或多个'#'开始),并且代码块(缩进四个空格)只能用于代码或文件内容。你也一次问很多问题,这可能太广泛了。阅读[问]提出问题的提示。 – Chris

+0

感谢您的提示。 –

回答

1

这里搜索是什么,我会做

parse_kjv_tsv(): 
    # Create an empty list to store the verses in the bible.tsv file 
    verses = [] 
    # Open the kjv.tsv file for reading 
    with open('kjv.tsv', 'r') as f: 
     # For each line of the file, pass that line to parse_line and append 
     # the output of parse_line to a list of verses 
     for line in f: 
      verses.append(parse_line(line)) 
    # Return the created list of verses 
    return verses 

仅供参考 - 上面的代码片段假设您的parse_line实施是正确的。你应该在使用之前测试它。我想你可能会错过return

+0

感谢您的信息2ps。 –

+0

你可以这样做(在with语句中):'return [parse_line(line)for line in f]' –

0

您的分析行不正确。

parts = line.strip().split('\t') 
parts[1] = int(parts[1]) 
parts[2] = int(parts[2]) 
return parts 

如果你这样做,你的代码工作到解析kjv结束!你基本上是在重新定义使它无用的函数的参数。