Python 从文件中提取消息ID

Python 从文件中提取消息ID,python,dataframe,Python,Dataframe,我有以下代码,用于在中提取消息Id,并将它们收集到数据帧中 这是数据帧中的行示例: 消息ID: 我想要的只是

我有以下代码,用于在中提取
消息Id
,并将它们收集到
数据帧中

这是
数据帧中的行示例:

消息ID:

我想要的只是
前面的字符串。因为
消息ID
结尾。还有一些行的
消息ID
值为空。我想删除这些行

这是我写的代码

import pandas as pd
import numpy as np
 f = open('C:\\Users\\hmk\\Desktop\\PFE 2019\\ML\\MachineLearningPhishing- 
 master\\MachineLearningPhishing-master\\code\\resources\\emails- 
 enron.mbox','r')
 line_num = 0
 e = []
 search_phrase = "Message-ID"
 for line in f.readlines():
 line_num += 1
 if line.find(search_phrase) >= 0:
    #line = line[13:]
    #line = line[:-2]
    e.append(line)
 f.close()
 dfObj = pd.DataFrame(e) 

你想要一个子串你的行

f.readlines()中的行的
:
如果全部(在[search_phrase,“]”中的单词对应行中的单词):
e、 追加(行[line.find(“)作为最后一个字符
使用
中的
检查一个字符串是否在另一个字符串中
使用
find
获取模式的索引

使用
[in:out]
在两个值之间获取子字符串

一种方法是使用regex和pandas数据帧替换:

clean_df = df.replace(to_replace='\<|\>', value='', regex=True)
clean_df = clean_df.replace(to_replace='(Message-ID:\s*$)', value=np.nan, regex=True).dropna()
clean\u df=df.replace(to\u replace='\',value='',regex=True)
clean_df=clean_df.replace(to_replace='(消息ID:\s*$),value=np.nan,regex=True)。dropna()
第一行代码是删除<和>,假设MSG只包含这两个

第二个是检查主体上是否有消息id,如果没有,它将替换为NaN


注意,我使用NUMPY.NANN只是为了简化删除空白MSGs/P>< P>的过程,您可以使用正则表达式,它将为您提取所需的消息ID。 因此,提取消息id的第一部分如下所示:

import re#import regex
s='消息ID:'
message_id=re.search(r'message-id:',s).group(1)
打印('message\u id:',message\u id)
您理想的
消息ID

>>消息id:23272646.1075847145300.JavaMail。evans@thyme>

因此,您可以循环执行regex的数据结束检查,如下所示:

f.readlines()中的行的
:
行数+=1
message_id=re.search(r'message-id:',第行)
如果消息\u id:
msg_id_string=消息组(1)
e、 追加(行)
#你的其他作品
if message\u id:
检查您的
message id是否匹配,如果不匹配,将返回
None
,并且不会执行if指令。

s=“我们需要。是的,我们需要。”
s = "We want <This text inside only>. yes we do."
s2 = s[s.find("<")+1:s.find(">")]
print(s2) # Prints : This text inside only
# If you want to remove empty lines :
lines = filter(lambda x: x.strip(), lines)
s2=s[s.find(“”) 打印(s2)#打印:仅在内部打印此文本 #如果要删除空行,请执行以下操作: 线条=过滤器(λx:x.strip(),线条)

过滤器贯穿整条线路,不需要这样的for循环。

给您一个建议:

重新导入
f=open('PATH/TO/FILE','r')。read()

msgID=re.findall(r'(?你能用文本格式而不是屏幕截图发布输入数据吗?你是说数据框?所以当消息不是空的时候,你把它放在<和>之间,对吗?但是当消息是空的时候,你提到的那些行是用来做什么的?是的。或者
mbox
文件。当消息ID是空的时候,我只有
消息ID:
它告诉我
是空的Tr'对象没有属性“子字符串”< /C> >我的坏,子串是java,现在用Python谢谢,但是更新的帖子来考虑每个需求