我正在尝试两次遍历文本文件,并创建一个包含dict[line_index]=word_index_position
的字典,这意味着键是行号,值是该行中的所有单词。目标是创建一个“矩阵”,以便以后的用户应该能够指定x,y坐标(直线,word_index_position),并在这些坐标中检索一个单词(如果有的话)(不确定如何处理)使用字典,因为它没有顺序)。下面是创建字典的循环。
try:
f = open("file.txt", "r")
except Exception as e:
print("Skriv in ett korrekt filnamn")
uppslag = dict()
num_lines = 0
for line in f.readlines():
num_lines += 1
print(line)
for word in line.split():
print(num_lines)
print(word)
uppslag[num_lines] = word
f.close()
uppslag
循环按预期工作,但是uppslag[num_lines] = word
似乎只在每行中存储最后一个单词。任何指导将不胜感激。
非常感谢,
答案 0 :(得分:1)
uppslag[num_lines] = word
都会覆盖键num_lines
的字典条目。您可以使用列表来保存所有单词:
for line in f:
num_lines += 1
print(line)
uppslag[num_lines] = [] # initialize dictionary entry with empty list
for word in line.split():
print(num_lines, word)
uppslag[num_lines].append(word) # add new word to list
由于line.split()
已经返回了一个列表,因此您可以以更紧凑的形式编写相同的代码:
for line_number, line in enumerate(f):
uppslag[line_number] = line.split()
如果每行上都有一个单词(即行索引将是连续的),则可以使用列表而不是字典,并将代码简化为单行列表理解:
uppslag = [line.split() for line in f]
答案 1 :(得分:1)
而不是覆盖word
:
for word in line.split():
print(num_lines)
print(word)
uppslag[num_lines] = word
保存整个行可能会更好:
uppslag[num_lines] = line.split()
这样,您将可以在第四行找到第三个单词,如下所示:
uppslag[4][3]
答案 2 :(得分:0)
不需要字典或.readlines()
。
with open("file.txt") as words_file:
words = [line.split() for line in words_file]