You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何本地处理Geonames大文件,提取英国主要城镇数据并操作?

处理Geonames大文件并提取英国城市数据的方案

我之前折腾过Geonames的超大文本文件,完全懂你打不开的痛苦!下面几个方法能帮你快速提取英国的目标数据,不用硬怼整个大文件:

方法一:用命令行快速筛选(零编程基础也能搞定)

命令行工具处理大文件效率超高,几秒就能完成筛选:

  • Windows系统:打开命令提示符(CMD),切换到allcountries.txt所在的文件夹,运行这条命令:
    findstr /C:"GB" allcountries.txt > uk_cities.txt
    
    这条命令会把所有包含英国国家代码GB的行提取出来,保存成uk_cities.txt——这个小文件就能用Notepad++、Sublime随便打开了。
  • Linux/macOS系统:打开终端,进入文件目录,运行:
    grep "GB" allcountries.txt > uk_cities.txt
    

小提示:Geonames的allcountries.txt是制表符分隔的,第8列是国家代码,所以这个筛选是精准的。如果只想保留城市(排除村庄、景点等),可以查一下Geonames的feature code(第7列),比如只保留PPL(城镇)、PPLA(首府)这类代码,命令可以改成更精准的筛选(比如Windows用findstr /R "\tPPL\t.*GB",不过稍微复杂点,先提取所有GB数据再筛选也很方便)。

方法二:用Python脚本精准提取所需字段(推荐,一步到位)

如果想直接提取你需要的地名、纬度、经度、国名、大洲这几个字段,写个简单的Python脚本最省心,输出的CSV文件Excel直接就能打开:

import csv

# 先定义Geonames的列索引(从0开始数),以及大洲代码映射
COLUMN_MAP = {
    "place_name": 1,
    "latitude": 4,
    "longitude": 5,
    "country_name": 10,
    "continent_code": 17
}

CONTINENT_NAME = {
    "EU": "Europe",
    "AS": "Asia",
    "AF": "Africa",
    "NA": "North America",
    "SA": "South America",
    "OC": "Oceania",
    "AN": "Antarctica"
}

# 处理文件
with open('allcountries.txt', 'r', encoding='utf-8') as infile, \
     open('uk_target_data.csv', 'w', newline='', encoding='utf-8') as outfile:
    
    writer = csv.writer(outfile)
    # 先写表头
    writer.writerow(["地名", "纬度", "经度", "国名", "大洲"])
    
    for line in infile:
        # 按制表符拆分每行数据
        fields = line.strip().split('\t')
        # 筛选英国数据(国家代码是GB)
        if len(fields) >= 18 and fields[8] == "GB":
            # 提取所需字段
            place = fields[COLUMN_MAP["place_name"]]
            lat = fields[COLUMN_MAP["latitude"]]
            lon = fields[COLUMN_MAP["longitude"]]
            country = fields[COLUMN_MAP["country_name"]]
            continent = CONTINENT_NAME.get(fields[COLUMN_MAP["continent_code"]], "未知")
            
            # 写入CSV
            writer.writerow([place, lat, lon, country, continent])

运行这个脚本后,你会得到一个uk_target_data.csv文件,直接双击就能用Excel打开,所有需要的字段都整整齐齐的。如果只想保留城市,还可以在筛选条件里加个判断:fields[7] in ["PPL", "PPLA", "PPLA2", "PPLC"](这些是Geonames定义的城市类代码)。

后续操作:用Excel或其他工具处理

  • Excel:直接打开生成的CSV文件就行,如果数据量还是有点大(比如几万行),可以用Excel的“数据”选项卡下的“筛选”功能快速整理。
  • LibreOffice Calc:如果Excel还是卡,试试LibreOffice的表格工具,它处理大文件的能力比Excel强不少,完全免费。

内容的提问来源于stack exchange,提问作者FJ1993

火山引擎 最新活动