2016-12-02 53 views
-2

我想解析一个文件。我有一个文件名称kjv.tsv。在这个文件里面,每一行包括书名,章节名称,诗句编号和诗句。建立字典从逗号分隔变量行

输出应该是这样的:

(ge, 0, 0, In the beginning God created the heaven and the earth.) 
(ge, 0, 1, And the earth was .... upon the face of the waters.) 
(ge, 0, 2, And God said, Let there be light: and there was light.) 

这是我走到这一步。我的函数名是我定义parse_line行:

def parse_line(line): 
    ''' 
    Converts a line from kjv.tsv into a list of verse information. I.e. 
    [book name, chapter number, verse number, verse text] 
    Return a list of verse information 
    ''' 
    bibletext = open("kjv.tsv" , "r").readlines() 

    bible = {} 
    for line in bibletext.splitlines(): 
     number, bv, contents = line.split(" | ") 
     book, verse = bv.strip().split(" ") 
     print (book) 
     print (bible) 
     if book in bible: 
      bible[book].append([verse,contents]) 
     else: 
      bible[book] = [verse,contents] 

    print (bible) 
+1

这不行吗?你怎么知道的?你期望它做什么?了解如何创建[mcve]。 –

+0

欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。在您发布代码并准确描述问题之前,我们无法有效帮助您。 请注意,您有缩进错误并且没有示例数据文件。 – Prune

+0

代码不起作用。它不会以pkython的形式返回正确的信息。我证明了我正在寻找的例子。 –

回答

1

这是比Python的方式更容易。您可以使用for循环遍历文件中的每一行,并在前三个逗号分割。

bible = [] 

with open('kjv.tsv') as f: 
    for line in f: 
     bible.append(line.split(',', 3)) 

print(bible) 

要了解更多结帐: Information on why to use a with statement and looping through lines in a file with a for loophow split works
请注意,这不是一个回答这个问题的标题。上面的代码与您在问题主体中所说的内容相符。 你的问题的主体被要求建立一个列表,所以上面的代码建立一个列表。为了建立一本字典,你需要决定你想要的关键和价值。您将使用密钥检索值。 你可以做的是检索诗歌文本的东西,如:如果这本书是在

bible_dict = {} 
for book, chapter, verse, text in bible: 
    if not bible_dict.get(book): 
     bible_dict[book] = {} 
    if not bible_dict[book].get(chapter): 
     bible_dict[book][chapter] = {} 
    if not bible_dict[book][chapter].get(verse): 
     bible_dict[book][chapter][verse] = text 

上面的代码检查:

bible['John']['11']['35'] 
>>> 'Jesus wept' 

这个代码只需添加到上面的代码结束字典。如果是,它会检查该章是否在书中。如果是,那么它会检查该诗是否在书中。如果这本经文不在这本书中,它会添加它。如果脚本丢失,该脚本将添加任何项目(书,章节或诗句)。它会为文件中的每一行执行此操作。

脚本的前半部分将文件转换为列表,每行都是书,章节,诗句和文本的列表。
脚本的后半部分将列表列表转换为字典的字典,其中书是字典,每章是字典,每节是一个关键字,每个文本都是一个值。
如果您需要更多说明,请让我知道。

+0

感谢Brandon Keith Biggs。 ValueError:需要超过1个值才能为书籍,章节,诗句,圣经中的文本解压 –

+0

: –

+0

这意味着csv的创建方式与首先想到的不同。做脚本的前半部分并打印圣经[0]。显示什么?它在书中,章节,诗句,文字顺序?还是缺少一些?也检查圣经[1],看看它是否相同。 –