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 = []
我需要处理一个包含科学出版物信息的大型文本文件,该文件是从 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 = []