그래, 데이터를 메모리에 씁니다. 데이터를 크기 (이 경우에는 1GB)로 설정 한 다음 파일을 자르고/덤프하고이 데이터가 더 이상 쓸 데이터가 없을 때까지이 프로세스로 계속 진행하려고합니다. 현재 그것은 한계에 도달하고 그것을 잘라내는 다음 함수를 끝내는 방법에 따라 다음 오류 중 하나와 함께 실패합니다.ValueError : python으로 닫힌 파일에 대한 입출력 작업 cStringIO
Traceback (most recent call last):
File "<pyshell#192>", line 1, in <module>
cart_for(10,'1234567890')
File "<pyshell#191>", line 8, in cart_for
x.write(''.join(p))
ValueError: I/O operation on closed file
내 기능은 다음과 같습니다
x = StringIO()
def cart_for(n, seq):
b = 8
a = 100000
size_max = 1073741824
for m in range(n, b, -1):
a = a - 1
for p in itertools.product(seq, repeat=m-1):
x.write(''.join(p))
x.write('\n')
x.seek(0, os.SEEK_END)
size = x.tell()
if size > size_max:
with open('C:/out/' + ran(8,string.ascii_letters) + '.txt', 'w') as handle:
handle.write(x.getvalue())
x.close()
x
내가 내 기능을 종료하는 경우 :
x = StringIO()
대신 :
x
오류 않습니다 :
Traceback (most recent call last):
File "<pyshell#189>", line 1, in <module>
cart_for(10, '1234567890')
File "<pyshell#188>", line 8, in cart_for
x.write(''.join(p))
UnboundLocalError: local variable 'x' referenced before assignment
이 과정을 완료하는 방법에 대한 아이디어가 있으십니까? 나는 많은 사람들이 메모리를 디스크에 너무 자주 잘라서 메모리의 공간을 다 쓰지 않아도되기 때문에 함수가 완료 될 때까지 계속 실행될 수 있다고 생각할 수 있습니다. 이것을 완성하기 위해 정적 변수에 의해 정의 된 임의의 변수 이름을 생성 할 수 있습니까? 용서해주십시오. 저는 파이썬을 처음 접했습니다.
x.write 전에 x를 초기화하십시오. –
충분하지 않습니다. .... 나는 질문을 업데이 트했습니다 ... 어떤 예 .... ....? 마지막 오류가 발생한 이유를 이해하지만이 작업을 어떻게 수행합니까? 그냥 논리가 필요해. – jkdba
size_max 이후 ... Put x = StringIO() –