删除不需要的字符并在 Python 中转换为 int

Remove unwanted characters and convert to int in Python

当文件以如下格式显示时,从文件中读取一行数字的最佳方法是什么:

[1, 2, 3 , -4, 5]
[10, 11, -12, 13, 14 ]

令人讨厌的是,正如我所描绘的,有时数字之间有额外的空格,有时则没有。我尝试使用 CSV 来绕过逗号,但事实证明括号和随机空格也很难删除。理想情况下,我会将括号之间的每个数字作为 int 附加到 list,但当然括号会导致 int() 失败。

我已经研究过 Removing unwanted characters from a string in Python and Python Read File, Look up a String and Remove Characters 建议的类似解决方案,但不幸的是,当我尝试组合所有内容时,我总是失败。

使用 json module to parse each line as a JSON 数组。

import json

list_of_ints = []
for line in open("/tmp/so.txt").readlines():
    a = json.loads(line)
    list_of_ints.extend(a)
print(list_of_ints)

这会将所有行中的所有整数收集到 list_of_ints 中。输出:

[1, 2, 3, -4, 5, 10, 11, -12, 13, 14]

使用正则表达式从字符串中删除不需要的字符

import re
text_ = re.sub("[0-9]+", " ", text);

第二种方法:

str = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in str.split() if s.isdigit()]
[23, 11, 2]

因为每一行看起来都是文字 python 列表,您可以使用 ast 模块:

import ast

with open('myfile.txt') as fh:
    for line in fh:
        numbers_list = ast.literal_eval(line)

请注意,您可以使用内置函数 eval() 获得相同的结果,但使用 ast 对恶意输入更安全。

使用 ast.literal_eval() 是另一种选择:

from ast import literal_eval

with open("your_file.txt") as file_obj:
    for line in file_obj:
        lst = literal_eval(line)
        do_stuff(lst)