python - 从文本文件正则表达式Python中读取并选择特定行

标签 python regex

我有大量的文本文件需要用 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/

相关文章:

python - 无法使用numpy loadtxt与python3.6转换日期

JavaScript 正则表达式模式与变量连接

regex -\G什么时候在正则表达式中有用?

regex - 从正则表达式匹配中捕获单词

python - Pandas 打开 json 文件 JSON -ValueError : Expected object or value

python - 为什么使用 python 从客户端接收图像后无法从服务器向客户端发送任何内容?

python - 3 种不同的应用程序和 docker 容器

python - OR 工具始终返回非常次优的 TSP 解决方案

ruby-on-rails - 基于正则表达式的 Rails 自定义验证?

c++ - regex_match 给出意想不到的结果