Второй подход с with
и без пустых строк в конце:
lines_per_file = 2
for lineno in range(0, len(A), lines_per_file):
small_filename = 'small_file_{}.txt'.format(lineno + lines_per_file)
with smallfile = open(small_filename, "w"): #this will close the file by itself
smallfile.write('\n\n'.join('\n'.join(str(x) for x in A[current])) for current in range(lineno, min(lineno+lines_per_file, len(A)))
Давайте объясним магию:
for lineno in range(0, len(A), lines_per_file):
Мы будем принимать все строки от 0 доlines_per_file-1, затем lines_per_file в 2 * lines_per_file-1 ... До конца.
'\n'.join(str(x) for x in A[current])
Это то, что вы использовали, но мы вызываем строку непосредственно из A. Анализирует одну строку как отдельные символы внесколько строк.
'\n\n'.join(...)
Анализируемые строки будут иметь два переноса строк между собой - это означает, что вы хотите пустую строку.
for current in range(lineno, min(lineno+lines_per_file, len(A))
Как я уже сказал, мы берем строкиот белья (то есть: 0, lines_per_file, 2 * lines_per_file ...) до следующего шага.Или до конца буквы А, в зависимости от того, что короче (поэтому есть мин).