我有一个文本文件需要存储在列表中。
文件:
1 1
4 2
9 10
我想要一个对象列表。 L = [obj obj obj]
代码:
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()]
但我不知道如何解析列表?
请您参考如下方法:
你的假设是错误的,你不会访问磁盘内存 $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))
获取列表。