You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何读取txt文件定位指定数组并为每个元素追加字符串

Python实现TXT文件指定列表元素批量追加后缀

实现逻辑

  1. 读取目标TXT文件全量内容
  2. 通过正则匹配定位到你指定名称的Python格式列表行
  3. 安全解析列表内容,遍历每个元素追加指定后缀
  4. 替换原有列表行后写回原文件即可

完整可运行代码

import re
import ast

# 自定义参数配置
file_path = "你的目标文件路径.txt"
target_array_name = "names"  # 你要找的数组名称
append_suffix = "-familyname"  # 要追加的字符串

# 读取文件内容
with open(file_path, "r", encoding="utf-8") as f:
    content = f.readlines()

# 遍历每行匹配目标数组
pattern = re.compile(rf'^\s*{target_array_name}\s*=\s*(\[.*\])\s*$')
for i, line in enumerate(content):
    match_res = pattern.match(line)
    if match_res:
        # 安全解析列表内容
        original_list = ast.literal_eval(match_res.group(1))
        # 批量追加后缀生成新列表
        new_list = [f"{elem}{append_suffix}" for elem in original_list]
        # 替换原行内容,保持格式统一
        content[i] = f'{target_array_name} = {new_list}\n'
        break

# 写回文件
with open(file_path, "w", encoding="utf-8") as f:
    f.writelines(content)

特殊场景适配

  • 如果你的数组是跨多行书写的,把逻辑调整为如下即可支持:
import re
import ast

file_path = "你的目标文件路径.txt"
target_array_name = "names"
append_suffix = "-familyname"

# 先读取全量文本而非按行读取
with open(file_path, "r", encoding="utf-8") as f:
    full_content = f.read()

pattern = re.compile(rf'({target_array_name}\s*=\s*\[.*?\])', re.DOTALL)
match_res = pattern.search(full_content)
if match_res:
    full_line = match_res.group(1)
    original_list_str = full_line.split("=", 1)[1].strip()
    original_list = ast.literal_eval(original_list_str)
    new_list = [f"{elem}{append_suffix}" for elem in original_list]
    full_content = full_content.replace(full_line, f'{target_array_name} = {new_list}')

with open(file_path, "w", encoding="utf-8") as f:
    f.write(full_content)
  • 代码默认使用ast.literal_eval解析列表,相比eval不会执行恶意代码,安全性更高
  • 如果你的文件是非UTF-8编码,修改open方法的encoding参数为对应编码即可,比如encoding="gbk"

内容的提问来源于stack exchange,提问作者Casmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:45:05