Skip to main content
 首页 » 编程设计

python之将大量 Python 列表的数据导出到文本文件的最快方法

2025年05月04日15hnrainll

我正在寻找最高效的方法来导出最多 10 个 Python 列表的元素 [x1, x2, x3, ... xn], [y1, y2, y3, ... yn], [z1, z2, z3, ... zn], ... 到结构如下的文本文件:

x1 y1 z1  .  .  .  
x2 y2 z2  .  .  . 
x3 y3 z3  .  .  . 
 .  .  .  .  .  . 
 .  .  .  .  .  . 
 .  .  .  .  .  . 
xn yn zn  .  .  . 

具有挑战性的是每个列表可能有多达 100 万个元素(仅 float 或 int 数字)

非常感谢任何建议。

请您参考如下方法:

使用csv模块和writerows函数将列表的列表写在一行中。

小型独立测试:

import random,time 
 
 
lists = [[random.randint(1,500) for _ in range(100000)] for _ in range(100)] 
 
import csv 
start_time=time.time() 
 
with open("out.csv","w",newline="") as f: 
    cw = csv.writer(f,delimiter=" ") 
    cw.writerows(lists) 
 
print(time.time()-start_time) 

在我的机器上 2 秒内写入 100 行 100000 个元素(生成列表比写回它们慢)

因此,您仅受输入列表的内存限制。

编辑:上面的这段代码没有正确地“转置”,所以它是作弊的。使用 zip (python 3) 直接使用 writerows 来完成这个技巧,所以代码没有太大变化:

import random,time 
 
n=1000000 
list1 = list(range(1,n)) 
list2 = list(range(n+1,n*2)) 
list3 = list(range(2*n+1,n*3)) 
 
import csv 
start_time=time.time() 
 
with open("out.csv","w",newline="") as f: 
    cw = csv.writer(f,delimiter=" ") 
    cw.writerows(zip(list1,list2,list3)) 
 
print(time.time()-start_time) 

对于 python2,使用 itertools.izip 因为 zip 返回一个列表:内存效率不高。 Python 2 兼容代码:

import itertools 
with open("out.csv","wb") as f: 
    cw = csv.writer(f,delimiter=" ") 
    cw.writerows(itertools.izip(list1,list2,list3)) 

如果你有一个列表列表:

list_of_lists = [list1,list2,list3] 

您可以使用 * 将列表扩展为 zip 或 izip 的参数:

cw.writerows(zip(*lists_of_lists)) 
 
cw.writerows(itertools.izip(*lists_of_lists))