귀하의 코드는 이미 19 줄로 된 그룹을 추출하므로 귀하의 문제가 무엇인지 잘 모릅니다.
나는 약간 솔루션을 정리할 수 있지만, 코드 같은 일을 수행
from StringIO import StringIO
class CtxStringIO(StringIO):
def __enter__(self):
return self
def __exit__(self, *args):
return False
infile = CtxStringIO(''.join('{}\n'.format(i) for i in xrange(19*10)))
outfile = CtxStringIO()
# this should be the main loop of your program.
# just replace infile and outfile with real file objects
with infile as ifp, outfile as ofp:
for chunk in grouper(19, ifp, '\n'):
ofp.writelines(process_chunk(chunk))
# see what was written to the file
print ofp.getvalue()
이 : 여기
from itertools import izip_longest
# grouping recipe from itertools documentation
def grouper(n, iterable, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
def process_chunk(chunk):
"Return sequence of result lines. Chunk must be iterable."
for i, line in enumerate(chunk):
yield 'file-line {1:03d}; chunk-line {0:02d}\n'.format(i, int(line))
yield '----------------------------\n'
모든 라인이 방문한 것을 보여줍니다 몇 가지 테스트 코드 테스트 케이스는 다음과 같은 줄을 출력해야합니다 :
file-line 000; chunk-line 00
file-line 001; chunk-line 01
file-line 002; chunk-line 02
file-line 003; chunk-line 03
file-line 004; chunk-line 04
...
file-line 016; chunk-line 16
file-line 017; chunk-line 17
file-line 018; chunk-line 18
----------------------------
file-line 019; chunk-line 00
file-line 020; chunk-line 01
file-line 021; chunk-line 02
...
file-line 186; chunk-line 15
file-line 187; chunk-line 16
file-line 188; chunk-line 17
file-line 189; chunk-line 18
----------------------------
코드는 이미 19 줄로 그룹을 반복합니다. 문제가 무엇입니까? –
@Francis Avila : 내가 직면 한 문제는 다음 덩어리로 이동하는 것입니다. 첫 번째 청크에 대해서만 작동합니다. –
아니요, 모든 청크를 반복합니다. 표시하지 않는 코드에 또 다른 문제가 없다고 확신합니까? 어딘가에서 '쉬는 것'인가? –