Python 从逗号分隔变量行构建字典

Python 从逗号分隔变量行构建字典,python,csv,Python,Csv,我正试图解析一个文件。我有一个文件名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 the

我正试图解析一个文件。我有一个文件名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.)
这就是我目前得到的。我的函数名为line,我正在定义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)

这比python中的简单多了。您可以使用for循环遍历文件中的每一行,并在前3个逗号上拆分

bible = []

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

print(bible)
要了解更多信息,请执行以下操作: 和
请注意,这不是对该问题标题的回答。上面的代码与你在问题主体中所说的相符。 问题的主体要求构建一个列表,因此上面的代码构建了一个列表。为了建立一个字典,你需要决定你想要的键和值是什么。您将使用键检索该值。 你可以做的是用如下方式检索诗歌文本:

bible['John']['11']['35']
>>> 'Jesus wept'
只需将此代码添加到上述代码的末尾:

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
上面的代码检查该书是否在dict中。如果在dict中,则检查该章节是否在书中。如果是,那么它会检查诗句是否在书中。如果这首诗不在书中,它会加上它。如果缺少任何项目(书籍、章节或诗句),脚本将添加这些项目。它将对文件中的每一行执行此操作

脚本的前半部分将文件转换为列表,每一行都是书籍、章节、韵文和文本的列表。
脚本的后半部分将列表列表转换为一个dict of dict,其中书是一个dict,每一章是一个dict,每一节是一个键,每一个文本是一个值。

如果您需要更多的澄清,请告诉我。

这不起作用吗?你怎么知道的?你期望它做什么?请参阅如何创建。欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布代码并准确描述问题之前,我们无法有效地帮助您。请注意,您有缩进错误,并且没有示例数据文件。代码不起作用。它没有在pkython中返回正确的信息。我所证明的例子就是我所寻找的。它在什么方面不起作用?你得到了什么输出?我们没有您的输入文件,无法运行代码。代码的缩进不正确(这在Python中可能会有所不同)。您可以使用标准库中的模块来解析像这样的表格数据文件。感谢Brandon Keith Biggs。ValueError:需要超过1个值来解压圣经中的书籍、章节、韵文和文本:这意味着csv的创建与最初的想法不同。完成脚本的前半部分并打印圣经[0]。出现了什么?它在书中,章节,诗句,文本顺序中吗?还是少了一些?同时检查圣经[1]是否相同。for循环中的书籍、章节、韵文、文本的作用是book=bible[0][0]chapter=bible[0][1]韵文=bible[0][2]text=bible[0][3]。因为做上面的事情真的很乏味,你可以只写圣经中的书、章节、韵文和文本,如果圣经中的所有列表都是相同的大小(如果它们是从csv文件中获取的话),那么你可以在for循环中使用这些变量。