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

如何用Python按数字条件过滤修改文本文件中的状态字符串

问题

我有一个类矩阵结构的文本文件,包含字符串与数字,示例内容如下:

300 "FTPAT1 2 " 301 "CHURCH 2 " "01" "Open" "Line"
300 "CHURCH 2 " 301 "GREENL1 1 " "01" "Open" "Line"
400 "FTPAT1 2 " 401 "CHURCH 2 " "01" "Closed" "Line"
400 "CHURCH 2 " 401 "GREENL1 1 " "01" "Closed" "Line"

我希望设置过滤规则:将以300-301开头行的"Open"改为"Closed",以400-401开头行的"Closed"改为"Open"。目前我仅实现了读取文件的代码:

file = open('testfile.txt', 'r'):
    for line in file:
        print line,

请帮忙提供完整的实现方案,非常感谢!

回答

没问题,我来帮你搞定这个文本处理需求。先修正你原有代码里的小语法问题,再添加对应的替换逻辑,下面是完整的实现方案:

核心思路

  1. 安全解析内容:因为文件里有带空格的引号字符串,不能直接用普通split()拆分,得用能识别引号的工具保证内容不被拆坏
  2. 匹配行标识:判断每行是否是300 301或400 401开头
  3. 按规则替换:找到对应的Open/Closed进行状态翻转
  4. 还原格式写入:确保输出的格式和原文件一致,不破坏原有结构

完整代码

import shlex

# 用with语句自动管理文件,不用手动关闭,更安全可靠
with open('testfile.txt', 'r') as input_file, open('processed_testfile.txt', 'w') as output_file:
    for line in input_file:
        # 先去掉行尾的换行符,再解析带引号的内容
        cleaned_line = line.strip()
        # shlex.split会把带引号的含空格字符串当成一个整体,比如"FTPAT1 2 "不会被拆成两部分
        line_parts = shlex.split(cleaned_line)
        
        # 判断当前行的开头标识
        if len(line_parts) >= 2 and line_parts[0] == '300' and line_parts[1] == '301':
            # 遍历找到"Open"并替换为"Closed"
            for idx, part in enumerate(line_parts):
                if part == 'Open':
                    line_parts[idx] = 'Closed'
        elif len(line_parts) >= 2 and line_parts[0] == '400' and line_parts[1] == '401':
            # 遍历找到"Closed"并替换为"Open"
            for idx, part in enumerate(line_parts):
                if part == 'Closed':
                    line_parts[idx] = 'Open'
        
        # 把处理后的内容重新拼接成符合原格式的行
        # 对包含空格的部分重新加上引号,保证格式和原文件一致
        processed_line = ' '.join(
            f'"{part}"' if ' ' in part else part 
            for part in line_parts
        ) + '\n'
        
        # 写入到输出文件
        output_file.write(processed_line)

print("处理完成!结果已保存到processed_testfile.txt")

代码细节说明

  • shlex.split():这个方法是处理你文件格式的关键,它能正确识别引号包裹的含空格字符串,避免内容被错误拆分
  • with语句:自动处理文件的打开和关闭,不用担心忘记关闭文件导致的资源泄漏问题
  • 格式还原:拼接时判断每个内容块是否包含空格,有空格的就重新加上引号,保证输出和原文件的格式完全一致
  • 输出到新文件:默认将结果写入新文件,不会修改原文件,方便你对比处理前后的差异;如果需要直接覆盖原文件,记得先备份,再把输出文件名改成原文件名即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:30:18