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

如何在Python 3.x中识别并存储格式化文本文件的变量与数据?

嘿,别担心,好久不用Python手生太正常了!我来给你分享几个实用的思路,帮你把那段文本里的数据解析成你想要的格式~

首先,你已经成功提取了<THING1>到</THING1>之间的内容,这一步很棒!接下来的核心就是把这段长字符串里的变量拆分出来,再转换成对应的数据类型。我给你两种常用的解决方案:

方案1:按行/分隔符拆分后逐行处理

如果你的目标文本里每个变量是单独一行(或者用\#分隔),可以先把字符串拆分成一个个变量行,再逐个处理:

# 假设你已经提取好的t1字符串
t1 = '''<THING1> 
var1 = 0 
var2 = "0.0 100.0 0.0" 
var3 = "IDENTIFYING_WORD" 
var4 = 2 
</THING1>'''

# 第一步:清理字符串,拆分出有效变量行
# splitlines()自动处理各种换行符,strip()去掉每行的空格,过滤掉空行和标签行
lines = [line.strip() for line in t1.splitlines() if line.strip() not in ('<THING1>', '')]

# 第二步:初始化字典存储结果
parsed_data = {}

# 第三步:遍历每行,解析变量
for line in lines:
    # 按=分割键和值(只分割1次,避免值里出现=的情况)
    key, value = [part.strip() for part in line.split('=', 1)]
    
    if key in ('var1', 'var4'):
        # 转成整数
        parsed_data[key] = int(value)
    elif key == 'var2':
        # 去掉引号,按空格拆分数字,转成浮点数列表(要整数就用int(num))
        num_str = value.strip('"')
        parsed_data[key] = [float(num) for num in num_str.split()]
    elif key == 'var3':
        # 去掉引号保留字符串
        parsed_data[key] = value.strip('"')

# 看看结果
print(parsed_data['var1'])   # 0
print(parsed_data['var2'])   # [0.0, 100.0, 0.0]
print(parsed_data['var3'])   # IDENTIFYING_WORD
print(parsed_data['var4'])   # 2

如果你的原始文本里变量是用\#分隔的(比如你示例里的\ var1 = 0 \# var2 = ...),只需要把拆分方式改成split('\#')就行,逻辑和上面一样。

方案2:用正则表达式直接匹配(适合格式固定的情况)

如果你的文本格式非常规整,用正则表达式可以更直接地提取每个变量的值,不需要拆分行:

import re

# 还是用你提取好的t1字符串
t1 = '''<THING1> \ var1 = 0 \# var2 = "0.0 100.0 0.0" \# var3 = "IDENTIFYING_WORD" \# var4 = 2 \# </THING1>'''

# 匹配var1:提取等号后的数字
var1 = int(re.search(r'var1\s*=\s*(\d+)', t1).group(1))

# 匹配var2:提取引号内的数字字符串,再转成列表
var2_str = re.search(r'var2\s*=\s*"([\d\s.]+)"', t1).group(1)
var2 = [float(num) for num in var2_str.split()]

# 匹配var3:提取引号内的字符串
var3 = re.search(r'var3\s*=\s*"([^"]+)"', t1).group(1)

# 匹配var4:提取等号后的数字
var4 = int(re.search(r'var4\s*=\s*(\d+)', t1).group(1))

# 输出结果
print(var1)   # 0
print(var2)   # [0.0, 100.0, 0.0]
print(var3)   # IDENTIFYING_WORD
print(var4)   # 2

为什么你之前用index找换行没成功?

因为index('\n')只会找第一个换行符,后续的切片逻辑很容易因为字符串结构的细微变化出错。用splitlines()或者正则表达式会更可靠,它们能自动处理各种换行符(比如\n、\r\n),也不用手动计算索引位置。

两种方案都能实现你的需求,选哪种取决于你的文本格式是否固定:如果格式可能有小变动,方案1更灵活;如果格式完全固定,方案2更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:56:57