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)

猜你喜欢

转载自blog.csdn.net/u013943146/article/details/117930585