删除不需要的字符并在 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)
当文件以如下格式显示时,从文件中读取一行数字的最佳方法是什么:
[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)