python:从txt文件的行创建字典

时间:2017-10-25 20:14:51

标签: python dictionary

非常新鲜,感谢您的耐心等待。

我有一首诗的txt文件。最终我想创建一个字典,使得我的键是#行,值是该行上的文本。例如,如果我的诗是这样的话:

玫瑰红了,

紫罗兰是蓝色的。

我希望我的字典是:

dictionary = {1: 'Roses are red', 2: 'Violets are blue'} 

最终我希望我的程序允许我通过输入行号(键)来搜索诗的一行。

我开始这样做了 -

def getFile():
    prose = str(input('Please enter the file path for your text file: '))

    dictionary = {}

    infile = open(prose, 'r')
    for line in infile:
        dictionary[line] += 1
        print(dictionary)
    infile.close()

getFile()

但是我迷失了,不知道接下来该做什么。我试过这个,我不明白这一点。任何帮助将非常感激。

4 个答案:

答案 0 :(得分:3)

您的问题在这里:

for line in infile:  # iterate over each line of text
    dictionary[line] += 1  # this tries to use the text as a dict key instead of value
    print(dictionary)  # I assume this is just here to display the current state of the dictionary eacy loop

您需要一种方法来跟踪您所在的线路。值得庆幸的是,enumerate()可以提供帮助:

for line_number, line in enumerate(infile):
    dictionary[line_number] = line
    print(dictionary)

答案 1 :(得分:1)

您可以定义一个跟踪行号的新变量line_num

def getFile():
    prose = str(input('Please enter the file path for your text file: '))

    dictionary = {}

    infile = open(prose, 'r')
    line_num = 1
    for line in infile:
        dictionary[line_num] = line
        line_num += 1
    print(dictionary)
    infile.close()

getFile()

您可以查看字典,其中行号为键,每行为其值

输出:

{1: 'roses are red\n', 2: 'violets are blue'}

答案 2 :(得分:1)

dictionary = {}
f = open(myfile, 'rb')
for index, line in enumerate(f.readlines()):
   dictionary[index] = line
f.close()

您的代码存在一些问题 - 首先

for line in infile:
    dictionary[line] += 1

此处的行将是字典键,但您希望它是值:

dictionary[index] = line

您目前还没有跟踪索引 - 要么使用上面的枚举,要么创建一个变量并在每次循环时递增它。 我现在的代码只会抛出一个错误,因为你试图增加一个尚不存在的字典[line]。

答案 3 :(得分:0)

我会做一点不同的

def getFile(infile):
    prose = str(input('Please enter the file path for your text file: '))

    dictionary = {}

    infilelines = list(open(prose, 'r'))
    for line in enumerate(infilelines):
        dictionary[line[0]] = line[1]
    infile.close()
    return dictionary

print(getfile('someInput.txt'))