我有一个在C#应用程序(我无法控制的源代码)中运行的python脚本,我希望这个脚本生成一个任意大小的文件。此文件中的数据无关紧要。我写了以下代码:
def generateFile(filename, size):
file = open(filename, 'wb')
file.write(''.join('0' for _ in range(size)))
file.close()
此C#应用程序中的IronPython集成总体上非常缓慢,但大多数情况下都可以接受。但是这段代码太慢了。生成1KB文件大约需要20秒,我需要生成大约1M或更多的文件。
经过一些调查后,似乎缓慢主要来自生成用于写入文件的字符串。
是否有另一种方法可以实现相同的任务,但是在更快,更可接受的时间?
答案 0 :(得分:1)
我不知道它怎么可能那么慢;
无论如何,这可能会有所帮助;而不是一次性创建一个兆字节的字符串,我生成32K并根据需要重复使用它。您可以使用块大小来查看哪种方法最有效。
在我的机器上,这会在0.81秒内写入100MB文件。
CHUNK_SIZE = 32768 # 32k (arbitrary choice)
def generateFile(filename, bytes):
n, r = divmod(bytes, CHUNK_SIZE)
chunk = "0" * CHUNK_SIZE
with open(filename, 'w') as outf:
for _ in range(n):
outf.write(chunk)
outf.write(chunk[:r])
答案 1 :(得分:1)
您可以使用
file.write('0'.zfill(size))