Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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 3.x 如何排除或删除Python中的特定部分_Python 3.x - Fatal编程技术网

Python 3.x 如何排除或删除Python中的特定部分

Python 3.x 如何排除或删除Python中的特定部分,python-3.x,Python 3.x,我想分析一下下面的聊天日志,找出最常用的单词。因此,我只需要[time]之后的部分,比如[01:25]。我将如何改变 +++ 约翰,麦克斯,戴着超级帽子的特蕾西 保存日期:2019-11-22 19:29:46 ---------------2019年7月9日,星期二--------------- [约翰][00:27]你好 [Max][01:25]否 有人有香蕉吗? [Max][04:39]没有 我的天啊 ---------------2019年7月10日星期三---------------

我想分析一下下面的聊天日志,找出最常用的单词。因此,我只需要[time]之后的部分,比如[01:25]。我将如何改变

+++
约翰,麦克斯,戴着超级帽子的特蕾西
保存日期:2019-11-22 19:29:46
---------------2019年7月9日,星期二---------------
[约翰][00:27]你好
[Max][01:25]否
有人有香蕉吗?
[Max][04:39]没有
我的天啊
---------------2019年7月10日星期三---------------
有人有杯子吗?
[Max][14:45]没有
[约翰][14:45]哦,我的佛陀
+++
从集合导入计数器
进口稀土
wordDict=计数器()
将open(r'C:chatlog.txt,'r',encoding='utf-8')作为f:
chatline=f.readlines()
chatline=[x.strip()表示chatline中的x]
聊天线=[x代表聊天线中的x,如果是x]
对于范围内的计数(len(聊天热线)):
如果计数小于2:
持续
聊天热线中的elif'--------------':
持续
关于split(r“\[\d{2}[:]\d{2}\]”,聊天热线中x代表x)#可能需要修改此部分
打印(‘单词’、‘频率’)
对于word,最常见的单词频率(50):
打印({0:10s}:{1:3d})。格式(word,freq))

尝试像这样使用拆分

lines = ["[Tracey] [02:31] Anybody has some bananas?","[John] [20:58] Oh my goodness"]
for i in lines:
    print(i.split(' ')[2:])

您可以使用模式
/^.*?\[\d\d:\d\d\]\s*(.+)$/
来匹配相关行后的文本(我会逐行处理,而不是使用
f.readlines()
来读取文件,这对内存不友好)。因为时间戳是非常唯一的,所以不需要专门处理其他任何事情,但是如果您愿意,可以对行开头用户名周围的括号进行测试

import re
from collections import Counter

words = []

with open("chatlog.txt", "r", encoding="utf-8") as f:
    for line in f:
        m = re.search(r"^.*?\[\d\d:\d\d\]\s*(.+)$", line)

        if m:
            words.extend(re.split(r"\s+", m.group(1)))

for word, freq in Counter(words).most_common(50):
    print("{0:10s} : {1:3d}".format(word, freq))
输出:

No:3
任何人:2
民政事务总署:2
哦:2
我的:2
嗨:1
部分:1
香蕉1.
天哪:1
a:1
杯子?:1.
佛陀:1
可以看出,剥离标点符号也值得一做。你可以用像这样的东西

# ...
if m:
    no_punc = re.split(r"\W+", m.group(1))
    words.extend([x for x in no_punc if x])
# ...

如果我处理频繁的用户名,我将如何更改Regex?没问题。您可以使用类似于
^\[.+?\]\s+\[\d\d:\d\d\]\s*(.+)$
的内容,强制执行
[foo]
出现在
[timestamp]
部分之前。
# ...
if m:
    no_punc = re.split(r"\W+", m.group(1))
    words.extend([x for x in no_punc if x])
# ...