Разбиение данных на части заданного размера при записи
Пишу программу, которая разбивает текст на части по 10000 символов и записывает эти символы в файл.
Как сделать, чтобы автоматически создавались новые файлы и в них записывалось 10000 символов. Например, у меня текст в 40000 символов, я хочу его разбить на 4 файла по 10000 символов. Помогите, пожалуйста. вот код:
count = 1
sim_count = 1
temp_sim = ""
with open("5815016.txt", "r") as file:
temp = file.read()
for simvol in temp:
temp_sim += simvol
str(count)
if sim_count >= 10000:
with open("result/part.txt", "w") as file_write:
file_write.write(temp_sim)
count += 1
sim_count += 1
Ответы (3 шт):
Как вариант считать количество символов, и проверять, если оно кратно 10000, то создавать новый файл, и к названию прибавлять номер( я номером сделал результат деления количества символов на 10000), и по нужному срезу записывать строку в файл
count = 0
for simvol in temp:
if count % 10000 == 0:
with open("part.txt" + str(count // 10000), "w") as file_write:
file_write.write(temp[count - 10000:count])
count += 1
Можно сделать так
def chunks(lst, n):
for i in range(0, len(lst), n):
yield lst[i:i + n]
with open("5815016.txt", "r") as f:
text = f.read()
for i, chunk in enumerate(chunks(text, 10000)):
with open("result\\part-{}.txt".format(i), "w") as f:
f.write(chunk)
Немного переработал код, вот что получилось:
with open("test.txt", "r") as f:
data = f.read()
slices = []
count = 0
for i in range(1,len(data)//10000 + 1):
slices.append([count, i*10000])
count = i*10000
slices.append([count, len(data)+1])
for start, end in slices:
with open(f"{start}.txt", "w") as f:
f.write(data[start:end])
Я работал с тестовым файлом, который содержит 188890 символов
>>> len(data)
188890
Далее я разбил длину на участки кратные 10000 и поместил в список slices, в конец которого поместил остаток символов 8890
>>> slices
[[0, 10000], [10000, 20000], [20000, 30000], [30000, 40000], [40000, 50000], [50000, 60000], [60000, 70000], [70000, 80000], [80000, 90000], [90000, 100000], [100000, 110000], [110000, 120000], [120000, 130000], [130000, 140000], [140000, 150000], [150000, 160000], [160000, 170000], [170000, 180000], [180000, 188890]]
И в конце пробегаюсь по этому листу, который определяет промежутки для нужных файлов и сохраняю срезы в файлы