如何按开括号[至闭括号]区间拆分文本文件为独立行
针对将成对[、]包裹的文本块单独拆分为一行的需求,可根据自身使用场景选择以下方案:
- 用Python脚本批量处理(适合大文件、需要重复处理的场景)
核心逻辑是用非贪婪正则匹配所有完整的方括号块,再按块拼接换行即可,代码如下:
import re
input_path = "待处理的文本文件.txt"
output_path = "分行处理后的结果.txt"
with open(input_path, "r", encoding="utf-8") as f:
raw_content = f.read()
bracket_blocks = re.findall(r"[.*?]", raw_content, flags=re.DOTALL)
with open(output_path, "w", encoding="utf-8") as f:
f.write("\n".join(bracket_blocks))
*运行脚本前记得把代码里的文件路径替换成你自己的实际路径,编码如果不是utf-8也可以对应改成gbk等适配编码*。 - 用普通文本编辑器快速处理(适合临时处理小文件,不需要装编程环境) 只要是支持正则替换的编辑器(VS Code、Notepad++、Sublime Text都可以),按以下步骤操作: 1. 用编辑器打开待处理文件,调出替换面板(通用快捷键是`Ctrl+H`) 2. 开启正则匹配模式:VS Code点击替换面板上的`.*`按钮,Notepad++勾选「正则表达式」选项 3. 查找内容输入`(\])\s*\[`,替换为内容输入`$1\n[` 4. 点击全部替换,即可把相邻方括号块之间的空白替换为换行,实现每个方括号块单独占一行 *替换完成后如果文件首尾有多余空行,手动删除即可*。 你提供的示例内容处理后效果如下:
["ANION-PI ASP-30-A PHE-28-A 4.03 23.88 OD2:ASP:30:A CD1:PHE:28:A 30.61 29 D 27 F nhb: 0 MS: 0 SS: 0 SB: 0 INTRA 1aa9A ASP-30-A PHE-28-A 82.70 91.40 AF-P01112-F1-model_v1.pdb
", "ANION-PI ASP-30-A PHE-28-A 3.48 12.31 OD1:ASP:30:A CE1:PHE:28:A 53.24 29 D 27 F nhb: 0 MS: 0 SS: 0 SB: 0 INTRA AF-P01112-F1-model_v1
"]
["ANION-PI GLU-2097-A TRP-2092-A 4.42 20.84 OE2:GLU:2097:A CZ3:TRP:2092:A 42.75 45 E 40 W nhb: 0 MS: 0 SS: 0 SB: 0 INTRA 1apjA GLU-1297-A TRP-1292-A 85.20 90.10 AF-P35555-F5-model_v1.pdb
", "ANION-PI GLU-1297-A TRP-1292-A 4.19 1.17 center CZ3:TRP:1292:A 75.08 1296 E 1291 W nhb: 2 MS: 0 SS: 2 SB: 2 INTRA AF-P35555-F5-model_v1
"]
["ANION-PI ASP-24-A TYR-17-A 3.08 29.72 OD2:ASP:24:A CZ:TYR:17:A 23.71 23 D 16 Y nhb: 1 MS: 1 SS: 0 SB: 0 INTRA 1awwA ASP-232-A TYR-225-A 90.60 91.40 AF-Q06187-F1-model_v1.pdb
", "ANION-PI ASP-232-A TYR-225-A 4.18 2.55 OD2:ASP:232:A CZ:TYR:225:A 57.49 231 D 224 Y nhb: 4 MS: 3 SS: 1 SB: 0 INTRA AF-Q06187-F1-model_v1
"]
内容的提问来源于stack exchange,提问作者anita

