我今天在处理一个大文件的时候发现了这个。我的头脑=崩溃了,直到现在我总是从文件中创建一个内存中的对象,并在该对象上执行所有操作。你知道吗
考虑一下这个用例,我创建了一个巨大的文件(为了清晰起见),然后将它读入两个不同的列表中。你知道吗
import csv
import time
TEMP_FILE_NAME = '/tmp/foo.csv'
def write_huge_file():
with open(TEMP_FILE_NAME, 'wb') as f:
writer = csv.writer(f)
writer.writerows((((i, i + 100) for i in xrange(29999999))))
def get_file_iterator():
with open(TEMP_FILE_NAME, 'rb') as f:
reader = csv.reader(f, delimiter=',')
for row in reader:
yield row
def make_2_list_from_object():
file_iterator = get_file_iterator()
main_list = [(i, j) for i, j in file_iterator]
list1 = [i[0] for i in main_list]
list2 = [i[1] for i in main_list]
def make_2_list_from_file():
list1 = list(i[0] for i in get_file_iterator())
list2 = list(i[1] for i in get_file_iterator())
if __name__ == '__main__':
#write_huge_file() # Uncomment this to write the file once
print 'wrote_file'
a = time.time()
make_2_list_from_file()
b = time.time()
print b-a
make_2_list_from_object()
c = time.time()
print 'Time taken using file: ', str(b-a)
print 'Time taken using object: ', str(c-b)
现在,当我运行它时,我得到以下输出:
Time taken using file: 49.212211132 s
Time taken using object: 1018.5052530766 s
谁能给我解释一下吗?我认为这是因为python在耗尽RAM时使用了交换内存。你知道吗
另外,请注意,我有4千兆内存,而运行这个程序。如果有更多的RAM来复制,可以增加写入文件中的行数。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐