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

Python实现用另一文件内容替换指定文件中含msgstr的行

用f1.txt内容替换f2.po中指定行的解决方案

方法一:使用awk命令(推荐,适合快速处理)

直接在终端执行以下命令,会生成处理后的新文件new_f2.po:

awk 'NR==FNR {lines[++n]=$0; next} /msgstr/ {$0=lines[++cnt]} 1' f1.txt f2.po > new_f2.po

命令解释:

  • NR==FNR:仅在读取第一个文件(f1.txt)时执行,将每一行存入数组lines,n记录f1的总行数。
  • next:跳过当前行的后续处理,直接读取下一行。
  • /msgstr/:读取第二个文件(f2.po)时,匹配包含"msgstr"的行,将其替换为lines数组中第cnt行,cnt是替换次数计数器。
  • 1:默认打印每一行(处理后的内容)。
  • 输出重定向到new_f2.po,避免直接修改原文件导致数据丢失。

补充:处理f1行数不足的情况

如果f1.txt的行数少于f2.po中"msgstr"行的数量,多出来的"msgstr"行会被替换为空行。若想保留这些行的原内容,可修改命令为:

awk 'NR==FNR {lines[++n]=$0; next} /msgstr/ {if (cnt < n) $0=lines[++cnt]} 1' f1.txt f2.po > new_f2.po

方法二:使用Python脚本(适合自定义逻辑)

如果需要更灵活的处理逻辑,可使用以下Python脚本:

# 读取f1.txt的所有行,去除换行符
with open('f1.txt', 'r', encoding='utf-8') as f1:
    f1_lines = [line.rstrip('\n') for line in f1]

replace_count = 0
# 生成处理后的文件
with open('f2.po', 'r', encoding='utf-8') as f2, open('new_f2.po', 'w', encoding='utf-8') as new_f2:
    for line in f2:
        if 'msgstr' in line:
            if replace_count < len(f1_lines):
                # 替换为f1对应行
                new_line = f1_lines[replace_count] + '\n'
                replace_count += 1
            else:
                # f1行不足时保留原行
                new_line = line
            new_f2.write(new_line)
        else:
            new_f2.write(line)

脚本说明:

  • 先读取f1.txt的所有内容到列表f1_lines。
  • 遍历f2.po的每一行,遇到含"msgstr"的行时,用f1_lines中对应索引的内容替换,替换次数计数器自增。
  • 当f1的行全部用完后,后续的"msgstr"行将保持原样。
  • 处理结果写入new_f2.po。

最终操作

检查new_f2.po内容无误后,可执行以下命令覆盖原文件:

mv new_f2.po f2.po

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:12:15