如何从 python 中的文本文件中提取特定内容?
how to extract specific content from a text file in python?
我正在 this link 使用 geonames
邮政编码数据文件。上述文件的示例数据如下:
IT 67010 Barete Abruzzi AB L'Aquila AQ 42.4501 13.2806 4
IT 67012 Cagnano Amiterno Abruzzi AB L'Aquila AQ 42.4574 13.2279 4
IT 67012 San Giovanni Abruzzi AB L'Aquila AQ 42.4642 13.2584 4
IT 67013 Mascioni Abruzzi AB L'Aquila AQ 42.5282 13.3492 4
IT 67013 Campotosto Abruzzi AB L'Aquila AQ 42.5588 13.368 4
IT 67013 Poggio Cancelli Abruzzi AB L'Aquila AQ 42.5623 13.327 4
IT 67013 Ortolano Abruzzi AB L'Aquila AQ 42.5193 13.4238 4
IT 67014 Capitignano Abruzzi AB L'Aquila AQ 42.5204 13.3012 4
IT 67015 Montereale Abruzzi AB L'Aquila AQ 42.5233 13.2459 4
IT 67015 Marana Di Montereale Abruzzi AB L'Aquila AQ 42.4967 13.2236 4
IT 67015 San Giovanni Paganica Abruzzi AB L'Aquila AQ 42.5057 13.2762 4
IT 67015 Aringo Abruzzi AB L'Aquila AQ 42.5554 13.2671 4
IT 67015 Ville Di Fano Abruzzi AB L'Aquila AQ 42.5248 13.1864 4
IT 67015 Cesaproba Abruzzi AB L'Aquila AQ 42.4985 13.1864 4
IT 67015 Marana Abruzzi AB L'Aquila AQ 42.4967 13.2236 4
在上面的文件中,每行的第二部分(IT
之后的 5 位数字代码)是邮政编码。每行的倒数第二个和倒数第三个字段(最后的 2 个浮点数)是纬度和经度。
我正在尝试提取这 3 个字段,但遇到了一些困难,尤其是对于纬度和经度部分。这是我到目前为止编写的代码:
zip_code = ''
latitude = ''
longitude = ''
file1 = open("IT.txt", "r")
for line in file1:
line = line.rstrip('\n')
zip_code = line[3:8]
latitude = line[-17:-10]
longitude = line[-9:-2]
print(latitude)
print(longitude)
下面是经纬度的一些示例输出:
纬度:
42.4501
42.4574
42.4642
42.5282
42.558
42.562
42.5193
42.5204
经度
13.2806
13.2279
13.2584
13.3492
13.368
13.327
13.4238
13.3012
如你所见,有些经纬度不是标准长度(大部分经纬度小数点后有4位,但有些只有3位)。这会导致格式不当出现问题。如何从上述文件的每一行中提取纬度和经度字段?
你们非常接近!
我建议直接索引,因为你知道它们是哪一列,而不是尝试通过切片来解析:
with open('data.txt', 'r') as f:
data = f.readlines()
for line in data:
line_sequence = line.split()
zipcode, lat, long = line_sequence[1], line_sequence[-2], line_sequence[-3]
print zipcode, lat, long
输出:
67010 13.2806 42.4501
67012 13.2279 42.4574
67012 13.2584 42.4642
67013 13.3492 42.5282
67013 13.368 42.5588
67013 13.327 42.5623
67013 13.4238 42.5193
67014 13.3012 42.5204
67015 13.2459 42.5233
67015 13.2236 42.4967
67015 13.2762 42.5057
67015 13.2671 42.5554
67015 13.1864 42.5248
67015 13.1864 42.4985
67015 13.2236 42.4967
我正在 this link 使用 geonames
邮政编码数据文件。上述文件的示例数据如下:
IT 67010 Barete Abruzzi AB L'Aquila AQ 42.4501 13.2806 4
IT 67012 Cagnano Amiterno Abruzzi AB L'Aquila AQ 42.4574 13.2279 4
IT 67012 San Giovanni Abruzzi AB L'Aquila AQ 42.4642 13.2584 4
IT 67013 Mascioni Abruzzi AB L'Aquila AQ 42.5282 13.3492 4
IT 67013 Campotosto Abruzzi AB L'Aquila AQ 42.5588 13.368 4
IT 67013 Poggio Cancelli Abruzzi AB L'Aquila AQ 42.5623 13.327 4
IT 67013 Ortolano Abruzzi AB L'Aquila AQ 42.5193 13.4238 4
IT 67014 Capitignano Abruzzi AB L'Aquila AQ 42.5204 13.3012 4
IT 67015 Montereale Abruzzi AB L'Aquila AQ 42.5233 13.2459 4
IT 67015 Marana Di Montereale Abruzzi AB L'Aquila AQ 42.4967 13.2236 4
IT 67015 San Giovanni Paganica Abruzzi AB L'Aquila AQ 42.5057 13.2762 4
IT 67015 Aringo Abruzzi AB L'Aquila AQ 42.5554 13.2671 4
IT 67015 Ville Di Fano Abruzzi AB L'Aquila AQ 42.5248 13.1864 4
IT 67015 Cesaproba Abruzzi AB L'Aquila AQ 42.4985 13.1864 4
IT 67015 Marana Abruzzi AB L'Aquila AQ 42.4967 13.2236 4
在上面的文件中,每行的第二部分(IT
之后的 5 位数字代码)是邮政编码。每行的倒数第二个和倒数第三个字段(最后的 2 个浮点数)是纬度和经度。
我正在尝试提取这 3 个字段,但遇到了一些困难,尤其是对于纬度和经度部分。这是我到目前为止编写的代码:
zip_code = ''
latitude = ''
longitude = ''
file1 = open("IT.txt", "r")
for line in file1:
line = line.rstrip('\n')
zip_code = line[3:8]
latitude = line[-17:-10]
longitude = line[-9:-2]
print(latitude)
print(longitude)
下面是经纬度的一些示例输出:
纬度:
42.4501
42.4574
42.4642
42.5282
42.558
42.562
42.5193
42.5204
经度
13.2806
13.2279
13.2584
13.3492
13.368
13.327
13.4238
13.3012
如你所见,有些经纬度不是标准长度(大部分经纬度小数点后有4位,但有些只有3位)。这会导致格式不当出现问题。如何从上述文件的每一行中提取纬度和经度字段?
你们非常接近!
我建议直接索引,因为你知道它们是哪一列,而不是尝试通过切片来解析:
with open('data.txt', 'r') as f:
data = f.readlines()
for line in data:
line_sequence = line.split()
zipcode, lat, long = line_sequence[1], line_sequence[-2], line_sequence[-3]
print zipcode, lat, long
输出:
67010 13.2806 42.4501
67012 13.2279 42.4574
67012 13.2584 42.4642
67013 13.3492 42.5282
67013 13.368 42.5588
67013 13.327 42.5623
67013 13.4238 42.5193
67014 13.3012 42.5204
67015 13.2459 42.5233
67015 13.2236 42.4967
67015 13.2762 42.5057
67015 13.2671 42.5554
67015 13.1864 42.5248
67015 13.1864 42.4985
67015 13.2236 42.4967