在Python中使用字符串和浮动从大型文本文件读取数据

在Python中使用字符串和浮动从大型文本文件读取数据,python,file,sorting,split,Python,File,Sorting,Split,我很难从文本文件中读取大量数据,无法从中拆分和删除某些对象以获得更精确的列表。例如,假设我有一个文本文件,我们称之为“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

我很难从文本文件中读取大量数据,无法从中拆分和删除某些对象以获得更精确的列表。例如,假设我有一个文本文件,我们称之为“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一无所知。最简单的方法是什么?我知道打开和写入文本文件的基本知识,甚至知道一点使用拆分和剥离功能的知识。我在这个网站上对数据排序做了很多研究,但我无法让它为我工作。

试试这个:

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]))
在我看来,字典(和子类)比一组用于输入大量数据的列表效率更高

此外,如果需要从文件中提取新的对象数据,我的代码不需要任何修改

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']})
关于速度的一些理论,关于性能优化的一些技巧,以及关于数据类型和实现效率之间的依赖关系

最后,关于
re
(正则表达式)的一些示例:


您尝试过任何代码吗?如果是这样的话,让我们看一看,然后从这里开始。我已经经历了一系列不同的代码,它们都不起作用,我没有保存它们。我编写了一个非常简单的代码来演示。import sys f=open('data.txt','r')A=f.readlines(),用于A:B=I.split(“=”),如果我在B=='Object Number':print B.remove('Object Number'),当然这不起作用,我不会得到输出。如果我删除If语句,我会得到输出,它会被=符号分割,但由于某种原因,它会跳入文本文件,从objectnumber=120开始,而不是第一个。这类操作有效。当我将它应用到data.txt文件时,它确实给出了一个列表。但是只有一个物体编号的列表,而不是物体的质量。我将不得不更多地使用这些代码,但我对您编写的很多东西都不熟悉,比如导入re、\u集合、defaultdict、reg\u exp。我将不得不仔细研究这些,看看是否能对它们有所了解。当然感谢如果您需要导出更多对象,您可以扩展列表
检查表
。如果我的解决方案对您有效,您可以选择它吗?:-)这段代码对我来说很有用,我对它的理解比Alessandro所发布的要多(他没有错,我只是对python非常陌生)。我添加了更多的代码来将其写入一个单独的文件。{f2=open('data2.txt','w');对于对象_编号中的项:f2.write(“%s\n”%item)}这起作用,我得到对象编号的第一列数据。我该如何编写更多的代码来将大量的对象附加到第二列中?谢谢你的帮助,我会继续玩下去,看看我能想出什么来。@Collaptic,如果我的答案对你有帮助的话。@padraiccanningham,谢谢。我编辑代码并逐行读取文件。