У меня есть файл .log размером более 1 ГБ. Я хочу разбить этот файл на несколько файлов в зависимости от размера файла. У меня есть код ниже, чтобы разделить его. Но требуется время, чтобы обработать данный файл журнала и затем разделить его.
Мой код:
import subprocess
import math
import os
import json
file_path = "path/to/file"
file_size = os.path.getsize(file_path)
MAX_SIZE = 300000000
if file_size > MAX_SIZE:
file_lines_str = str(subprocess.check_output(["wc", "-l", file_path]))
num_of_files = math.ceil(file_size / MAX_SIZE)
print(" Num of files", ":", num_of_files)
file_lines = file_lines_str.split(" ")[0].split("'")[1]
print("file_line is", " ", file_lines)
file_lines_to_be_read = math.ceil(int(file_lines) / num_of_files)
print("file lines to be read:", " ", file_lines_read)
with open(file_path) as infile:
for file_num in range(0, num_of_files):
seek_lines = file_num * file_lines_read
print("Seek_lines", seek_lines)
max_size_file = (file_num + 1) * file_lines_read
print("max_size_file", max_size_file)
output_file_name = "file_name_" + "_" + str(file_num)
with open(output_file_name, "a") as output:
i = seek_lines
while i < max_size_file:
line = infile.readline()
output.write(line)
i = i + 1
os.remove(file_path)
Этот код неэффективен:
1) Я использую readline
, который считывает полный файл журнала в память. Это не эффективный способ памяти.
2) Я разбиваюсь на строки, counting lines
- тоже занимает некоторое время.
Есть ли другой способ - оптимизированный и эффективный способ решения этой проблемы? Я уверен, что что-то должно быть там.