为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法从文本文件中带括号的数字中提取值?

有没有办法从文本文件中带括号的数字中提取值?

慕村9548890 2021-12-16 15:50:38
我有一个非常基本的问题,但我没有在互联网上找到任何“漂亮”的解决方案。我想要的只是从有字符串和括号的行中提取数字。例如,我有一个输出文本文件如下:test: [1, 50, 200]我想提取值 1、50 和 200,以便制作这些数字的 numpy 数组。这个问题已经通过一些拆分和剥离解决了,但我觉得这个解决方案不是很优雅。
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

你可以使用一个非常幼稚的正则表达式:


import numpy as np

import re


nums = map(int, re.findall(r'\d+', 'test: [1, 50, 200]'))

print(np.array([n for n in nums]))

# [  1  50 200]

另一种选择是使用正则表达式来提取整个列表,然后使用literal_eval:


import numpy as np

import re

from ast import literal_eval


li = re.search(r'(\[.*\])', 'test: [1, 50, 200]').group()

print(np.array(literal_eval(li)))

# [  1  50 200]


查看完整回答
反对 回复 2021-12-16
?
守着一只汪

TA贡献1872条经验 获得超3个赞

我实际上可能会使用涉及拆分或正则表达式的东西来进行一些错误检查和安全性 --- 以确保输入中没有隐藏任何恶意内容。但是你可以做这样的事情。


我假设你在一个字符串变量中有你的文本行line。然后你可以做


from ast import literal_eval

line = "test: [1, 50, 200]"    # or whatever your line is

array = literal_eval(line.partition(":")[2].strip())

但要小心,因为eval在不确定的输入上运行是危险的。


查看完整回答
反对 回复 2021-12-16
?
Qyouu

TA贡献1786条经验 获得超11个赞

ast.literal_eval 给出一种解决方案:


import ast

s = 'test: [1, 50, 200]'

ast.literal_eval(s.split(':')[1].strip())


#evaluates to [1, 50, 200]


查看完整回答
反对 回复 2021-12-16
  • 3 回答
  • 0 关注
  • 240 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信