前言生活中、工作中，有时候总需要随机生成一些字符串，如果只是一两条还好，多了就不容易搞……对于开发人员可能没什么问题，但对于不是程序员的我们应该怎么做呢？答案很简单，一个Shell脚本就能实现明确需求随机生成字符串（有数字、字母）字符串条数可控字符串长度可控按需 进行大小写转换脚本实现随机字符串：sha512sum条数、长度、大小写转换：接收用户输入的参数，如果没有按默认输出 read 命令sha512sum 默认输出是小写，用 tr 命令进行转换大写环境一台 Linux 服务器或电脑如果没有Linux系统环境，可以下载 Mobaxterm，这样就可以在Windows下调试Shell脚本，具体可参考 像操作Linux一样操作Windows示例效果代码示例#!/bin/bash # 交互信息 read -p "字符串的条数：" n read -p "字符串的长度：" l read -p "小写转大写：" t clear echo "正在生成字符串信息，请稍后.." echo # 变量 n l t 默认值设定 if [ -z "$n" ];then n=10 fi if [ -z "$l" ];then l=32 fi # 随机字符串生成 function randomstrs(){ a=$(date +%s) md5=$(echo $a$RANDOM | sha512sum | awk '{print $1}') } arr_md5='' b=0 # for 循环 for (( i=0;i<$n;i++ )) do case $t in y) # 小写转换大写 randomstrs arr_md5[$i]=$(echo ${md5:1:${l}} | tr 'a-z' 'A-Z') # 查重 echo $arr_md5[*] | grep -w "$arr_md5[$i]" > /dev/null b=$(echo $?) while [ $b -eq 0 ] do randomstrs arr_md5[$i]=$(echo ${md5:1:${l}} | tr 'a-z' 'A-Z') echo $arr_md5[*] | grep -w "$arr_md5[$i]" > /dev/null b=$(echo $?) done ;; *) # 不需要转换 randomstrs arr_md5[$i]=$(echo ${md5:1:${l}}) # 查重 echo $arr_md5[*] | grep -w "$arr_md5[$i]" > /dev/null b=$(echo $?) while [ $b -eq 0 ] do randomstrs arr_md5[$i]=$(echo ${md5:1:${l}}) echo $arr_md5[*] | grep -w "$arr_md5[$i]" > /dev/null b=$(echo $?) done esac done echo ${arr_md5[*]} | tr ' ' '\n' | tee ./md5.txt点击观看 B站视频
前言我是一个学什么都慢的人，往往所学的跟不上时代的热潮……而且写东西也慢。老早前就要学点Python，但是时至今日还是毫无进展需求一朋友需要批量处理Word、Excel文件Word文件中有个单元格问题本需要替换Excel 文件中同样有个单元格文本需要替换每个目录下有 2 个docx文件需要修改每个目录下有 3 个 xlsx文件需要修改思路第三方库Word 用 Python-docx 库来处理Excel 用 openpyxl 库来处理Word 文件替换采用匹配替换，就是匹配到指定字符串，然后进行替换Excel直接单元格赋值问题Word替换后，表格格式会变，而且字符串过长有换行导致页面发生变化Excel 主要是字符串过长导致换行问题代码实现库的安装pip install python-docxpip install openpyxl文件绝对路径获取代码def get_f(root_path,all_files=[]): files = os.listdir(root_path) for file in files: if not os.path.isdir(root_path + '/' + file): all_files.append(root_path + '/' + file) else: get_f((root_path + '/' + file),all_files) return all_filesdocx 文件修改代码def update_word(doc,wrow,wline,new_info): tables = doc.tables table = tables[0] # 清空原有的文本 table.cell(wrow,wline).paragraphs[0].runs[0].text = '' run= table.cell(wrow,wline).paragraphs[0].add_run(new_info) # 设置字体大小 run.font.size = Pt(8)xlsx 文件修改代码def update_excel(file,new_info): wb1 = openpyxl.load_workbook(file) worksheet = wb1.worksheets[0] fa = file.split('、') fb = fa[0].split('/') if fb[-1] == '1': worksheet["C3"] = new_info elif fb[-1] == '2': worksheet["D4"] = new_info else: worksheet["C4"] = new_info wb1.save(file) print(file+" 修改成功")完整代码# coding=utf-8 import os,docx,openpyxl from docx.shared import Pt from openpyxl.styles import Font ''' Version 3.5 1. 此次主要修复docx表格修改后格式变的问题以及fontsize 改为 8 2. 此次采用更简洁的操作方式 --- 定位表格 3. 当前脚本适配 2 个Word文件，如果有增加请根据代码逻辑增加判断 4. 本脚本需要第三方库 python-docx，如未安装请自行安装 pip install docx 5. 此版本可以同时处理Excel文件，同样根据自己的实际情况做调整（Excel 匹配3个文件，且格式为 xlsx） ''' # 工作目录 path = './test' new_info = '修改后的字符' # 获取文件绝对路径 def get_f(root_path,all_files=[]): files = os.listdir(root_path) for file in files: if not os.path.isdir(root_path + '/' + file): all_files.append(root_path + '/' + file) else: get_f((root_path + '/' + file),all_files) return all_files # Excel 文件修改方法 def update_excel(file,new_info): wb1 = openpyxl.load_workbook(file) worksheet = wb1.worksheets[0] fa = file.split('、') fb = fa[0].split('/') if fb[-1] == '1': worksheet["C3"] = new_info worksheet["C3"].font = Font(size=8) elif fb[-1] == '2': worksheet["D4"] = new_info worksheet["D4"].font = Font(size=8) else: worksheet["C4"] = new_info worksheet["C4"].font = Font(size=8) wb1.save(file) print(file+" 修改成功") # Word 文件修改方法 def update_word(doc,wrow,wline,new_info): tables = doc.tables table = tables[0] table.cell(wrow,wline).paragraphs[0].runs[0].text = '' run= table.cell(wrow,wline).paragraphs[0].add_run(new_info) run.font.size = Pt(8) # 开始修改 for file in get_f(path): f = file.split(".") if f[2] == 'xlsx': update_excel(file,new_info) elif f[2] == 'docx': doc = docx.Document(file) fw0 = file.split("、") fw1 = fw0[0].split("/") if fw1[-1] == '1': wrow = 2 wline = 1 elif fw1[-1] == '2': wrow = 2 wline = 3 update_word(doc,wrow,wline,new_info) doc.save(file.format(file.split("/")[-1])) print(file+" 修改成功")