2017-10-23 14 views
-3

私は.txtを送信できないため、事前にお詫びしますが、内容に関係なくエラーは常に同じです。テキストファイルを開き、ループ内でfindallを使用する - IndexError

私はすべてが、特定の用語がを発生したときに、これはかなり無意味であっても見つけることが備わっています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を得るからです。

+0

あの、 'document'は何ですかそれは 'doc'と思われますか?そうであれば、2回目の繰り返しで、 'doc.read()' **は常に空の文字列**になります。とにかくこれはなぜループですか? –

+0

@ juanpa.arrivillagaそれはループの中にある理由は複雑です...しかし、私は謝罪する、はいそれはdoc = document(固定)です。何か提案はありますか? – user123easyas

+0

'print(findall("良い[\ s \ S] *?午後 "))'あなたは何を見ますか? – roganjosh

答えて

0

あなたがdocument.read()を呼び出し、あなたfileからreaddataが、これはのみ(後に、あなただけの空stringを取得します)一度に行うことができます。

あなたはfor-loopにこのラインを複数回呼び出している:

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

for-loopの最初のiterationが正常に動作します、しかしその後、document.read()は空stringを返しますので、その後re.findallは空listを返します。そしてlistの値がxになると、listが空であるため、IndexErrorが表示されます。あなたが何をしたいか

、あなたのfor-loopvariable、その後にfindall一部で返さlistを保存している、そのvariableにアクセスします。この方法では、filereadから一度だけエラーが発生します。現時点では、あなたは何をしていないので、私はあなたがlist(からx用語で何をしたいのか、正確にはわからない

doc = open("Folder1/10-06-2017.txt",'r') 
matches = findall("Good[\s\S]*?Afternoon", doc.read()) 

for x in range(1,9): 
    matches[x] 

このためのコードは次のようになりますしかし、少なくともそれはあなたが今したいと思うように動作します...

最後に、readingを終了した後で、fileを閉じておくことをお勧めします。あなたはこれを行うことができます2方法。 (おそらくmatchesを定義した後)いくつかの点で、あなたのコードに

doc.close() 

:最初の行を追加しています。

秒(エラーがスローされたかのように、おそらくより良い、ファイルがまだ閉じられます)方法はwith内のコードのその部分を置くために、次のようになります。

with open("Folder1/10-06-2017.txt", "r") as doc: 
    matches = findall("Good[\s\S]*?Afternoon", doc.read()) 

... 
+0

ありがとう!私は自分の質問が嘘つきだと知っていますが、あなたは即座に私の問題を解決しました。 – user123easyas

+0

@ user123easyasも同様に投票してください**:)** –

関連する問題