当前位置: 首页 > 面试题库 >

在文件中写入海量数据的最快方法

党佐
2023-03-14
问题内容

我试图创建一个随机的实数,整数,字母数字,字母字符串,然后写入文件,直到文件大小达到 10MB 为止。

代码如下。

import string
import random
import time
import sys


class Generator():
    def __init__(self):
        self.generate_alphabetical_strings()
        self.generate_integers()
        self.generate_alphanumeric()
        self.generate_real_numbers()

    def generate_alphabetical_strings(self):
        return ''.join(random.choice(string.ascii_lowercase) for i in range(12))

    def generate_integers(self):
        return ''.join(random.choice(string.digits) for i in range(12))

    def generate_alphanumeric(self):
        return ''.join(random.choice(self.generate_alphabetical_strings() +
                                     self.generate_integers()) for i in range(12))

    def _insert_dot(self, string, index):
        return string[:index].__add__('.').__add__(string[index:])


    def generate_real_numbers(self):
        rand_int_string = ''.join(random.choice(self.generate_integers()) for i in range(12))
        return self._insert_dot(rand_int_string, random.randint(0, 11))


from time import process_time
import os

a = Generator()

t = process_time()
inp = open("test.txt", "w")
lt = 10 * 1000 * 1000
count = 0
while count <= lt:
    inp.write(a.generate_alphanumeric())
    count += 39
inp.close()

elapsed_time = process_time() - t
print(elapsed_time)

大约需要 225.953125秒 才能完成。如何提高此程序的速度?请提供一些代码见解?


问题答案:

观察到的“缓慢”的两个主要原因:

  • 您的while循环很慢,大约有一百万次迭代
  • 您没有正确使用I / O缓冲。不要进行太多系统调用。目前,您正在拨打write()约一百万次。

首先在Python数据结构中创建数据,然后write()仅调用 一次

这样更快:

t0 = time.time()
open("bla.txt", "wb").write(''.join(random.choice(string.ascii_lowercase) for i in xrange(10**7)))
d = time.time() - t0
print "duration: %.2f s." % d

输出: duration: 7.30 s.

现在,该程序将大部分时间花费在生成数据上,即random填充数据。您可以轻松替换random.choice(string.ascii_lowercase)为例如"a"。然后,在我的机器上,所测量的时间降至一秒以下。

而且,如果您想进一步了解写入磁盘时机器的速度,请在写入磁盘之前使用Python最快的(?)方式生成较大的数据:

>>> t0=time.time(); chunk="a"*10**7; open("bla.txt", "wb").write(chunk); d=time.time()-t0; print "duration: %.2f s." % d
duration: 0.02 s.


 类似资料:
  • 问题内容: 我必须在text [csv]文件中写入大量数据。我使用BufferedWriter写入数据,并且花费了大约40秒的时间来写入174 mb的数据。这是Java可以提供的最快速度吗? 注意:这40秒还包括从结果集中迭代和获取记录的时间。:) 174 mb用于结果集中的400000行。 问题答案: 你可以尝试删除BufferedWriter并直接使用FileWriter。在现代系统上,无论如

  • 问题内容: 我做了一个方法,需要一个和一个。它用该字符串作为内容的新文件替换该文件。 这就是我所做的: 但是,它非常缓慢。有时需要一分钟以上。 如何写出包含成千上万个字符的大文件? 问题答案: 确保分配了足够大的缓冲区: 您正在运行哪种操作系统?那也可以有很大的不同。但是,花一 分钟 时间写出一个小于大小的文件听起来像是系统问题。在Linux或其他* ix系统上,您可以使用类似的方法来查看JVM是

  • 问题内容: 如标题所示,我正在寻找最快的方式将整数数组写入文件。数组的大小将有所不同,并且实际上包含2500至25000000 int之间的任何位置。 这是我目前正在使用的代码: 鉴于DataOutputStream有一种写入字节数组的方法,我已经尝试将int数组转换为字节数组,如下所示: 像这样: 两者似乎都使速度略有提高,约为5%。我没有对它们进行足够严格的测试以确认这一点。 是否有任何技术可

  • 我已经创建了复制分支用户权限的方法。权限通常为0到120个项目。运行此方法将此(0到120)项插入到7个用户ID需要35-55秒才能插入到表中。 我需要优化这个过程,因为数据插入的性能很慢。我在想如果超过10个用户,那么这个过程会花费太长时间。有没有办法提高插入数据的性能速度? 提前谢谢你!

  • 本文向大家介绍pandas 把数据写入txt文件每行固定写入一定数量的值方法,包括了pandas 把数据写入txt文件每行固定写入一定数量的值方法的使用技巧和注意事项,需要的朋友参考一下 我遇到的情况是:把数据按一定的时间段提出。比如提出每天6:00-8:00的每个数据,可以这样做: 数据的类型如图: 运行结果: 以上这篇pandas 把数据写入txt文件每行固定写入一定数量的值方法就是小编分享给

  • 本文向大家介绍php写入数据到CSV文件的方法,包括了php写入数据到CSV文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php写入数据到CSV文件的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的php程序设计有所帮助。