在python中只保留int

2024-10-02 10:23:45 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我遇到了这样一种情况,我打开了一个.Dat文件并试图从中提取数字:

self.text= (open("circles.dat", "r")).readlines()
print (self.text)

输出:

['200 200 100\n', '75\t200\t15\n', '   325\t200\t15\n', '\n', '\t200\t\t75 10\n', '200 325 10\n']

有没有一种方法,我只能提取整数,而不包括任何其他内容。 编辑: 无法使用Eval() 我希望输出是这样的:

[200,200,100,75,200,15,325,200,15,200,75,10,200,325,10]

Tags: 文件方法textself情况数字opendat
3条回答

假设您有所有的int,并且它们之间只有空格(例如空格或制表符),那么您可以使用str.split()的简单列表理解:

>>> with open("circles.dat", "r") as f:
...     d = [int(a) for l in f for a in l.split()]
>>> d
[200, 200, 100, 75, 200, 15, 325, 200, 15, 200, 75, 10, 200, 325, 10]
>>> self.text = (open("circles.dat", "r")).readlines()
>>> print self.text
['200 200 100\n', '75\t200\t15\n', '   325\t200\t15\n', '\n', '\t200\t\t75 10\n', '200 325 10\n']
>>>
>>> ans = map(lambda s: s.rstrip().replace("\t", " "), self.text)
>>> ans = " ".join(ans)
>>> ans = ans.split()
>>>
>>> final_ans = [int(a) for a in ans]
>>> final_ans = map(int, ans)  # alternative
>>> print final_ans
[200, 200, 100, 75, 200, 15, 325, 200, 15, 200, 75, 10, 200, 325, 10]
>>> import re
>>> num_list = map(int, re.findall(r'\d+', open("circles.dat", "r").read()))
[200, 200, 100, 75, 200, 15, 325, 200, 15, 200, 75, 10, 200, 325, 10]

使用.read()而不是.readlines()作为read()返回整个文件的内容作为单个字符串(可以与regex一起使用),这与readlines()返回字符串列表不同。你知道吗

获取数字列表(以字符串形式)后,使用map()函数将列表类型转换为int类型。你知道吗

步骤说明:

>>> import re
>>> file_content = open("circles.dat", "r").read()  # Read file as single string
>>> num_list = re.findall(r'\d+', file_content)  # Fetch all numbers from string
>>> num_list
['200', '200', '100', '75', '200', '15', '325', '200', '15', '200', '75', '10', '200', '325', '10']
>>> map(int, num_list)  # Typecast list of str to list of int
[200, 200, 100, 75, 200, 15, 325, 200, 15, 200, 75, 10, 200, 325, 10]

相关问题 更多 >

    热门问题