在Python中迭代文本文件中不匹配条件的行

问题描述 投票:0回答:1

我目前正在处理来自 WhatsApp 的一些聊天消息,我需要以允许我将它们用于其他应用程序的方式拆分它们。这些消息是纯文本并遵循特定的模式。

一切都很顺利,除了用户添加新行时,例如当他们发送更详细的消息时。这会导致消息中出现新行。

因此,我需要一个可以连接这些与我想要的模式不匹配的线的模式。

目前,我正在迭代这些行,并在每行的开头使用 REGEX 模式来确定它是否有效。

但是,我遇到的问题是我无法正确加入他们。

所需的输出将位于第 5 行,并与下一行相连,直到匹配下一个模式。

[31/08/2020, 15:07:29] Paulo Bombinhas: Temos sim. Precisamos ver com o condomínio boulevard como vai ficar para reservar. Semana passada quando falei com eles dissseram que até então a capacidade de ocupação dos aptos está em 50% ou seja apenas 3 pessoas por apartamento
[31/08/2020, 15:08:41] Maria: Deste jeito não alugara né
[31/08/2020, 15:12:21] Paulo Bombinhas: Com essa taxa de ocupação fica bem difícil alugar. Mas acredito que para o verão já esteja normalizado
[10/09/2020, 11:04:25] Maria: Eu te passo
[11/09/2020, 10:45:21] Maria: administradora de Bens Ltda
36572992/0001-79
Caixa 104
Agência 4111
C/ C 245551-7 operação 005511
[15/09/2020, 06:36:31] Paulo Bombinhas: Bom dia Maria. Hoje vou passar o dia com a Livia para terminar o relatório e caso haja pendências já acertarmos também. Preciso entrar em contato por telefone também, me avise o melhor horário por favor.
[15/09/2020, 08:07:58] Maria: Bom dia Paulo. Que ótimo!  

这是我正在使用的代码:

import re

def process_chat_files(filename):
    with open(filename, 'r') as file:
        lines = file.readlines()
        processed_lines = []
        pattern = r'^\[\d{2}\/'


        if not re.match(pattern, cleaned_line):
            joiner = line[-1] + line
            processed_lines.append(joiner)
        else:
            processed_lines.append(line)


    
    with open('./whats/_chat_to_join_fixed.txt', 'w') as file:
        for line in processed_lines:
            file.write(line)

python arrays txt
1个回答
0
投票

这是一些可以工作的代码:

import re
import os

# Regular expression pattern
pattern = r'^\[\d\d/\d\d/\d{4}, \d\d:\d\d:\d\d\].*'

# Input and output file paths
input_file = 'input.txt'
output_file = 'output.txt'

match_count = 0
output_string = ""

if os.path.exists(output_file):
    os.remove(output_file)

with open('input.txt', 'a') as file:
    file.write('[00/00/0000, 00:00:00]\n')    # add last line needed to process the next to last line

with open(input_file, 'r') as file:
    for line in file:
        line = line.rstrip("\n")
        if match_count > 0 and re.search(pattern, line):
            match_count = 0
            # match with match_count > 0, output line and set match_count to 0
            with open(output_file, 'a') as output:
                if output_string != "[00/00/0000, 00:00:00]":
                    output.write(output_string + "\n")
                    output_string = line
        # Check if line matches the pattern and the match_count is 0
        if match_count == 0 and re.search(pattern, line):
            match_count += 1
            # match found, save line to output string
            output_string = line

        if match_count > 0 and not re.search(pattern, line):
            # append line to output string
            output_string = output_string + " || " + line
© www.soinside.com 2019 - 2024. All rights reserved.