-3
import os
import sys

a = os.listdir("C:\\Python27\\forms2")

i = 0

big_file = open("c:\\Python27\\forms2\\%s" %a[i], 'r')
small_file3 = open("c:\\Python27\\forms3\\%s" %a[i], 'w')
linez = big_file.read()
for line in linez:
   if 'TextControl' in linez:
      small_file3.write(line)

   if 'http://' in linez:
      small_file3.write(line)
   i = i + 1
   big_file.close()
   small_file3.close()

出力は

Traceback (most recent call last):
  File "C:\Python27\testreadwrite", line 13, in <module>
    small_file3.write(line)
ValueError: I/O operation on closed file

「testreadwrite」はスクリプトの名前です。「a」リスト変数を注入する必要がある場所に注入するのはなぜですか?

4

3 に答える 3

2

forループの最後でファイルを閉じています

for line in linez:
   ...
   big_file.close()
   small_file3.close()

ループにファイルを閉じる必要がありますfor

for line in linez:
   ...
big_file.close()
small_file3.close()

コンテキスト マネージャーを使用して、将来このような問題を回避できます。

with open("c:\\Python27\\forms2\\%s" %a[i], 'r') as big_file, \
     open("c:\\Python27\\forms3\\%s" %a[i], 'w') as small_file3:
    linez = big_file.read()
    for line in linez:
       ...

したがって、自分自身を呼び出す必要はありませんclose

于 2012-09-11T11:56:46.043 に答える
0

エラーメッセージ:

   I/O operation on closed file

閉じたファイルに対して IO アクションを実行しようとしています。この場合は、閉じたファイルに書き込みます。

問題は、ループ内で出力ファイル ( "small_file3")を閉じていることです。すでに述べたように、おそらくループの後に閉じたいと思うでしょう。

入力 ( "big_file") ファイルからの読み取りが完了すると、-loop の直前でファイルforを閉じ、-loop の後で出力ファイルを閉じることができますfor

os.path.join()また、ファイルを開くためのパスを作成するために使用することも検討してください。

于 2012-09-11T12:01:34.843 に答える
0

ループ内のファイル記述子で close() を呼び出していますが、これは意味がありません。ループの外/後にファイル記述子を閉じたいと思うでしょう。

于 2012-09-11T11:56:56.153 に答える