2014-03-25 4 views
0

좋아 그래서, 내가 여기에 코드가에 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() 

그래서 내가 그것을 실행하면 그것은 나를이 오류를 제공, 더 많은 파일에서 file.txt를 분할 할 수 있습니다

out1.txt 
1 
2 
3 
4 

out2.txt 
5 
6 
7 
8 
을 :
todoController\WordlistSplitter.py", line 9, in <module> 
    f.writelines(line) 
ValueError: I/O operation on closed file 

은 당신이 for 루프를 할 경우 파일 내가 for 루프의 F를 넣어 시도했지만 점점의 원인을 대신 작동하지 않도록 폐쇄됩니다 것을 이해

파일의 마지막 줄만 가져옵니다. 무엇을해야합니까, 나는 이전에 정의한 개방 함수를 상기 할 수있는 방법이 있습니까? 나는 꽤 파이썬에 익숙하지 않기 때문에 내가 할 수없는 것을 묻는다면 미안하다. D

답변

0

당신에게 f.close() 다음하지 openf로 새 파일, 다음 반복에 따라서 오류가 발생했습니다. 또한 파일을 처리하려면 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

f를 닫은 다음 오류가 발생하는 이후에 (다음 반복에서) 쓰기를 시도하는 경우.
도 - f를 두 번 닫는 이유는 무엇입니까?

0

당신은 아마 처음 f.close() 제거해야합니다 :

for 루프 내부
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() 
관련 문제