Python 标记字符串中的整数

Python 标记字符串中的整数,python,string,integer,coordinates,pysal,Python,String,Integer,Coordinates,Pysal,我有一个文本文件,其中包含以下形式的坐标: [-1.38795678, 54.90352965] [-3.2115, 55.95530556] [0.00315428, 51.50285246] 我希望能够遍历每个坐标,以检查它在英国各县的shapefile中是哪个多边形,但是我不确定如何标记这些数字,以便我可以有一个沿着以下行的代码 for line in coordinates: for poly in polygons: if points in polygon

我有一个文本文件,其中包含以下形式的坐标:

[-1.38795678, 54.90352965]
[-3.2115, 55.95530556] 
[0.00315428, 51.50285246]
我希望能够遍历每个坐标,以检查它在英国各县的shapefile中是哪个多边形,但是我不确定如何标记这些数字,以便我可以有一个沿着以下行的代码

for line in coordinates:
    for poly in polygons:
        if points in polygons:
            print(polygons)
            break

        if points not in polygons:
            continue

目前它们是字符串,但我希望每条线都由两个点组成,这样程序就可以尝试在多边形中定位它们

您可以使用将字符串转换为元组

编辑:如果坐标位于没有逗号的单独行上

from ast import literal_eval

s = """[-1.38795678, 54.90352965]
[-3.2115, 55.95530556]
[0.00315428, 51.50285246]"""

seq = [literal_eval(line) for line in s.split("\n")]
#or
seq = literal_eval(s.replace("\n", ","))
print seq[0][1]

您还可以使用比ast快得多的正则表达式:

import re
with open("in.txt") as f:
    r = re.compile("[-]?\d+\.\d+")
    data = [list(map(float, r.findall(line))) for line in f]
一些时间安排:

In [14]: %%timeit
with open("test.txt") as f:
    data = [literal_eval(line) for line in f]
   ....: 
100 loops, best of 3: 2.01 ms per loop

In [15]: %%timeit
with open("test.txt") as f:
    r = re.compile("[-]\d+\.\d+")
    data = [list(map(float, r.findall(line))) for line in f]
   ....: 
1000 loops, best of 3: 403 µs per loop

 with open("test.txt") as f:
    r = re.compile("[-]?\d+\.\d+")
    data = [list(map(float, r.findall(line))) for line in f]
   ....:     

In [38]: with open("test.txt") as f:
           data2 = [literal_eval(line) for line in f]
   ....:     

In [39]: data == data2
Out[39]: True
仅剥离和拆分会更快:

In [40]: %%timeit
   ....: with open("test.txt") as f:
   ....:     data = [list(map(float, line.strip("[]\n").split(","))) for line in f]
   ....: 
1000 loops, best of 3: 249 µs per loop

如果我加载了If文件而没有读取它,我会得到错误值error:格式错误的节点或字符串:,或者如果我读取了它,然后执行seq=literal\u evals,它会发回错误文件,第2行[-3.2115,55.95530556]^SyntaxError:无效语法我刚从tweets获取了坐标,然后想在英国绘制密度图,但这一部分花了很长时间才尝试解决。@JoshuaHawley:看起来您的数据文件行与行之间没有逗号;尝试分别对每一行应用文字值。该文件只是在新行[-1.3879578,54.90352965][-3.2115,55.95530556][0.00315428,51.50285246]上列出了每一行的坐标,每一行之间没有逗号。如果执行seq=literal值文件,会发生什么情况。read.replace\n,?Kevin运行该命令时不会出错,您以前发布的代码似乎也有效。请将文件的实际格式添加到您的问题中
In [40]: %%timeit
   ....: with open("test.txt") as f:
   ....:     data = [list(map(float, line.strip("[]\n").split(","))) for line in f]
   ....: 
1000 loops, best of 3: 249 µs per loop