Этот разделяет файл новыми строками и записывает его обратно. Можно изменить разделитель легко. Это может также обработать неровные суммы также, если у Вас нет нескольких splitLen строк (20 в этом примере) в Вашем входном файле.
splitLen = 20 # 20 lines per file
outputBase = 'output' # output.1.txt, output.2.txt, etc.
# This is shorthand and not friendly with memory
# on very large files (Sean Cavanagh), but it works.
input = open('input.txt', 'r').read().split('\n')
at = 1
for lines in range(0, len(input), splitLen):
# First, get the list slice
outputData = input[lines:lines+splitLen]
# Now open the output file, join the new slice with newlines
# and write it out. Then close the file.
output = open(outputBase + str(at) + '.txt', 'w')
output.write('\n'.join(outputData))
output.close()
# Increment the counter
at += 1
строка чтения
принимает необязательный аргумент ( eof-error-p
), позволяющий вернуть либо NIL
(по умолчанию), либо указанное пользователем значение ( eof-value
) при попадании в EOF
вместо сообщения об ошибке.
] READ-LINE и необязательный поток eof-error-p eof-value recursive-p
В перечисленных выше функциях чтения необязательные аргументы
EOF-ERROR-P
иEOF-VALUE
укажите, что происходит, когда ваша программа пытается читать из исчерпанного потока. ЕслиEOF-ERROR-P
истинно (по умолчанию), то Lisp сообщит об ошибке при попытке прочитать исчерпанный поток. ЕслиEOF-ERROR-P
равен NIL, тогда Lisp возвращаетEOF-VALUE
(по умолчаниюNIL
) вместо сообщения об ошибке.
Вы можете использовать это как простое условие завершения вашей функции.
См. HyperSpec для READ-LINE
(loop for line = (read-line stream nil :eof) ; stream, no error, :eof value
until (eq line :eof)
do ... )
или иногда с nil
(loop for line = (read-line stream nil nil)
while line
do ... )