文章目录
- def create_file_fast(file_path, size_mb): “””快速生成指定大小的空文件(全0填充)””” size_bytes = size_mb * 1024 * 1024 with open(file_path, ‘wb’) as f: f.seek(size_bytes – 1) # 定位到文件末尾前一字节 f.write(b”) # 写入单个空字节 # 示例:生成500MB文件 if __name__ == ‘__main__: create_file_fast(‘100mb_file.bin’, 500)
- import os import random def create_random_file(file_path, size_mb): “””生成包含随机内容的文件””” size_bytes = size_mb * 1024 * 1024 chunk_size = 1024 * 1024 # 每次写入1MB with open(file_path, ‘wb’) as f: while size_bytes > 0: chunk = min(chunk_size, size_bytes) # 生成随机字节数据(比os.urandom更快) data = bytes(random.getrandbits(8) for _ in range(chunk)) f.write(data) size_bytes -= chunk # 示例:生成500MB文件 if __name__ == ‘__main__: create_random_file(‘random_500mb.bin’, 500)
- import string import random def create_text_file(file_path, size_mb, line_length=80): “””生成包含随机文本的文件(带换行符)””” size_bytes = size_mb * 1024 * 1024 chars = string.ascii_letters + string.digits + string.punctuation + ‘ ‘ with open(file_path, ‘w’) as f: while size_bytes > 0: # 生成一行文本 line = ”.join(random.choices(chars, k=line_length)) line += ‘n’ # 添加换行符 f.write(line) size_bytes -= len(line.encode(‘utf-8’)) # 计算UTF-8编码后的字节大小 # 示例:生成500MB文本文件 if __name__ == ‘__main__: create_text_file(’10mb_text.txt’, 500)
- import mmap import os def create_large_file(file_path, size_gb): “””高效生成超大文件(GB级别)””” size_bytes = size_gb * 1024 ** 3 # 创建空文件并设置大小 with open(file_path, ‘wb’) as f: f.truncate(size_bytes) # 使用内存映射填充随机数据 with open(file_path, ‘r+b’) as f: mm = mmap.mmap(f.fileno(), 0) chunk_size = 1024 * 1024 * 100 # 每次处理100MB for offset in range(0, size_bytes, chunk_size): end = min(offset + chunk_size, size_bytes) mm[offset:end] = os.urandom(end – offset) mm.close() # 示例:生成5GB文件 if __name__ == ‘__main__: create_large_file(‘5gb_file.dat’, 5)
- def create_pattern_file(file_path, size_mb, pattern=b’ABCD’): “””生成重复模式的文件(用于测试)””” size_bytes = size_mb * 1024 * 1024 pattern_len = len(pattern) with open(file_path, ‘wb’) as f: # 计算完整模式块数量 full_blocks = size_bytes // pattern_len # 剩余字节 remainder = size_bytes % pattern_len # 写入完整块 for _ in range(full_blocks): f.write(pattern) # 写入剩余部分 if remainder: f.write(pattern[:remainder]) # 示例:生成500MB的重复模式文件 if __name__ == ‘__main__: create_pattern_file(‘pattern_50mb.dat’, 500, b’TESTPATTERN’)
- def run(file_size): #输入的文件大小去除首尾空格后切割,如果列表中只有一个数字说明是整数,否则就是小数 file_path = “D:/dir/” file_size = file_size print(‘file_size’, file_size) new_file_size = file_size.strip() file_size_list = new_file_size.split(“.”) start = time.time() if len(file_size_list) == 1: int_size_mb(file_size) print(“文件大小{}MB,已存入地址{}”.format(file_size, file_path)) else: int_size_mb(file_size) float_size_mb(file_size) print(“文件大小{}MB,已存入地址{}”.format(file_size,file_path)) end = time.time() timer = end – start speed = float(file_size) / timer # print(start, end, timer, speed) logger.info(‘写入文件共耗时:’ + str(timer) + ‘,写入速度为:’ + str(speed)) def int_size_mb(file_size): file_path = “D:/dir/” file_name = ‘test_file’ new_file_size = file_size.strip() file_size_list = new_file_size.split(“.”) #整数部分用写入文件w方式 with open(file_path+file_name,”w”) as file: #b-kb-mb文件大小转化 for i in range(int(file_size_list[0])): for j in range(1024): file.write(“01″*512) def float_size_mb(file_size): file_path = “D:/dir/” file_name = ‘test_file’ new_file_size = file_size.strip() file_size_list = new_file_size.split(“.”) #小数部分用追加写入a方法 file_size = file_size with open(file_path+file_name,”a”) as file: #获取小数(单位mb) float_size_mb=float(file_size)-int(file_size_list[0]) for i in range(1024): file.write(“1″*int(1024*float_size_mb)) # 示例:生成500MB的文件 if __name__ == ‘__main__’: run(500)
目录
- python生成指定文件大小
- 方法一(速度最快)
- 方法二(中等速度)
- 方法三(生成可读文本文件–较慢)
- 方法四(使用内存映射高效生成–超大文件)
- 方法五(生成特定模式文件)
- 方法六
- 总结
def create_file_fast(file_path, size_mb):
"""快速生成指定大小的空文件(全0填充)"""
size_bytes = size_mb * 1024 * 1024
with open(file_path, 'wb') as f:
f.seek(size_bytes - 1) # 定位到文件末尾前一字节
f.write(b'') # 写入单个空字节
# 示例:生成500MB文件
if __name__ == '__main__:
create_file_fast('100mb_file.bin', 500)
import os
import random
def create_random_file(file_path, size_mb):
"""生成包含随机内容的文件"""
size_bytes = size_mb * 1024 * 1024
chunk_size = 1024 * 1024 # 每次写入1MB
with open(file_path, 'wb') as f:
while size_bytes > 0:
chunk = min(chunk_size, size_bytes)
# 生成随机字节数据(比os.urandom更快)
data = bytes(random.getrandbits(8) for _ in range(chunk))
f.write(data)
size_bytes -= chunk
# 示例:生成500MB文件
if __name__ == '__main__:
create_random_file('random_500mb.bin', 500)
import string
import random
def create_text_file(file_path, size_mb, line_length=80):
"""生成包含随机文本的文件(带换行符)"""
size_bytes = size_mb * 1024 * 1024
chars = string.ascii_letters + string.digits + string.punctuation + ' '
with open(file_path, 'w') as f:
while size_bytes > 0:
# 生成一行文本
line = ''.join(random.choices(chars, k=line_length))
line += 'n' # 添加换行符
f.write(line)
size_bytes -= len(line.encode('utf-8')) # 计算UTF-8编码后的字节大小
# 示例:生成500MB文本文件
if __name__ == '__main__:
create_text_file('10mb_text.txt', 500)
import mmap
import os
def create_large_file(file_path, size_gb):
"""高效生成超大文件(GB级别)"""
size_bytes = size_gb * 1024 ** 3
# 创建空文件并设置大小
with open(file_path, 'wb') as f:
f.truncate(size_bytes)
# 使用内存映射填充随机数据
with open(file_path, 'r+b') as f:
mm = mmap.mmap(f.fileno(), 0)
chunk_size = 1024 * 1024 * 100 # 每次处理100MB
for offset in range(0, size_bytes, chunk_size):
end = min(offset + chunk_size, size_bytes)
mm[offset:end] = os.urandom(end - offset)
mm.close()
# 示例:生成5GB文件
if __name__ == '__main__:
create_large_file('5gb_file.dat', 5)
def create_pattern_file(file_path, size_mb, pattern=b'ABCD'):
"""生成重复模式的文件(用于测试)"""
size_bytes = size_mb * 1024 * 1024
pattern_len = len(pattern)
with open(file_path, 'wb') as f:
# 计算完整模式块数量
full_blocks = size_bytes // pattern_len
# 剩余字节
remainder = size_bytes % pattern_len
# 写入完整块
for _ in range(full_blocks):
f.write(pattern)
# 写入剩余部分
if remainder:
f.write(pattern[:remainder])
# 示例:生成500MB的重复模式文件
if __name__ == '__main__:
create_pattern_file('pattern_50mb.dat', 500, b'TESTPATTERN')
def run(file_size):
#输入的文件大小去除首尾空格后切割,如果列表中只有一个数字说明是整数,否则就是小数
file_path = "D:/dir/"
file_size = file_size
print('file_size', file_size)
new_file_size = file_size.strip()
file_size_list = new_file_size.split(".")
start = time.time()
if len(file_size_list) == 1:
int_size_mb(file_size)
print("文件大小{}MB,已存入地址{}".format(file_size, file_path))
else:
int_size_mb(file_size)
float_size_mb(file_size)
print("文件大小{}MB,已存入地址{}".format(file_size,file_path))
end = time.time()
timer = end - start
speed = float(file_size) / timer
# print(start, end, timer, speed)
logger.info('写入文件共耗时:' + str(timer) + ',写入速度为:' + str(speed))
def int_size_mb(file_size):
file_path = "D:/dir/"
file_name = 'test_file'
new_file_size = file_size.strip()
file_size_list = new_file_size.split(".")
#整数部分用写入文件w方式
with open(file_path+file_name,"w") as file:
#b-kb-mb文件大小转化
for i in range(int(file_size_list[0])):
for j in range(1024):
file.write("01"*512)
def float_size_mb(file_size):
file_path = "D:/dir/"
file_name = 'test_file'
new_file_size = file_size.strip()
file_size_list = new_file_size.split(".")
#小数部分用追加写入a方法
file_size = file_size
with open(file_path+file_name,"a") as file:
#获取小数(单位mb)
float_size_mb=float(file_size)-int(file_size_list[0])
for i in range(1024):
file.write("1"*int(1024*float_size_mb))
# 示例:生成500MB的文件
if __name__ == '__main__':
run(500)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。
您可能感兴趣的文章:
- python检测空间储存剩余大小和指定文件夹内存占用的实例
- python如何下载网络文件到本地指定文件夹
- Python如何实现自动生成指定文件名并自定义后缀名
- Python实现定时文件备份到指定文件夹
- Python实现接口下载json文件并指定文件名称
- Python实现解压当天创建的ZIP文件到指定文件夹中
- Python遍历指定文件夹下的所有文件名的方法小结