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

基于文本规则将TXT内容拆分至Excel多列的Jupyter代码问题排查

基于文本规则将TXT内容拆分至Excel多列的Jupyter代码问题排查

我仔细看了你的需求和现有代码,发现几个关键逻辑问题导致没拿到预期的Excel输出,咱们一步步来修正:

现有代码的核心问题

  1. 处理“and”开头行时的拆分错误:
    当你拆分and 02RE0JD Replacement of Left gear时,用split(maxsplit=1)得到的第一个元素是and,而不是你需要的大写代码02RE0JD。后续检查subcode[0].isalnum()自然会失败,导致code_id_2和code_desc_2被填入空值,这完全不符合你的需求。
  2. 逻辑配对不严谨:
    原代码在遍历主行时,仅检查下一行是否是and行,但没有正确提取and行里的有效内容,同时也没考虑如果连续多个主行没有对应and行的情况(比如第一个主行的下一行是另一个主行)。

修正后的代码

import re
import pandas as pd

# 读取文本文件
with open('11.txt', 'r') as f:
    text = f.read()

# 初始化存储数据的列表
code_id = []
code_desc = []
code_id_2 = []
code_desc_2 = []

# 按行拆分,过滤空行
lines = [line.strip() for line in text.split('\n') if line.strip()]

i = 0
while i < len(lines):
    line = lines[i]
    # 匹配主行:以大写字母数字开头(排除VRG/DDC)
    main_match = re.match(r'^(?!VRG|DDC)([A-Z0-9]+)\s+(.*)$', line)
    if main_match:
        # 提取主行的code和描述
        main_code = main_match.group(1)
        main_desc = main_match.group(2).strip()
        code_id.append(main_code)
        code_desc.append(main_desc)
        
        # 检查下一行是否是and开头的子行
        sub_code = ""
        sub_desc = ""
        if i + 1 < len(lines):
            next_line = lines[i+1]
            sub_match = re.match(r'^\s*and\s+([A-Z0-9]+)\s+(.*)$', next_line)
            if sub_match:
                sub_code = sub_match.group(1)
                sub_desc = sub_match.group(2).strip()
                # 跳过已经处理的子行
                i += 1
        
        code_id_2.append(sub_code)
        code_desc_2.append(sub_desc)
    i += 1

# 创建DataFrame并写入Excel
df = pd.DataFrame({
    'code_id': code_id,
    'code_desc': code_desc,
    'code_id_2': code_id_2,
    'code_desc_2': code_desc_2
})

df.to_excel('1.xlsx', index=False)

关键改动说明

  1. 用正则直接提取内容:
    不管是主行还是and行,都用正则一次性提取出代码和描述,避免了拆分字符串的错误,同时保证了匹配的准确性。比如主行的正则^(?!VRG|DDC)([A-Z0-9]+)\s+(.*)$直接捕获大写代码和后面的所有描述;and行的正则^\s*and\s+([A-Z0-9]+)\s+(.*)$跳过开头的and,直接提取子代码和描述。
  2. 用while循环处理行配对:
    当检测到and行时,直接跳过该行(i +=1),避免重复处理,同时确保每个主行只对应一个子行(如果存在的话)。
  3. 过滤空行:
    先对所有行做strip()并过滤空行,避免因文本里的空行导致逻辑错误。

测试结果

用你给出的示例文本运行修正后的代码,会得到完全符合预期的Excel输出:

code_idcode_desccode_id_2code_desc_2
03YT0Z1Transplantation of vehicle
05RF0JEReplacement of Right gear02RE0JDReplacement of Left gear

备注:内容来源于stack exchange,提问作者Anand Babu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 15:43:00