我无法从文本文件中读取大量数据,并从中分割和删除某些对象以获得更精确的列表。例如,我们假设我有一个文本文件,我们将其称为“data.txt”,其中包含此数据。
Some Header Here
Object Number = 1
Object Symbol = A
Mass of Object = 1
Weight of Object = 1.2040
Hight of Object = 0.394
Width of Object = 4.2304
Object Number = 2
Object Symbol = B
Mass Number = 2
Weight of Object = 1.596
Height of Object = 3.293
Width of Object = 4.654
.
.
. ...Same format continuing down
我的问题是从这个文件中获取我需要的数据。让我们说我只对对象编号和对象质量感兴趣,它通过文件重复,但具有不同的数值。我需要一份这些数据的清单。实施例
Object Number Mass of Object
1 1
2 2
. .
. .
. .
etc.
当然排除标题,因为此数据将应用于等式。我对Python很陌生,对OOP没有任何了解。最简单的方法是什么?我知道打开和写入文本文件的基础知识,甚至一点点使用split和strip函数。我在这个网站上研究了很多关于数据排序的信息,但我无法让它为我工作。
答案 0 :(得分:0)
试试这个:
object_number = [] # list of Object Number
mass_of_object = [] # list of Mass of Object
with open('data.txt') as f:
for line in f:
if line.startswith('Object Number'):
object_number.append(int(line.split('=')[1]))
elif line.startswith('Mass of Object'):
mass_of_object.append(int(line.split('=')[1]))
答案 1 :(得分:0)
在我看来,字典(和子类)的效率大于一组大数据输入列表。
此外,如果您需要从文件中提取新的对象数据,我的代码不需要任何修改。
from _collections import defaultdict
checklist = ["Object Number", "Mass of Object"]
data = dict()
with open("text.txt") as f:
# iterating over the file allows
# you to read it automatically one line at a time
for line in f:
for regmatch in checklist:
if line.startswith(regmatch):
# this is to erase newline characters
val = line.rstrip()
val = val.split(" = ")[1]
data.setdefault(regmatch, []).append(val)
print data
这是输出:
defaultdict(None, {'Object Number': ['1', '2'], 'Mass of Object': ['1']})
Here关于速度的一些理论,here关于性能优化的一些提示和关于数据类型与实现效率之间的依赖关系的here。
最后,关于re
(正则表达式)的一些示例: