我有一个文件,其中每一行都有一对坐标,如下所示:
[-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个浮点列表?
答案 0 :(得分:0)
对于每一行,您需要:
for
循环迭代文件str.strip()
[1:-1]
', '
str.split()
和list comprehension。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
看起来像这样:
>>> m_verts
[[-74.0104294, 40.6996416], ... ]
一般情况下,你最好不要在文件的行上进行迭代,而不是使用像splitlines()
这样的方法将它们全部读入列表......它更具可读性,并且大文件效率更高。
另外,请注意我使用了更多的pythonic under_score 样式来命名m_verts
,而不是你的 camelCase 样式 - 并且&# 39;打开文件进行阅读时无需指定'r'
。
答案 1 :(得分:0)
甚至比@ZeroPiraeus解决方案更好的方法是使用ast.literal_eval,它可以评估python的任何文字(这里是float literal的列表文字复合词)
import ast
m_verts = []
with open('Manhattan_Coords.txt') as f:
for line in f:
pair = ast.literal_eval(line)
m_verts.append(pair)
但是对于列表的构建,更好的是列表理解
import ast
with open('Manhattan_Coords.txt') as f:
m_verts = [ast.literal_eval(line) for line in f]