Как разделить текстовый файл, который непрерывно добавляет к нему строку, асинхронным способом? - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу код python 3.7+, который ожидает появления файла .text, где заливка .text появится в каталоге через внешнюю программу, а также добавила новые строки в этот файл .text этим внешним Программа в промежуток времени. Когда появляется текстовый файл, я открываю его, пока он еще записывается, и распечатываю содержимое. Поскольку текстовый файл обновляется внешней программой, я хочу напечатать любые новые строки, записываемые в него. Если в файл не записана новая строка, я хочу подождать. тогда, когда доступны новые строки, я хотел бы печатать только новые строки. Еще одна вещь, которую нужно улучшить, - это дождаться появления файла, а не просто приостановить выполнение сценария python.

Приведенный ниже код разбивает содержимое текстового файла на несколько текстовых файлов в зависимости от номера линия в нем. Здесь операция выполняется c, а не динамически c.

import os
import sys
import linecache

from util import run

class Split_file():
    def __init__(self, path, neighbourhood):
        self.path = path
        self.neighbourhood = neighbourhood
        self.line_no = 0
        self.part_stored = {}

    def split(self):
        f = open(f'{self.path}\{self.neighbourhood[0]}.txt','r').read().split('\n')
        length = len(self.neighbourhood) - 1
        print("neighbour :",length)
        linetotal = len(f)
        print("total lines :",linetotal)
        # splitLen = int(linetotal / length)
        splitLen = 1
        # print(splitLen)
        i = 1
        for lines in range(self.line_no, len(f), splitLen):
            e = i % length
            if e == 0:
                e = length
                print("neighbour no:",e)
                slpitdata = linecache.getline(f'{self.path}\{self.neighbourhood[0]}.txt',i)
                output = open(f'{self.path}/{self.neighbourhood[e]}.txt', 'a+')
                output.write(''.join(slpitdata))
                output.close()
            else:
                print("neighbour no:",e)
                slpitdata = linecache.getline(f'{self.path}\{self.neighbourhood[0]}.txt',i)
                output = open(f'{self.path}/{self.neighbourhood[e]}.txt', 'a+')
                output.write(''.join(slpitdata))
                output.close()
            i += 1
        print("succesfully splited")
        line_no = i
        # self.part_stored[id] = split_file

if __name__=="__main__":
    lis = sys.argv[2:]
    o_path = os.path.abspath(os.path.realpath(sys.argv[1]))
    path = (f'{o_path}\{lis[0]}')
    split_file = Split_file(path, lis)
    try:
        run(
            split_file.split()
        )
    except KeyboardInterrupt:
        print("Exiting...")
        exit()
...