Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-删除聊天日志文件的条件行_Python - Fatal编程技术网

Python-删除聊天日志文件的条件行

Python-删除聊天日志文件的条件行,python,Python,我试图从聊天日志文件中删除我的对话,只分析其他人的数据。当我像这样将文件加载到Python中时: with open(chatFile) as f: chatLog = f.read().splitlines() 'Other person's name', '08:39 Chat Data....', '08:40 Chat data..., '08:40 Chat data...?', 数据加载方式如下(比示例长得多): 我希望它看起来像这样: with open(chatFi

我试图从聊天日志文件中删除我的对话,只分析其他人的数据。当我像这样将文件加载到Python中时:

with open(chatFile) as f:
    chatLog = f.read().splitlines()
'Other person's name',
'08:39 Chat Data....',
'08:40 Chat data..., 
'08:40 Chat data...?',
数据加载方式如下(比示例长得多):

我希望它看起来像这样:

with open(chatFile) as f:
    chatLog = f.read().splitlines()
'Other person's name',
'08:39 Chat Data....',
'08:40 Chat data..., 
'08:40 Chat data...?',
我正在考虑将if语句与正则表达式一起使用:

name = 'My Name'
for x in chatLog:
    if x == name:
        "delete all data below until you get to reach the other 
         person's name"

我无法让这段代码正常工作,有什么想法吗?

我想你误解了“正则表达式”的含义。。。这并不意味着您可以编写英语指令,python解释器就会理解它们。或者你使用了伪代码,这使得调试变得不可能

如果你没有其他人的名字,我们可以假设它不是以数字开头的。假设所有非名称行都以数字开头,如您的示例所示:

name = 'My Name'
skipLines = False
results = []
for x in chatLog:
    if x == name:
        skipLines = True
    elif not x[0].isdigit():
        skipLines = False

    if not skipLines:
        results.append(x)

您可以使用with作为第二个参数(替换字符串)删除所有消息

假设每条聊天信息都以时间戳开头的新行开始,并且没有人的姓名可以以数字开头,则正则表达式模式
re.escape(yourname)+r',\n(?::\d.?\n)*'
应该匹配所有消息,然后可以用空字符串替换这些匹配

import re

with open(chatfile) as f:
    chatlog = f.read()
    yourname = 'My Name'
    pattern = re.escape(yourname) + r',\n(?:\d.*?\n)*'
    others_messages = re.sub(pattern, '', chatlog)
    print(others_messages)

这将用于从任意数量的用户正在聊天的聊天日志中删除任何用户的消息。

为什么不起作用?这似乎是正确的!我不知道如何正确地执行“删除下面的所有数据,直到你找到另一个人的名字”。另一个人的名字是一个我事先不知道的列表。你实际尝试了什么?上面的代码片段没有使用正则表达式,显然也没有运行。如果对方的名字是“08:40”,这怎么可能呢?谢谢!抱歉,我使用的是伪代码,这使得调试变得很困难。但是我用你的代码的一个变体解决了这个问题。我变了:elif x!=name:#(因为我并不总是知道对方的名字)skipLines=flase请解释这是如何解决问题的,而不是仅仅删除代码。请解释如何解释琐碎的自我解释代码。另外,如果你在理解上有问题,那么告诉我你不理解的部分。如果你甚至不愿意说出你有什么问题,我就不会无缘无故地解释一些琐碎的事情。