![](/img/trans.png)
[英]The most efficient (or professional) way to read, proccess and write a file with Python?
[英]Fastest/most optimized way to read/write ASCII file in python
让我更新我的问题,我有一个ascii文件(7G),它有大约100M行。 我使用以下方法阅读此文件
f=np.loadtxt(os.path.join(dir,myfile),delimiter=None,skiprows=0)
x=f[:,1]
y=f[:,2]
z=f[:,3]
id=f[:,0]
稍后我将需要x,y,z和id数组进行插值。 问题是读取文件需要大约80分钟,而插值只需要15分钟。
我尝试使用python memory_profiler模块获取脚本的每一行使用的内存增量。
读取整个7.4 GB文件的以下行将内存使用量增加3206.898 MiB(3.36 GB)。 第一个问题是为什么它不会增加7.4 GB的内存使用量?
f=np.loadtxt(os.path.join(dir,myfile),delimiter=None,skiprows=0)
以下4行根本不增加内存。
x=f[:,1]
y=f[:,2]
z=f[:,3]
id=f[:,0]
最后,如果你能推荐我在python中读取/写入文件最优化的方法,我仍然会很感激。 numpy np.loadtxt
和np.savetxt
最好吗?
提前致谢,
将数字数据写入文件的最佳方法是不将其写入ASCII文件。
运行一次以使用np.save
将数据存储为二进制(这与pickle
ing基本相同):
np_file = os.path.splitext(myfile)[0] + '.npy'
data = np.loadtxt(os.path.join(dir,myfile),delimiter=None,skiprows=0)
np.save(os.path.join(dir, np_file), data)
然后你可以在下次加载它:
data = np.load(os.path.join(dir, np_file))
savetxt
和loadtxt
只是loadtxt
写入和读取文件。 保存本质上是:
with open(...) as f:
for row in arr:
f.write(fmt % tuple(row))
其中fmt
对于arr
每一列都有%
格式。
负载本质上是
alist = []
for row in f: # ie f.readline()
line = row.split(delimiter)
<convert types>
alist.append(line)
np.array(alist)
它在列表列表中收集文本文件的所有值,并在最后将其转换为数组一次。
像x=f[:,0]
这样的表达式不会改变内存使用情况,因为x
是f
的view
- (检查视图与副本的文档)。
这些numpy函数适用于适度大小的文件,但越来越多的人将此代码用于大型数据集 - 文本或数据挖掘。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.