Python中实现Bash seq功能及文档子串搜索替换的方法有哪些?
Python实现Bash seq功能的方法
Bash的seq核心作用是生成指定范围的连续序列,Python标准库即可实现等价功能:
- 整数序列直接用内置
range实现,注意range为左闭右开规则,对应关系如下:
直接遍历Bash命令 Python等价写法 输出结果 seq 5range(1, 6)1、2、3、4、5 seq 2 6range(2, 7)2、3、4、5、6 seq 1 2 10range(1, 11, 2)1、3、5、7、9 range对象即可实现和bash循环完全一致的效果,转成列表可以用list(range(参数))。 - 带格式补零的序列,配合f-string或
format实现:
比如bash的seq -f "%02g" 1 3对应[f"{i:02d}" for i in range(1,4)],输出为['01', '02', '03']。 - 浮点数序列可以自定义生成器实现,不需要第三方依赖:
调用def float_seq(start, end, step=1.0): current = start while current <= end: yield current current += steplist(float_seq(1, 5, 0.5))即可得到步长为0.5的1到5浮点数序列。
匹配指定行并替换内容的实现方法
不需要额外第三方包,也不需要手动逐字符检查子串,Python标准库的字符串匹配、正则模块已经做了底层优化,直接调用即可:
处理小文件(内存足够容纳全文)
直接读取全文替换即可,代码最简:
import re # 自定义替换值 new_val = "你的自定义内容" with open("目标文件路径", "r", encoding="utf-8") as f: content = f.read() # 匹配measurement = abc的位置,替换abc为自定义值 new_content = re.sub(r"(measurement\s*=\s*)abc", rf"\g<1>{new_val}", content) with open("目标文件路径", "w", encoding="utf-8") as f: f.write(new_content)
如果不想用正则,也可以用format模板的方式,提前把目标行写成模板:
template = "measurement = {}" # 匹配到目标行后直接替换整行 if "measurement = abc" in line: line = template.format(new_val)
处理大文件(避免占满内存)
逐行迭代处理即可,Python的文件迭代默认逐行读取,内存占用极低:
import os import re new_val = "你的自定义内容" src_path = "目标文件路径" tmp_path = f"{src_path}.tmp" with open(src_path, "r", encoding="utf-8") as f_in, open(tmp_path, "w", encoding="utf-8") as f_out: for line in f_in: new_line = re.sub(r"(measurement\s*=\s*)abc", rf"\g<1>{new_val}", line) f_out.write(new_line) # 替换原文件,不需要的话可以省略这步直接使用临时文件 os.replace(tmp_path, src_path)
不需要自己实现逐行逐字符的检查逻辑,内置方法的执行效率远高于手动实现的校验逻辑。
内容的提问来源于stack exchange,提问作者Parallelaxe
相关产品推荐
相关产品推荐

