python3利用base64编码生成随机文件

python3利用base64编码生成随机文件

在测试某些功能的时候,我们可能需要用一些文件来作为测试的对象,利用python生成这些随机文件是不错的选择。虽然tempfile库已经有类似的功能了,但我还是想自己造一个轮子。

使用的库

  1. base64
  2. random

思路

  1. 无论是生成文件还是生成文件名,我们需要的都是一个合法的字符串(此处合法指不违背用途要求),而字符串可以看成一系列的二进制字节编码而成的对象,因此,我们需要一个大随机数以生成这个随机的字符串。

  2. 问题来了,这个大随机数应该怎么确定位长度呢?

    这里要从base64编码的算法说起,base64是将每6( l o g 2 64 log_264 log264)个字节编码成8个字符的编码算法,也就是说,编码后会比编码前长 1 3 \frac 13 31,因此在生成长度的时候,我们要用目的长度的 3 4 \frac 34 43来计算随机数的比特长度。

  3. 文件名还有特殊的要求,比如不能含有"/",但base64有安全url的编码方法,选用就可以了。

话不多说,贴代码

代码

生成文件名

max_name_lenth = 8  # 递增4来决定长度
name = str(base64.urlsafe_b64encode(
    random.randint(0, 2**(8*max_name_lenth//4*3)
                    ).to_bytes(max_name_lenth//4*3, "little") # 大端和小端在生成随机文件的时候就随意就可以了
), "utf-8")

生成文本

max_content_lenth = 256  # 递增4来决定长度
content = str(base64.b64encode(
    random.randint(0, 2**(max_content_lenth//4*3*8)
                    ).to_bytes(max_content_lenth//4*3, "little")
), "utf-8")

完整代码

max_name_lenth = 8
name = str(base64.urlsafe_b64encode(
    random.randint(0, 2**(8*max_name_lenth//4*3)
                    ).to_bytes(max_name_lenth//4*3, "little")
), "utf-8")
path = "./"+name
print(path, len(name))

max_content_lenth = 256  # 递增4来决定长度
content = str(base64.b64encode(
    random.randint(0, 2**(max_content_lenth//4*3*8)
                    ).to_bytes(max_content_lenth//4*3, "little")
), "utf-8")

print(len(content))
with open(path+".txt", "a") as file:
    file.write(content)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值