我有一个文本文件,我需要存储在列表中。
文件:
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()]
但我不知道如何解析列表?
答案 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