本文目录导读:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
批量生成指定大小文件脚本
支持单位:B, KB, MB, GB
"""
import os
import argparse
import random
import string
def create_file(filepath, size_bytes, fill_random=True):
"""创建指定大小的文件"""
try:
with open(filepath, 'wb') as f:
if fill_random:
# 随机数据填充(更真实)
chunk_size = 1024 * 1024 # 1MB块写入
remaining = size_bytes
while remaining > 0:
write_size = min(chunk_size, remaining)
# 生成随机数据块
random_data = bytes([random.randint(0, 255) for _ in range(write_size)])
f.write(random_data)
remaining -= write_size
else:
# 零填充(速度更快)
f.write(b'\x00' * size_bytes)
return True
except Exception as e:
print(f"创建文件失败 {filepath}: {e}")
return False
def parse_size(size_str):
"""将人类可读的大小转为字节数"""
size_str = size_str.strip().upper()
units = {'B': 1, 'KB': 1024, 'MB': 1024**2, 'GB': 1024**3}
# 解析数字和单位
for unit in ['GB', 'MB', 'KB', 'B']:
if size_str.endswith(unit):
try:
number = float(size_str[:-len(unit)])
return int(number * units[unit])
except ValueError:
raise ValueError(f"无法解析大小: {size_str}")
# 纯数字默认视为字节
try:
return int(size_str)
except ValueError:
raise ValueError(f"无法解析大小: {size_str}")
def generate_filenames(prefix="test", count=10, extension=".dat", use_counter=True):
"""生成文件名列表"""
filenames = []
for i in range(1, count + 1):
if use_counter:
filename = f"{prefix}_{i:03d}{extension}"
else:
filename = f"{prefix}_{random_string(8)}{extension}"
filenames.append(filename)
return filenames
def random_string(length=8):
"""生成随机字符串"""
return ''.join(random.choices(string.ascii_lowercase + string.digits, k=length))
def main():
parser = argparse.ArgumentParser(description="批量生成指定大小文件")
parser.add_argument("-s", "--size", required=True,
help="文件大小, 1MB, 500KB, 100B, 2GB")
parser.add_argument("-n", "--count", type=int, default=10,
help="生成文件数量 (默认: 10)")
parser.add_argument("-p", "--prefix", default="test",
help="文件名前缀 (默认: test)")
parser.add_argument("-e", "--ext", default=".dat",
help="文件扩展名 (默认: .dat)")
parser.add_argument("-o", "--output", default="./generated_files",
help="输出目录 (默认: ./generated_files)")
parser.add_argument("-r", "--random", action="store_true",
help="使用随机数据填充 (默认使用零填充)")
parser.add_argument("-q", "--quiet", action="store_true",
help="安静模式,不显示进度")
args = parser.parse_args()
# 解析目标大小
try:
target_size = parse_size(args.size)
except ValueError as e:
print(f"错误: {e}")
return 1
# 创建输出目录
output_dir = args.output
os.makedirs(output_dir, exist_ok=True)
# 生成文件名
filenames = generate_filenames(args.prefix, args.count, args.ext)
# 计算总数据量
total_size = target_size * args.count
if not args.quiet:
print(f"目标: 生成 {args.count} 个文件,每个 {args.size} ({target_size} 字节)")
print(f"总数据量: {total_size} 字节 ({total_size / 1024**3:.2f} GB)")
print(f"输出目录: {os.path.abspath(output_dir)}")
print(f"填充方式: {'随机数据' if args.random else '零填充'}")
print("-" * 50)
# 批量创建文件
success_count = 0
for i, filename in enumerate(filenames, 1):
filepath = os.path.join(output_dir, filename)
success = create_file(filepath, target_size, args.random)
if success:
success_count += 1
if not args.quiet:
size_str = f"{target_size / 1024**2:.2f} MB" if target_size > 1024*1024 else f"{target_size / 1024:.2f} KB"
print(f" [{i:3d}/{args.count}] 已创建: {filename} ({size_str})")
# 输出结果
print("-" * 50)
print(f"完成: 成功创建 {success_count} 个文件")
print(f"目录: {os.path.abspath(output_dir)}")
return 0 if success_count == args.count else 1
if __name__ == "__main__":
exit(main())
使用方法
保存脚本
将上述代码保存为 gen_files.py
运行脚本
基本用法 - 生成10个1MB文件:
python gen_files.py --size 1MB
生成100个500KB文件:
python gen_files.py --size 500KB --count 100
自定义前缀和扩展名:
python gen_files.py -s 2MB -n 5 -p mydata -e .bin
使用随机数据填充(更真实):
python gen_files.py -s 10MB -n 3 -r
指定输出目录:
python gen_files.py -s 1GB -n 1 -o ./big_files
参数说明
| 参数 | 简写 | 说明 | 默认值 |
|---|---|---|---|
--size |
-s |
文件大小(必需),支持 B/KB/MB/GB | |
--count |
-n |
生成文件数量 | 10 |
--prefix |
-p |
文件名前缀 | test |
--ext |
-e |
文件扩展名 | .dat |
--output |
-o |
输出目录 | ./generated_files |
--random |
-r |
使用随机数据填充 | 否(零填充) |
--quiet |
-q |
安静模式 | 否 |
大小示例
100B→ 100字节1KB→ 1024字节5MB→ 2.5兆字节5GB→ 0.5吉字节
注意事项
- 磁盘空间:确保有足够的磁盘空间,程序不会事先检查
- 零填充 vs 随机数据:零填充速度更快,随机数据更真实但可能产生大文件时较慢
- 大文件性能:生成数GB文件时建议使用零填充
- 操作系统限制:某些文件系统可能有单文件大小限制
这个脚本可以用于测试存储系统、网络传输、备份方案等场景。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播