【问题标题】:Print words from the corresponding line numbers从相应的行号打印单词
【发布时间】:2015-03-22 22:14:30
【问题描述】:

大家好, 我有两个文件 File1 和 File2,其中包含以下数据。

File1:

 TOPIC:topic_0 30063951.0
 2 19195200.0

 1 7586580.0

 3 2622580.0

TOPIC:topic_1 17201790.0
1 15428200.0

2 917930.0

10 670854.0

等等..有 15 个主题,每个主题都有各自的权重。而像2,1,3这样的第一列是file2中对应单词的数字。例如,

File 2 has:

   1 i

   2 new

   3 percent

   4 people 

   5 year

   6 two

   7 million

   8 president

   9 last

   10 government

等等..大约有 10,470 行单词。所以,简而言之,我应该在 file1 的第一列而不是行号中有相应的单词。我的输出应该是这样的:

TOPIC:topic_0 30063951.0

new 19195200.0

i 7586580.0

percent 2622580.0

TOPIC:topic_1 17201790.0

i 15428200.0

new 917930.0

government 670854.0

我的代码:

import sys
d1 = {}
n = 1

with open("ap_vocab.txt") as in_file2:
     for line2 in in_file2:
            #print n, line2
            d1[n] = line2[:-1]
            n = n + 1

with open("ap_top_t15.txt") as in_file:
     for line1 in in_file:
            columns = line1.split(' ')
            firstwords = columns[0]
            #print firstwords[:-8]
            if firstwords[:-8] == 'TOPIC':
                    print columns[0], columns[1]
            elif firstwords[:-8] != '\n':
                    num = columns[0]
                    print d1[n], columns[1]

当我键入 print d1[2], columns[1] 时,此代码正在运行,为所有行提供 file2 中的第二个单词。但是当打印上面的代码时,它给出了一个错误

KeyError: 10472 

file2 中有 10472 行单词。请帮助我解决这个问题。提前致谢!

【问题讨论】:

  • 错误回溯到哪一行?
  • 文件2的最后一行作为所有的单词。代码 print d1[n], columns[1] 的最后一行给出了错误。

标签: file python-2.7 printing words


【解决方案1】:

在您的第一个 for 循环中,n 随每一行递增,直到达到最终值 10472。但是,您只能将 d1[n] 的值设置为 10471,因为您已将增量放在您为给定的n 设置d1 之后,使用这两行:

        d1[n] = line2[:-1]
        n = n + 1

然后就行了

print d1[n], columns[1]

在您的第二个for 循环(对于in_file)中,您尝试访问d1[10472],这显然不存在。此外,您将d1 定义为一个空字典,然后尝试像访问列表一样访问它,这样即使您修复了增量,您也无法像那样访问它。您必须使用带有d1 = [] 的列表,或者必须实现OrderedDict 以便您可以访问“last”键,因为字典在Python 中通常是无序的。

您可以:

  • 改变您的增量,以便您d1[10472] 位置设置d1 的值,或者简单地设置最后一个位置的值在您的for 循环之后

  • 根据您尝试打印的内容,您可以将最后一行替换为
    print d1[-1], columns[1]
    

    打印出您当前设置的最终索引位置的值。

  • 【讨论】:

    • 哦..这很有趣。抱歉,我是编码新手,那么我在哪里编辑代码以阻止它进入第 10472 行?请帮忙
    • @Krupa_Raghu 请查看我的更新答案,如果有帮助请告诉我。
    • 对不起。我对编码完全陌生。我尝试设置 while n
    • while n < 10472 不会做 anything 因为 while 循环将一直运行,直到 n 设置为 10472(这是当前发生)。使用while 循环是完全没有必要的,我建议您使用我在回答中概述的两种方法之一,但是如果您真的想使用一种,您会想要while n < 10471
    • 使用 d1[-1] 打印仍然给我 -1 的 keyerror。
    猜你喜欢
    • 1970-01-01
    • 2016-09-09
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多