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

python:从txt文件的行创建字典,python,dictionary,Python,Dictionary,非常新鲜,感谢你的耐心 我有一个诗歌的txt文件。最终,我希望创建一个字典,使我的键是行,值是该行上的文本。例如,如果我的诗是这样的: 玫瑰是红色的 紫罗兰是蓝色的 我希望我的字典是: dictionary = {1: 'Roses are red', 2: 'Violets are blue'} 最终,我希望我的程序允许我通过输入行号(键)来搜索诗歌的一行 我一开始是这样做的-- 但我迷路了,不知道下一步该怎么办。我试过查这个,我不明白。任何帮助都将不胜感激 您可以定义一个跟踪行号的新变量

非常新鲜,感谢你的耐心

我有一个诗歌的txt文件。最终,我希望创建一个字典,使我的键是行,值是该行上的文本。例如,如果我的诗是这样的:

玫瑰是红色的

紫罗兰是蓝色的

我希望我的字典是:

dictionary = {1: 'Roses are red', 2: 'Violets are blue'} 
最终,我希望我的程序允许我通过输入行号(键)来搜索诗歌的一行

我一开始是这样做的--


但我迷路了,不知道下一步该怎么办。我试过查这个,我不明白。任何帮助都将不胜感激

您可以定义一个跟踪行号的新变量
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'}

您可以定义一个新变量
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'}
你的问题在这里:

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)
你的问题在这里:

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)
您的代码首先有几个问题

for line in infile:
    dictionary[line] += 1
此处的行将是字典键,但您希望它是值:

dictionary[index] = line
您目前也没有跟踪索引,或者如上所述使用enumerate,或者创建一个变量并在每次循环中递增它。 我相信您当前的代码只会抛出一个错误,因为您正在尝试增加尚未存在的dictionary[line]

您的代码首先有几个问题

for line in infile:
    dictionary[line] += 1
此处的行将是字典键,但您希望它是值:

dictionary[index] = line
您目前也没有跟踪索引,或者如上所述使用enumerate,或者创建一个变量并在每次循环中递增它。
我相信您当前的代码会抛出一个错误,因为您正在尝试增加尚未存在的dictionary[line]。

我会做一些不同的事情

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'))

我会做一点不同的

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'))

在迭代时手动维护索引通常是错误的(而且速度慢而且冗长)。只需使用
enumerate
对于line_num,line in enumerate(infle):
(将
1
[或
start=1
]的第二个参数添加到
enumerate
调用中,以从
1
开始,而不是
0
)。这很有效!非常感谢。我在这上面花了好几个小时。“我真的很感谢你的帮助。”暗影游侠不知道。非常感谢。注意@yklsga就是这么做的。再次感谢。在迭代过程中手动维护索引通常是错误的(而且是缓慢而冗长的)方法。只需使用
enumerate
对于line_num,line in enumerate(infle):
(将
1
[或
start=1
]的第二个参数添加到
enumerate
调用中,以从
1
开始,而不是
0
)。这很有效!非常感谢。我在这上面花了好几个小时。“我真的很感谢你的帮助。”暗影游侠不知道。非常感谢。注意@yklsga就是这么做的。再次感谢。您可以使用
enumerate(infle,1)
从一开始计数,因为OP似乎想要这样做。。。或者只需一次完成:
dictionary=dict(enumerate(infle,1))
您可以使用
enumerate(infle,1)
从一开始计数,就像OP看起来想要做的那样。。。或者一步到位:
dictionary=dict(enumerate(infle,1))
删除
.readlines()
部分;文件的行数已经不可编辑了,因此,所有这一切都是在开始处理之前强制整个文件被压缩(在其他情况下,您不存储整个文件,只处理行并将其丢弃,这意味着即使每次只需要一行,也要将整个文件存储在内存中)
enumerate(f)
可以很好地工作,并且运行得更快(它甚至可以让操作系统在您为当前行执行工作时有时间预取文件的下一部分,尽管这不是您执行此操作的原因);文件的行数已经不可编辑了,因此,所有这一切都是在开始处理之前强制整个文件被压缩(在其他情况下,您不存储整个文件,只处理行并将其丢弃,这意味着即使每次只需要一行,也要将整个文件存储在内存中)
enumerate(f)
可以很好地工作,并且运行得更快(在您为当前行执行工作时,它甚至可以让操作系统有时间预取文件的下一部分,尽管这不是您这样做的原因)。