将文件的内容放在列表中?

时间:2017-02-01 16:51:08

标签: python python-2.7

我有一个文本文件,我需要存储在列表中。

文件:

1 1
4 2
9 10

我想要一个对象列表。 L = [obj obj obj]

CODE:

def putInList(pathToFile):
     myList = []
     with open(pathToFile) as f:
         for line in f:
             s = line.split()
             x, y = [int(v) for v in s]
             jemand = Mensch(x, y)
             myList.append(jemand)
     return myList

这很好用! 我的问题是我访问 DISK MEMORY 行数次!

这个样本是人为的我将使用更大的文件。所以我写了一个切片器,将它们放入~100MB .txt个文件中。所以我想将它们放在list中,而不会访问disk memory百万次。

在StackOverFlow上搜索和其他问题后,我发现了这段代码:

a = open(fileToPath, 'r')
L = [line for line in a.readlines()]

但我不知道如何解析列表?

2 个答案:

答案 0 :(得分:2)

您的假设是错误的,您将无法访问磁盘内存$ lines次。缓冲处理。

我可以提出一些建议。你的线分裂逻辑比它需要的更复杂。使(在我看来)更清楚的一种方法是:

x, y = map(int, line.split())

这样你就不会不必要地创建一个后来立即丢弃的列表。

如果您稍后迭代myList,并且只执行一次,则可以完全删除列表,并使用生成器函数代替:

def putInList(pathToFile):
     with open(pathToFile) as f:
         for line in f:
             x, y = map(int, line.split())
             yield Mensch(x, y)

然后,您可以使用for mensch in putInList(filename):对其进行迭代,但在这种情况下您可能希望重命名该函数。如果您仍然需要列表,我会这样做,并使用myList = list(putInList(filename))获取列表。

答案 1 :(得分:0)

默认情况下,您的文本文件中

readLines() returns a list of the lines。所以,我认为你应该做的是:

def putInList(pathToFile):
    myList = []
    fileHandle = open(pathToFile, "r")
    lines = fileHandle.readLines()
    for line in lines:
        values = line.split()
        x, y = [int(v) for v in values]
        jemand = Mensch(x, y)
        myList.append(jemand)
    return myList