-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因为您已完成读取,并在for-loop 之后关闭您的输出文件。

还可以考虑使用os.path.join()来构建打开文件的路径。

于 2012-09-11T12:01:34.843 回答
0

您在循环内的文件描述符上调用 close() ,这是零意义的。您可能希望在循环之外/之后关闭文件描述符。

于 2012-09-11T11:56:56.153 回答