我正在尝试创建一个程序,该程序接受用户输入的字母,读取文本文件,然后打印以该字母开头的单词。
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行随机单词,所以我不确定为什么会这样读。
答案 0 :(得分:5)
你有两个问题:
filelength
,然后再次查看自己的行),这不会起作用;和最简单的方法是:
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-y,and
的"懒惰评估" 意味着line[0]
只会在 line.startswith(letter)
。
答案 1 :(得分:3)
当您使用sum(1 for line in f)
时,您已经在使用文件中的所有行,所以现在您的句柄指向文件的末尾。尝试使用f.seek(0)
将读取光标返回到文件的开头。