写入文件的运行时影响

Runtime impact of writing to a file

在此函数中,我首先按每个条目的第一个元素对列表进行排序,然后按第四个元素对列表进行排序,然后将每个条目写入文件,如下所示:

def sort_and_readToFile(lst):
    address = r"...\prospect\sortedSamples"
    lst.sort(key=lambda x: (x[0],x[3]))
    with open(address, "w") as f:
        for item in lst:
            f.write(str(item[0]) + ',' + str(item[1]) + ',' + str(item[2]) + ',' + str(item[3]) + '\n')
    f.close()

在这种情况下写入文件对运行时有何影响?大部分运行时是否用于写入文件(而不是对列表进行排序)?

让我们测量一下两者所花费的时间,看看:-

def sort_and_readToFile(lst):
    address = r"..\prospect\sortedSamples"

    start_time_sort_ms = time.perf_counter() * 1000
    lst.sort(key=lambda x: (x[0], x[3]))
    print("Time taken to sort the list = ", (time.perf_counter() * 1000) - start_time_sort_ms)

    start_time_write_ms = time.perf_counter() * 1000
    with open(address, "w") as f:
        for item in lst:
            f.write(str(item[0]) + ',' + str(item[1]) + ',' + str(item[2]) + ',' + str(item[3]) + '\n')
    print("Time taken to write to file = ", (time.perf_counter() * 1000) - start_time_write_ms)


sort_and_readToFile(['3343', '4223', '2454', '1664', '7666', '3555'])

我得到的输出是:-

Time taken to sort the list in ms =  0.008400000000008845  
Time taken to write to file in ms =  0.32550000000000523

现在,所花费的时间当然取决于列表中元素的数量和您使用的机器。但重要的一点是 对列表进行排序比写入文件 快得多(在本例中几乎快 40 倍)。这是因为排序是对RAM的操作,写入是对磁盘的操作(顺便说一下,我使用SSD,比普通HDD快,但你明白了)。

顺便说一下,由于您使用 with 打开文件,因此可以避免 f.close().