【发布时间】:2015-11-14 17:11:39
【问题描述】:
在谈到 Python 时,我比较天真,因此对任何不相关的陈述表示歉意。
我正在使用一个包含大约 500k 行的 CSV 文件。 (~60 MB)
我需要在读取文件时对文件进行一些基本的清理,这很好,但我还需要将 CSV 的每一行与同一文件的每一行进行比较。最初我已加载文件并将其存储在 List 中,然后循环两次以比较行。这可能是一种愚蠢的方法,因为我很快就耗尽了内存。它看起来像这样:
for row in self.trainingdata:
for row2 in self.trainingdata:
# Do Stuff
我的问题是,最节省内存的方法是什么?我应该两次打开同一个文件并比较每一行吗?还是有更好的方法来存储数据?我正在寻找一些关于最佳方法的高级指导。我目前的想法如下,但我还没有完成:
with open('/ThisIsTheFile', 'rU') as csvread:
reader = csv.reader(csvread, delimiter=',')
with open('/ThisIsTheFile', 'rU') as csvread2:
reader2 = csv.reader(csvread2, delimiter=',')
#Do Stuff
感谢您的帮助!
【问题讨论】:
-
这不是一个很大的文件,你是从哪里运行的?
-
看看filecmp。让它成为你方法的先驱。所以它会快速运行相同的而不是循环
-
你在做什么样的比较?文件中的每一行都是 1 行吗?是文件中的另一行与另一特定行相对的行吗?你试过 deepcopy 模块吗?我可以帮助不必再次阅读文件
-
@GermanRosales,deepcopy 将如何提供帮助?读取文件不会导致内存问题,存储更多数据会
-
我应该打开同一个文件两次 否 deepcopy 将有助于获取列表的副本
标签: python csv for-loop memory