Читайте input_file
построчно, сохраняя каждое значение, убранное из начальных / конечных пробелов в списке.Когда длина списка равна 10, join
все 10 элементов в строку (разделенные запятой и пробелом).Добавьте строку к output_file
.Повторно инициализируйте список, чтобы он опустел, и повторяйте, пока в input_file
не останется больше строк.После выхода из цикла for
, который читает строки в файле, проверьте, есть ли в списке какие-либо элементы, которые нужно записать в output_file
.Это может произойти, если число значений / строк в input_file
не кратно 10.
# Read values from input_file and output as comma-separated values with 10 values per row
def process_input_txt_file(input_file, output_file):
log.debug('Enter process_input_txt_file')
# Create / overwrite existing output_file
open(output_file, 'w+').close()
# Store each value stripped of leading / trailing whitespace in a list
value_list = []
with open(input_file, 'r') as input_fh:
for line in input_fh:
value = line.strip()
value_list += [value]
if len(value_list) == 10:
# Store the 10 values as a string, comma-separated
value_row = '%s' % ', '.join(map(str, value_list))
# Empty the list
value_list = []
# Write the string to output_file, on one line (row)
with open(output_file, 'a') as output_fh:
print(value_row, file=output_fh)
# Check if value_list contains any elements
if value_list:
# Store the remaining values as a string, comma-separated
value_row = '%s' % ', '.join(map(str, value_list))
# Write the string to output_file, on one line (row)
with open(output_file, 'a') as output_fh:
print(value_row, file=output_fh)
Я протестировал этот скрипт с 100,001 значениями / строками, и это заняло чуть менее 3 секунд:
[2019-09-23 21:52:21,639] [main] Start example.py execution
[2019-09-23 21:52:21,643] [process_input_txt_file] Enter process_input_txt_file
[2019-09-23 21:52:23,931] [main] End example.py execution