IndexError:字符串索引超出范围,行是空的?

时间:2015-08-13 10:54:34

标签: python

我正在尝试创建一个程序,该程序接受用户输入的字母,读取文本文件,然后打印以该字母开头的单词。

item = "file_name"
letter = raw_input("Words starting with: ")
letter = letter.lower()
found = 0

with open(item) as f:
    filelength = sum(1 for line in f)
    for i in range (filelength):
        word = f.readline()
        print word
        if word[0] == letter:
            print word
            found += 1
    print "words found:", found

我一直收到错误

  

“如果word [0] == letter:IndexError:字符串索引超出范围”

没有打印行。我认为如果没有任何内容会发生这种情况,但文件中有50行随机单词,所以我不确定为什么会这样读。

2 个答案:

答案 0 :(得分:5)

你有两个问题:

  1. 您正在尝试两次读取整个文件(一次确定filelength,然后再次查看自己的行),这不会起作用;和
  2. 你不处理空行,所以如果引入了空行(例如,如果最后一行是空白的话),你的代码无论如何都会破坏。
  3. 最简单的方法是:

    found = 0
    
    with open(item) as f:
        for line in f:  # iterate over lines directly
            if line and line[0] == letter:  # skip blank lines and any that don't match
                    found += 1
    print "words found:", found
    

    if line跳过空白,因为empty sequences are false-yand"懒惰评估" 意味着line[0]只会在 行清空的地方尝试。您也可以使用line.startswith(letter)

答案 1 :(得分:3)

当您使用sum(1 for line in f)时,您已经在使用文件中的所有行,所以现在您的句柄指向文件的末尾。尝试使用f.seek(0)将读取光标返回到文件的开头。