当前位置:首页>python>python+faker生成文件

python+faker生成文件

  • 2026-10-11 06:12:17
python+faker生成文件
TUTORIAL · 实战2021.07

还在手动造数据?

python+faker+jinja2生成文件

根据文件的模板,使用faker来生成指定时间范围内的文件

python+faker

faker指南

📦 2 Parts + Conclusion

👉 滑动

PART 01

背景

背景

PART 02

实现

实现

PART ///

写在最后

点赞在看转发

根据文件的模板,使用faker来生成指定时间范围内的文件

根据文件的模板,使用faker来生成指定时间范围内的文件

01

PART

背景

CHAPTER · 1

由于项目测试需要一批不同时间的创建的文件。一个个去手动修改文件的创建时间太耗时了,因此写个脚本去统一的做。

02

PART

实现

CHAPTER · 2

主要是faker+jinja2两个库来实现的,faker产生数据,jinja2制作模板,由此生成一个文件。

项目地址:<https://gitea.kiki.kim/ha/faker_diary.git>

目录结构:

...shell

+--faker_files/

|   +--bin/       

|   |    +-- faker_diary.py   # -- 主程序

|   +--etc/   # -- 模板文件夹

|   |    +-- template.md.j2  # 模板文件

|   +--output/   # -- 生成的文件目录

核心代码:

...python

def faker_datas(number=7):

    """

    生成日志模板所需要的内容,一天一个默认7天,排除掉工作日(排除掉的也算一天)

    """

    f = Faker(locale="zh_CN")

    # 用来存所有的

    datas = []

    # 现在的时间

    today = datetime.datetime.now().date()

    # 默认生成前7天的数据

    for n in range(0, number):

        # 前N天

        date = today + datetime.timedelta(days=-n)

        # 判断是不是工作日

        if not is_workday(date):

            continue

        # 用来保存1天所需要的内容

        diary_log = {}

        # 创建日期

        diary_log["create_date"] = date

        # 创建时间,控制在8点~11点之间

        str_time1 = date.strftime("%Y-%m-%d ") + "08:00:00"

        start_time = datetime.datetime.strptime(str_time1, "%Y-%m-%d %H:%M:%S")

        str_time2 = date.strftime("%Y-%m-%d ") + "11:00:00"

        end_time = datetime.datetime.strptime(str_time2, "%Y-%m-%d %H:%M:%S")

        CreationTime = f.date_time_between(start_date=start_time, end_date=end_time)

        diary_log["CreationTime"] = CreationTime

        # 修改时间,比创建时间晚6~10小时

        LastWriteTime = CreationTime + datetime.timedelta(

            hours=f.pyint(min_value=6, max_value=10),

            seconds=f.pyint(min_value=1, max_value=300),

        )

        diary_log["LastWriteTime"] = LastWriteTime

        # 访问时间,比修改时间晚1~n天

        LastAccessTime = LastWriteTime + datetime.timedelta(

            days=f.pyint(min_value=0, max_value=n),

            seconds=f.pyint(min_value=1, max_value=300),

        )

        diary_log["LastAccessTime"] = LastAccessTime

        # 随机的状态,成功失败比 8:2

        status_list = {"sucess": 80, "failed": 20}

        diary_log["status1"] = random_weight(status_list)

        datas.append(diary_log)

.........

.........

def main(number):

.........

.........

        # 读取模板

        jinja2_env = jinja2.Environment()

        tempate_data = open(template_file, encoding="utf-8").read()

        # 渲染模板

        temp_out = jinja2_env.from_string(tempate_data).render({"datas": day_log})

        # 输出结果

        file_name = day_log["create_date"].strftime("%Y-%m-%d") + ".md"

        output_file = OUTPUT / file_name

        with open(output_file, "w", encoding="utf-8") as f:

            f.writelines(temp_out)

        # 修改生成文本的创建时间、修改时间和访问时间

        # ls 'sysin.txt' | foreach-object { $_.CreationTime = '02/02/2021 01:01:01'; $_.LastWriteTime = '01/01/2021 01:01:01'; $_.LastAccessTime = '03/03/2021 01:01:01' }

        args = (

            "powershell.exe"

            + ' "ls '

            + "'"

            + str(output_file)

            + "'"

            + " | foreach-object { $_.CreationTime = '"

            + day_log["CreationTime"].strftime("%m/%d/%Y %H:%M:%S")

            + "'; $_.LastWriteTime = '"

            + day_log["LastWriteTime"].strftime("%m/%d/%Y %H:%M:%S")

            + "'; $_.LastAccessTime = '"

            + day_log["LastAccessTime"].strftime("%m/%d/%Y %H:%M:%S")

            + "' }\""

        )

        subprocess.call(args, shell=True)

///

LAST

写在最后

SUMMARY · 收尾

根据文件的模板,使用faker来生成指定时间范围内的文件

我是 小梦同学,一个爱折腾技术的测试工程师,专注分享踩坑经验。

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见。

既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。

点赞
在看
转发

THANKS FOR READING

最新文章

随机文章