使用列表推导在Python中读取文本文件并将某些值转换为浮点数

1 投票
3 回答
642 浏览
提问于 2025-04-17 22:14

我有一个文本文件,里面有x、y和Id这些数据。

text = "c:\\text.txt"

480031, 6171223, 77-1084-A,
478578, 6170168, 77-0767-A, 
479429, 6171688, 77-1065-A, 
479526, 6190464, 79-1420-A, 
480469, 6183769, 78-2071-A,
......, ......., .........,

我用一种叫做列表推导的方法把这个文件读成一个列表。

centres = [l.split() for l in open(text, "r")]

[['480031', '6171223', '77-1084-A'],
['478578', '6170168', '77-0767-A'], 
['479429', '6171688', '77-1065-A'], 
['479526', '6190464', '79-1420-A'],
........., ........., ...........]]

我希望在使用列表推导的时候,如果能把x和y转换成浮点数,那就太好了,这样我就能得到。

[[480031, 6171223, '77-1084-A'],
[478578, 6170168, '77-0767-A'], 
[479429, 6171688, '77-1065-A'], 
[479526, 6190464, '79-1420-A'],
........., ........., ...........]]

3 个回答

0

把代码写成一行虽然看起来很酷,但如果把它分开写,读起来会更清楚(更容易理解和维护):

INPUT = "c:/text.txt"

def convert(line):
    row = line.split()
    return (int(row[0]), int(row[1]), row[2])

with open(INPUT) as inf:
    centres = [convert(line) for line in inf]
1

这不是一步到位,但你可以这样做:

centres = [l.split() for l in open(text, "r")]
centres = [[int(x), int(y), z] for x, y, z in centres]
1

这是一个一行的示例:

centres = [[int(l[0]), int(l[1]), l[2].strip()] for l in [l.split(',') for l in open(text, "r")]]

撰写回答