簡體   English   中英

如何在每個文件的每個結束行具有特定條件的情況下拆分文件

[英]How to split file with certain conditions for each end line of each file

我有一個.txt文件,如下所示:

2019-03-29 12:03:07 line1 
                    line2
                    line3
                    ....
2019-03-30 07:05:09 line1
                    line2
                    ....
2019-03-31 10:03:20 line1
                    line2
                    ....

我將文件分成幾個文件,如下所示:

inputData = 'dirname\..'
numThrd  = 3
def chunkFiles():
    nline = sum(1 for line in open(inputData,'r', encoding='utf-8', errors='ignore'))
    chunk_size = math.floor(nline/int(numThrd))
    n_thread = int(numThrd)
    j = 0
    with open(inputData,'r', encoding='utf-8', errors='ignore') as fileout:
        for i, line in enumerate(fileout):
            if (i + 1 == j * chunk_size and j != n_thread) or i == nline:
                out.close()
            if i + 1 == 1 or (j != n_thread and i + 1 == j * chunk_size):
                chunkFile = 'rawData' + str(j+1) + '.txt'
                if os.path.isfile(chunkFile ):
                    break
                out = open(chunkFile , 'w+', encoding='utf-8', errors='ignore')
                j = j + 1
                fLine = line[:-1]
                if not matchLine:
            if out.closed != True:
                out.write(line)
            if i % 1000 == 0 and i != 0:
                print ('Processing line %i ...' % (i))

但是,我希望拆分文件滿足以下條件:塊文件中的最后一行必須恰好在具有日期的行之前。

我得到的最近輸出:

rawData1.txt
2019-03-29 12:03:07 line1
                    line2
                    ....
-------------------------
rawData2.txt
                    line50
                    line51
2019-03-30 07:05:09 line1
                    line2
                    .....

所需的輸出:

rawData1.txt
2019-03-29 12:03:07 line1 
                    line2
                    line3
                    ....
-------------------------
rawData2.txt
2019-03-30 07:05:09 line1
                    line2
                    ....

為了滿足這些條件,我應該在上面的腳本中添加什么?

非常感謝你

您可以通過使用列表保存要寫入的行來產生所需的輸出(請參見下文)。

def write_chunk(filename, chunk):
    with open(filename, "w") as out:
        for i in chunk:
            out.write(i)

chunk = []
n_chunk = 1

with open("data.txt") as f:
    for line in f:
        if not line[0].isspace() and chunk:
            write_chunk("{}.txt".format(n_chunk), chunk)
            chunk = []
            n_chunk += 1
        chunk.append(line)
# write final chunk
write_chunk("{}.txt".format(n_chunk), chunk)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM