2014-03-25 303 views
0

好了,所以,我必须分配在多个文件的file.txt的,这里的代码ValueError异常:在关闭的文件I/O操作

a = 0 
b = open("sorgente.txt", "r") 
c = 5 
d = 16 // c 
e = 1 
f = open("out"+str(e)+".txt", "w") 
for line in b: 
    a += 1 
    f.writelines(line) 
    if a == d: 
     e += 1 
     a = 0 
     f.close() 
f.close() 

所以,如果我运行它,它给了我这个错误:

todoController\WordlistSplitter.py", line 9, in <module> 
    f.writelines(line) 
ValueError: I/O operation on closed file 

我明白,如果你的循环做一个文件被关闭,所以我试图把f在for循环,但它不工作的原因不是得到的:

out1.txt 
1 
2 
3 
4 

out2.txt 
5 
6 
7 
8 

我只得到文件的最后一行。我应该怎么做,有什么办法可以回想起我之前定义的开放函数?我是一个非常新的Python,所以我很抱歉,如果我问了一些我不能做的事,请耐心等待:D

回答

0

f.close()for循环内,然后不要open一个新的文件作为f,从而对下一次迭代的错误。您还应该使用with来处理文件,这可以节省您需要明确地close他们。

当你想在同一时间给每个out文件中写入四行,你可以做到这一点,如下所示:

file_num = 0 
with open("sorgente.txt") as in_file: 
    for line_num, line in enumerate(in_file): 
     if not line_num % 4: 
      file_num += 1 
     with open("out{0}.txt".format(file_num), "a") as out_file: 
      out_file.writelines(line) 

请注意,我用的变量名,使它更清楚一点发生了什么。

+0

感谢它的工作:D – Maxpnl

0

您关闭了文件,但是您不会从for循环中断。

0

如果a == d您正在关闭f,然后稍后(在下一次迭代中)您正在尝试写入它,从而导致错误。
也 - 你为什么关闭f两次?

0

你或许应该删除第一个f.close()

a = 0 
b = open("sorgente.txt", "r") 
c = 5 
d = 16 // c 
e = 1 
f = open("out"+str(e)+".txt", "w") 
for line in b: 
    a += 1 
    f.writelines(line) 
    if a == d: 
     e += 1 
     a = 0 
     # f.close() 
f.close() 
相关问题