Python: 将文本文件读入数组 - 行分布不均

Python: read text file into array - unequal row distrubution

我需要处理一个包含科学出版物信息的大型文本文件,该文件是从 ScienceDirect 搜索页面导出的。我想把数据存储在一个数组数组中,这样每篇论文就是一个数组,所有论文都存储在一个更大的数组中。

好的地方是每一行都对应了我要放入数组的值,而且纸与纸之间有一个空行。问题是每篇论文都有不同的行数,从 2 到 6 不等。数据的一个例子是:

[Authors, title, journal, date] 
[(digital object identifier)]
[(link to ScienceDirect website)] 
[Abstract: Abstract] 
[It has been shown ...]

[Authors, title, journal, date] 
[(digital object identifier)]
[(link to ScienceDirect website)]
[Abstract: Abstract] 
[It has been shown ...]
[Keywords]

[Authors, title, journal, date] 
[(digital object identifier)]

等等。所需的数据结构将是 ArrayAllPapers [ Paper-1 , Paper-2 , ... , Paper-n ],其中每篇论文都是一个数组 Paper-1 [ author-line , doi-line , etc ]

我能够将文件作为数组逐行读入 python,但是 运行 遇到基于列表项(在本例中为 ' \n').我已经为对象的行距相等的数据集找到了这个问题的解决方案,其中大部分是为列表编写的,但是 none 适用于不均匀分布。也许我需要先写入文本文件以填写 'missing' 行以创建均等分布?

我仍在学习使用 Python(一些 MatLab 经验),所以如果有明显的解决方案,请原谅。我曾尝试寻找解决方案,但一无所获。

非常感谢任何帮助!

供参考,我现在用来将文本文件输入数组的代码:

import re, numpy 
with open("test-abstracts-short.txt", "r") as text: 
    array = [] 
    for line in text: 
        array.append(line)

如果第一行是强制性的,您可以尝试解析它们并为每篇文章创建这样的结构 {'author': 'Name', 'digital_object_identifier': 'Value'} 等等。

您可以尝试解析最常见的关键字并将它们附加为字段。所以你的文章会是这样的: {'author': 'Name', 'digital_object_identifier': 'Value', 'keyword1': 'Value', 'keyword2': 'Value', 'keyword3': 'Value'}.

您可以在某些特定字段中添加所有未解析的关键字(以免丢失数据): {'author': 'Name', 'digital_object_identifier': 'Value', 'keyword1': 'Value', 'keyword2': 'Value', 'keyword3': 'Value', 'other_keys': {'key': 'value'}}.

换句话说,您可以将文档拆分为必填字段和非必填字段。

既然要跳过空行,最简单的方法就是检查一行是否为空行。

x = []
with open('my_file.txt', 'r') as f:
    temp_list = []
    for line in f:
        if line.strip(): #line is not blank
            temp_list.append(line)
        else: #line is blank, i.e., it contains only newlines and/or whitespace
            if temp_list: #check if temp_list contains any items
                x.append(temp_list)
            temp_list = []