gpt4 book ai didi

python - 通过正则表达式和/或 python 从文本文件中提取信息

转载 作者:太空宇宙 更新时间:2023-11-03 15:54:39 25 4
gpt4 key购买 nike

我正在处理大量文件(值(value)约 4gb),这些文件都包含 1 到 100 个条目,格式如下(两个 *** 之间是一个条目):

***
Type:status
Origin: @z_rose yes
Text: yes
URL:
ID: 95482459084427264
Time: Mon Jul 25 08:16:06 CDT 2011
RetCount: 0
Favorite: false
MentionedEntities: 20776334
Hashtags:
***
***
Type:status
Origin: @aaronesilvers text
Text: text
URL:
ID: 95481610861953024
Time: Mon Jul 25 08:12:44 CDT 2011
RetCount: 0
Favorite: false
MentionedEntities: 2226621
Hashtags:
***
***
Type:status
Origin: @z_rose text
Text: text and stuff
URL:
ID: 95480980026040320
Time: Mon Jul 25 08:10:14 CDT 2011
RetCount: 0
Favorite: false
MentionedEntities: 20776334
Hashtags:
***

现在我想以某种方式将这些导入 Pandas 进行质量分析,但显然我必须将其转换为 Pandas 可以处理的格式。所以我想编写一个脚本,将上面的内容转换成一个看起来像这样的 .csv(用户是文件标题):

User   Type    Origin              Text  URL    ID                Time                          RetCount  Favorite  MentionedEntities  Hashtags
4012987 status @z_rose yes yes Null 95482459084427264 Mon Jul 25 08:16:06 CDT 2011 0 false 20776334 Null
4012987 status @aaronsilvers text text Null 95481610861953024 Mon Jul 25 08:12:44 CDT 2011 0 false 2226621 Null

(格式并不完美,但希望您能理解)

我有一些代码在正常工作的基础上工作,这些代码通常以 12 段为单位提供信息,但遗憾的是,有些文件在某些​​字段中包含几条白线。我基本上想要做的是:

fields[] =['User', 'Type', 'Origin', 'Text', 'URL', 'ID', 'Time', 'RetCount', 'Favorite', 'MentionedEntities', 'Hashtags']
starPair = 0;
User = filename;
read(file)
#Determine if the current entry has ended
if(stringRead=="***"){
if(starPair == 0)
starPair++;
if(starPair == 1){
row=row++;
starPair = 0;
}
}
#if string read matches column field
if(stringRead == fields[])
while(strRead != fields[]) #until next field has been found
#extract all characters into correct column field

但是问题出现了,有些字段可以包含字段[]中的单词。我可以先检查一个\n 字符,这将大大减少错误条目的数量,但不会消除它们。

谁能指出我正确的方向?

提前致谢!

最佳答案

您可以结合使用正则表达式和字典理解:

import regex as re, pandas as pd

rx_parts = re.compile(r'^{}$(?s:.*?)^{}$'.format(re.escape('***'), re.escape('***')), re.MULTILINE)
rx_entry = re.compile(r'^(?P<key>\w+):[ ]*(?P<value>.+)$', re.MULTILINE)

result = ({m.group('key'): m.group('value')
for m in rx_entry.finditer(part.group(0))}
for part in rx_parts.finditer(your_string_here))

df = pd.DataFrame(result)
print(df)

哪个产量

  Favorite Hashtags                 ID MentionedEntities               Origin  \
0 false 95482459084427264 20776334 @z_rose yes
1 false 95481610861953024 2226621 @aaronesilvers text
2 false 95480980026040320 20776334 @z_rose text

RetCount Text Time Type URL
0 0 yes Mon Jul 25 08:16:06 CDT 2011 status
1 0 text Mon Jul 25 08:12:44 CDT 2011 status
2 0 text and stuff Mon Jul 25 08:10:14 CDT 2011 status


解释:

  1. 将字符串分成不同的部分,两边用***包围
  2. 在每一行中查找键值对
  3. 将所有对放入字典中

我们最终得到了一个字典生成器,然后将其输入到 pandas 中。

提示:

该代码尚未经过大量数据测试,尤其是 4gb。此外,您还需要更新的 regex 表达式工作的模块。

关于python - 通过正则表达式和/或 python 从文本文件中提取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44287592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com