从大型对象创建列表要比从大型对象创建列表花费更多的时间

2024-04-19 13:51:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我今天在处理一个大文件的时候发现了这个。我的头脑=崩溃了,直到现在我总是从文件中创建一个内存中的对象,并在该对象上执行所有操作。你知道吗

考虑一下这个用例,我创建了一个巨大的文件(为了清晰起见),然后将它读入两个不同的列表中。你知道吗

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来复制,可以增加写入文件中的行数。你知道吗


Tags: csvinfromforgetmakeobjecttime