Python中的文本读取和列表索引超出范围

Python中的文本读取和列表索引超出范围,python,text,Python,Text,我有一个有8行的文本。程序将读取此文本,并将文本中的单词与用户输入的单词匹配。但python给出了一个错误: satir=dosya.readlines()[a] IndexError: list index out of range 这是我的代码: a=0 c=0 while a<8: satir=dosya.readlines()[a] a=a+1 for i in olasilik: if ((olasilik[c]+"\n")==satir

我有一个有8行的文本。程序将读取此文本,并将文本中的单词与用户输入的单词匹配。但python给出了一个错误:

satir=dosya.readlines()[a]
IndexError: list index out of range
这是我的代码:

a=0
c=0
while a<8:
    satir=dosya.readlines()[a]
    a=a+1
    for i in olasilik:
        if ((olasilik[c]+"\n")==satir):
            c=c+1
            print(olasilik[c])
a=0
c=0

而这不是你应该做的

取而代之的是

for satir in dosya:
   #do something

问题是
readlines()
在您第一次调用列表时读取该文件的所有内容。第二次调用它时,文件已经完成,您得到一个空列表,并且您在尝试访问该空列表的元素
1
时出错

要在文件的行上循环,可以执行以下操作

for L in f:
    ...


这可能会更好:

for satir in dosya.readlines():
  for o in olasilik:
    if ("%s\n" % o) == satir:
      print o

为什么不在调用
readlines()[a]
之前尝试打印
a
?你没有索引8
,而<7
或者更好的方法是在readlines上循环,尽管我怀疑这只是该代码的许多问题中的第一个……注意,每次通过
while
循环,你都在读取整个文件;这真的只在第一次起作用,非常感谢。它成功了。我可以问一下“%s\n”%o是什么意思吗?不客气!这是一种更为“Pythonic”的字符串连接方式。它将为您的变量执行自动str()转换:
str(o)+“\n”=%s\n”%o
它允许您执行简单的str格式设置,例如:
%s=%s不是%s”%(1,1.1,True)
将返回“1==1.1不是True”
for satir in dosya.readlines():
  for o in olasilik:
    if ("%s\n" % o) == satir:
      print o