我有大量的文本文件需要用 Python 读取。每个文件的结构如下示例:
------------------------------------------------------------------------------
\\
Paper: some_integer
From: <some_email_address>
Date: Wed, 4 Apr 2001 12:08:13 GMT (27kb)
Date (revised v2): Tue, 8 May 2001 10:39:33 GMT (27kb)
Title: some_title
Authors: name_1, name_2
Comments: 28 pages, JHEP latex
\\
blablabla (this is a multiline abstract of the paper)
blablabla
blablabla
\\
我想自动提取并存储(例如,作为列表)标题
、作者
和摘要(第二个和第三个之间的文本)\\
- 请注意,它以每个文本文件的缩进开头)。另请注意,日期(已修订)
和 标题
之间的白线确实存在(这不是我引入的拼写错误)。
到目前为止,我的尝试涉及(我正在显示单个文本文件的步骤,例如列表中的第一个文件):
filename = os.listdir(path)[0]
test = pd.read_csv(filename, header=None, delimiter="\t")
这给了我:
0
0 ----------------------------------------------...
1 \\
2 Paper: some_integer
3 From: <some_email_address>
4 Date: Wed, 4 Apr 2001 12:08:13 GMT (27kb)
5 Date (revised v2): Tue, 8 May 2001 10:39:33 G...
6 Title: some_title...
7 Authors: name_1, name_2
8 Comments: 28 pages, JHEP latex
9 Report-no: DUKE-CGTP-00-01
10 \\
11 blabla...
12 blabla...
13 blabla...
14 \\
然后我可以选择给定的行(例如,具有标题的行):
test[test[0].str.contains("Title")].to_string()
但它被截断了,它不是一个干净的字符串(显示了一些属性),我发现整个基于 pandas 的方法实际上非常乏味......必须有一种更简单的方法来直接选择行使用正则表达式从文本文件中获取兴趣。至少我希望如此......
最佳答案
您可以逐行处理。
import re
data = {}
temp_s = match = ''
with open('myfile.txt', 'r') as infile:
for line in infile:
if ":" in line:
line = line.split(':')
data[line[0]] = line[1]
elif re.search(r'.*\w+', line):
match = re.search(r'(\w.*)', line)
match = match.group(1)
temp_s += match
while 1:
line = infile.next()
if re.search(r'.*\w+', line):
match = re.search(r'(\w.*)', line)
temp_s += match.group(1)
else:
break
data['abstract'] = temp_s
关于python - 从文本文件正则表达式Python中读取并选择特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35588494/