打开文本文件并在循环中使用findall - IndexError

时间:2017-10-23 17:35:24

标签: python

我提前道歉,因为我无法发送.txt,但是,内容并不重要,错误总是一样。

我试图使用Python找到所有功能来查找特定术语何时出现,即使这是毫无意义的)

以下是代码:

doc = open("Folder1/10-06-2017.txt",'r')
for x in range(1,9):
   findall("Good[\s\S]*?Afternoon", doc.read())[x]

语法有问题吗?因为我不断获得IndexError: list index out of range

1 个答案:

答案 0 :(得分:0)

当您致电document.read()时,read data file string,但这只能做一次(之后,您将获得一个空for-loop 1}})。

您在findall("Good[\s\S]*?Afternoon", doc.read())[x]

中多次调用此行
iteration

for-loop的第一个document.read()可以正常工作,但在此之后,string将返回一个空的re.findall,以便list将返回一个空list然后当您尝试在位置x的空IndexError中获取值时,会得到list,因为list没有任何内容是空的!

您要执行的操作是将findall部分返回的variable保存到for-loop,然后保存在variable,访问read 。这样,您只需file一次doc = open("Folder1/10-06-2017.txt",'r') matches = findall("Good[\s\S]*?Afternoon", doc.read()) for x in range(1,9): matches[x] ,就不会遇到任何错误。

这个代码看起来像是:

x

我不完全确定您要对list中的file字词做什么(因为目前您还没有做任何事情),但是至少它会像你现在想的那样工作......

最后,最好在完成reading之后关闭2。您可以 doc.close() 方式执行此操作。第一个是添加行:

matches

在某些时候(可能在定义with之后)代码。

第二个(可能更好,如果抛出错误,文件仍将被关闭)方式是将代码的这部分放在 with open("Folder1/10-06-2017.txt", "r") as doc: matches = findall("Good[\s\S]*?Afternoon", doc.read()) ... 中:

list = [dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'), dtype('float64'), dtype('float64'), dtype('float64'), dtype('float64'), dtype('float64'), dtype('float64')]