Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么用python读取大文件如此缓慢?_Python_Large Files - Fatal编程技术网

为什么用python读取大文件如此缓慢?

为什么用python读取大文件如此缓慢?,python,large-files,Python,Large Files,我正在尝试读取我以前使用python创建的csv文件 with open(csvname, 'w') as csvfile: csvwriter = csv.writer(csvfile, delimiter=',') csvwriter.writerows(data) 数据是一个包含大约30k*30k条目的随机矩阵,np.32格式。总共大约10 GB的文件大小 一旦我使用这个函数读入文件(因为我已经知道矩阵的大小,np.genfromtxt的速度越来越慢,此时需要大约100

我正在尝试读取我以前使用python创建的csv文件

with open(csvname, 'w') as csvfile:
    csvwriter = csv.writer(csvfile, delimiter=',')
    csvwriter.writerows(data)
数据是一个包含大约30k*30k条目的随机矩阵,np.32格式。总共大约10 GB的文件大小

一旦我使用这个函数读入文件(因为我已经知道矩阵的大小,np.genfromtxt的速度越来越慢,此时需要大约100 GB的RAM)

我花了大约10分钟读那个文件。我使用的硬盘应该能够读取大约100 MB/s的数据,这将使读取时间减少到大约1-2分钟

你知道我做错了什么吗

相关的:
这就是函数read\u large\u txt的来源。

我找到了一个非常简单的解决方案。因为我也在创建这些文件,所以不需要将它们保存为.csv文件。将它们作为.npy文件加载要快得多(!):

加载一个存储为.csv的30k*30k矩阵(包括将每行拆分为“,”)大约需要10分钟。对存储为.npy的矩阵执行相同操作大约需要10秒

这就是为什么我必须将上面编写的代码更改为:

np.save(npyname, data)
在另一个脚本中

out = np.load(npyname + '.npy')

这种方法的另一个优点是:(在我的例子中,.npy文件的大小只有.csv文件的40%左右。)

也许我应该补充一点,我正在使用if ii%2==0:因为否则我会尝试向输出矩阵传递空行。您是否有足够的ram?从读取时间中提取初始化,以确保它与文件大小相关。如果nrows很大,它可能会使用swapYep,我有120 GB的RAM。它确实读取了整个文件,我只是想知道是否有更快的方法。可能split在Java中的实现不好(导致大量字符串分配),请尝试使用csv Reader。如果您有更大的数据,我建议您也查找HDF5。这是本机压缩,而且可以跨语言访问。@jpp HDF5是否进一步提高了加载速度?根据我的经验,对于大数据(比如1GB+),如果选择正确的选项,是的。可能值得一试。我的文件有4GB+的npy和10GB+的csv。@jpp我签出了它。老实说,我无法提高加载速度。可能我已经达到了机器的极限(4-6s中的4gb已经是1gb/s)。无论如何,使用gzip压缩(compression_opts 9),我可以稍微减小文件大小(3.7 GB而不是4 GB),但是我的数据是非常随机的,因此使用其他数据结构可能会更好。但是,使用这种压缩,写入硬盘需要更长的时间。现在我可能会继续使用.npy文件。
out = np.load(npyname + '.npy')