gpt4 book ai didi

python - 在文件中写入大量数据的最快方法

转载 作者:太空狗 更新时间:2023-10-29 18:14:19 25 4
gpt4 key购买 nike

我正在尝试创建随机实数、整数、字母数字、字母字符串,然后写入文件,直到文件大小达到 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

输出:持续时间:7.30 秒。

现在程序将大部分时间用于生成数据,即 random 的东西。您可以通过将 random.choice(string.ascii_lowercase) 替换为例如“一个”。然后在我的机器上测量的时间下降到一秒以下。

如果您想更深入地了解您的机器在写入磁盘时的真实速度,请使用 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.

关于python - 在文件中写入大量数据的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27384093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com