Python 如何在文件中逐行读取浮动列表中的每一行?
我有一个文件,其中每条线都有一对坐标,如下所示:Python 如何在文件中逐行读取浮动列表中的每一行?,python,list,file,python-3.x,file-io,Python,List,File,Python 3.x,File Io,我有一个文件,其中每条线都有一对坐标,如下所示: [-74.0104294, 40.6996416] 我用来读取它们的代码是: with open('Manhattan_Coords.txt', 'r') as f: mVerts = f.read().splitlines() 这会将所有78行读入列表,但它会将它们作为字符串读入,因此当我将它们打印出来时,它会显示为: ['[(-74.0104294, 40.6996416]', ... , '[-74.0104294, 40.69
[-74.0104294, 40.6996416]
我用来读取它们的代码是:
with open('Manhattan_Coords.txt', 'r') as f:
mVerts = f.read().splitlines()
这会将所有78行读入列表,但它会将它们作为字符串读入,因此当我将它们打印出来时,它会显示为:
['[(-74.0104294, 40.6996416]', ... , '[-74.0104294, 40.6996416]']
(想象一下……像第一个和最后一个一样多了76个坐标)
如何读取这些坐标对中的每一个作为列表,以便留下78个子列表,每个子列表中有2个浮点数?对于每一行,您需要:
... 使用
for
循环在文件上迭代... 使用
str.strip()
... 使用:
[1:-1]
... 使用
str.split()
和... 使用
float()
... 使用
list.append()
m_verts = []
with open('Manhattan_Coords.txt') as f:
for line in f:
pair = [float(s) for s in line.strip()[1:-1].split(", ")]
m_verts.append(pair)
>>> m_verts
[[-74.0104294, 40.6996416], ... ]
之后,m_verts
如下所示:
m_verts = []
with open('Manhattan_Coords.txt') as f:
for line in f:
pair = [float(s) for s in line.strip()[1:-1].split(", ")]
m_verts.append(pair)
>>> m_verts
[[-74.0104294, 40.6996416], ... ]
一般来说,您最好对文件的行进行迭代,而不是使用splitlines()
之类的方法一次将它们全部读取到列表中。。。它更具可读性,并且使用大文件时效率更高
另外,请注意,我使用了更具pythonic风格的under_score样式来命名
m_verts
,而不是您的camelCase样式,并且在打开文件进行读取时,不需要指定'r'
。甚至比@zeropyraeus solution使用ast.literal\u eval更好,后者可以评估python的任何文字(这里是浮点文字的列表文字复合)
但对于列表的构建来说,更好的是列表理解
import ast
with open('Manhattan_Coords.txt') as f:
m_verts = [ast.literal_eval(line) for line in f]
你的拼写是不是错了[(-74.0104294,40.6996416]?也就是说,额外的圆括号?@ZeroPiraeus在我的回答中我用了
ast.literal\u eval
,你可能不知道