当我们在写一些教程的时候,不免为了演示效果,需要准备一些文档,那么如何快速的伪造一个用于演示的文档呢?
效果演示
我们使用一个python脚本,快速的伪造一个指定名称和内容行数的txt文档。
-
👇首先,当然,我们需要运行py脚本,
python docfaker.py
-
👇脚本会提示我们输入文档名,我们输入需要伪造的文档名回车
-
👇 脚本会提示我们输入需要写入文档的内容的行数
-
👇情景1, 我们输入一个大于0的数字,则会在伪造的文档中填充对应数量行的内容
-
👇情景2,我们输入0,则会伪造一个空的文档
-
👇情景3,我们不输入,则会伪造一个内容行数在0-50之间的文档
-
代码分享
以下是以上演示效果的代码,希望可以帮助到有需要的人
# -*- coding:UTF-8 -*-
"""
@author: dyy
@contact: douyaoyuan@126.com
@time: 2023/12/19 9:41
@file: docfaker.py
@desc: xxxxxx
"""
# region 引入必要的依赖
import os
模块名 = 'DebugInfo'
try:
from DebugInfo.DebugInfo import *
except ImportError as impErr:
print(f"尝试导入 {模块名} 依赖时检测到异常:{impErr}")
print(f"尝试安装 {模块名} 模块:")
try:
os.system(f"pip install {模块名}")
except OSError as osErr:
print(f"尝试安装模块 {模块名} 时检测到异常:{osErr}")
exit(0)
else:
try:
from DebugInfo.DebugInfo import *
except ImportError as impErr:
print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")
exit(0)
模块名 = 'pathvalidate '
try:
from pathvalidate import is_valid_filename
except ImportError as impErr:
print(f"尝试导入 {模块名} 依赖时检测到异常:{impErr}")
print(f"尝试安装 {模块名} 模块:")
try:
os.system(f"pip install {模块名}")
except OSError as osErr:
print(f"尝试安装模块 {模块名} 时检测到异常:{osErr}")
exit(0)
else:
try:
from pathvalidate import is_valid_filename
except ImportError as impErr:
print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")
exit(0)
try:
# 导入 faker 模块
from faker import Faker
except ImportError as impErr:
print("尝试导入 faker 依赖时检测到异常:", impErr)
try:
os.system("pip install faker")
print("尝试导入 faker 成功")
except OSError as osErr:
print("尝试安装模块 faker 时检测到异常:", osErr)
exit(0)
else:
try:
# 如果模块安装成功,则再次尝试导入依赖
from faker import Faker
except Exception as expErr:
print("再次尝试导入 faker 依赖时检测到异常:", expErr)
exit(0)
# endregion
伪装1 = Faker(['zh_CN', 'en_US'])
def 文档名合法性检查(文档名:str)->bool:
文档名 = str(文档名 if 文档名 else '')
if not 文档名:
return False
return is_valid_filename(文档名)
if '__main__' == __name__:
画板: 打印模板 = 打印模板(False)
画板.执行位置(__file__)
本地搜索:本地搜索接口类 = 本地搜索接口类()
交互接口: 交互接口类 = 交互接口类()
交互接口.输入提示修饰方法 = 蓝字
文档名: str = ''
while True:
文档名 = 交互接口.发起文本交互(输入提示='请输入文档名(0: 退出): ',限定范围=文档名合法性检查,画板=画板.副本)
if '0' == 文档名:
画板.调试消息('用户要求退出程序')
exit(0)
if '.' not in 文档名: # 如果文档名中没有后缀,则默认为txt 文档
文档名 += '.txt'
if 本地搜索.存在文档(文档=文档名, 画板=画板.副本): # 文档已经存在,则提示是否覆盖
用户确认: str = 交互接口.发起文本交互(输入提示=f'文档 {绿字(文档名)} 已经存在,是否覆盖?({绿字("y: 覆盖")};{红字("n: 不覆盖")}):',
限定范围='yYnN',
画板=画板.副本)
if '0' == 用户确认:
画板.调试消息('用户要求退出程序')
exit(0)
if 用户确认 in ['y', 'Y']:
break
else: # 文档不存在
break
画板.调试消息(f'文档名是: {文档名}')
内容行数 = 交互接口.发起文本交互(输入提示='请输入文档内容的行数: ', 允许空值=True, 限定范围=str.isdigit,画板=画板.副本)
if not 内容行数:
内容行数 = 伪装1.pyint(0,50)
else:
内容行数 = int(内容行数)
空行机率: float = 0.25
行列表: list[str] = []
if 内容行数 > 0:
for 行号 in range(内容行数):
色子 = 伪装1.pyfloat(left_digits=0, right_digits=2, positive=True)
if 色子 <= 空行机率: # 这是行是空行
行列表.append('')
else:
字数 = 伪装1.pyint(7, 20)
行列表.append(f'第 {行号 + 1} 行: ' + str(伪装1.text(max_nb_chars=字数)).replace('\n', '↩'))
if 行列表:
画板.调试消息('\n'.join(行列表))
else:
画板.调试消息('文档内容为空')
# 创建空文档
os.system(f'echo "" | cat > {文档名}')
if 行列表: # 将行列表中的内容写入到文档名的文档中
for 行号 in range(0, len(行列表), 500): # 每 500 行写入一次, 避免 buff 过大
内容: str = '\n'.join(行列表[行号:行号+500])
if 0 == 行号:
os.system(f'echo "{内容}" | cat > {文档名}')
else:
os.system(f'echo "{内容}" | cat >> {文档名}')
小结
这就是今天分享的内容了,感谢大家围观。