如何用Python读取特殊格式的整数-国家映射文本文件并加载至各类数据结构?
问题描述
我有一个存储了整数及其对应国家映射关系的文本文件,该文件的存储格式较为特殊。请问该如何导入、读取该文本文件中的数据,并将其加载至Python数据结构中,例如两个列表、字典、DataFrame等。
(原提问附带了文件实际存储格式的示例截图,可根据实际分隔规则微调读取逻辑)
实现方案
通用读取逻辑
不管最终需要加载为哪种Python数据结构,核心的读取流程是一致的,只需根据文件实际的分隔规则调整拆分参数即可:
- 用上下文管理器打开文件,避免文件句柄泄漏
- 逐行过滤无效内容,包括空行、纯分隔符行、注释行
- 拆分每行的两个有效字段(整数值、国家名称),做好对应类型转换
不同数据结构的加载实现
加载为一一对应的两个列表
适合需要独立遍历编码、国家两个维度数据的场景:
# 初始化两个空列表 code_list = [] country_list = [] with open("country_code_map.txt", "r", encoding="utf-8") as f: for line in f: # 清理行首尾的换行符、空白字符 clean_line = line.strip() # 跳过空行 if not clean_line: continue # 拆分字段,maxsplit=1表示仅在第一个分隔位置拆分 code, country_name = clean_line.split(maxsplit=1) # 转成整数类型后存入编码列表 code_list.append(int(code)) # 国家名称直接存入对应列表 country_list.append(country_name)
注意:拆分时一定要加
maxsplit=1参数,避免国家名称本身包含空格、分隔符时出现拆分错位。比如国家名“United Kingdom of Great Britain and Northern Ireland”本身包含多个空格,加这个参数就能保证只有开头的数字被识别为编码,后面的整段内容都作为国家名称处理。
加载为字典映射
适合通过整数编码快速查询对应国家的场景,查询时间复杂度为O(1):
code_country_dict = {} with open("country_code_map.txt", "r", encoding="utf-8") as f: for line in f: clean_line = line.strip() if not clean_line: continue code, country_name = clean_line.split(maxsplit=1) code_country_dict[int(code)] = country_name
加载为pandas DataFrame
适合后续做数据清洗、筛选、分析、导出的场景,有两种灵活的实现方式:
- 复用前面已经读取好的两个列表,直接生成DataFrame:
import pandas as pd map_df = pd.DataFrame({ "整数编码": code_list, "对应国家": country_list })
- 直接用pandas内置的读取方法适配特殊格式,无需手动逐行拆分:
import pandas as pd map_df = pd.read_csv( "country_code_map.txt", sep=r"\s+", # 匹配任意长度的空格、制表符作为分隔符 header=None, # 文件没有表头行 names=["整数编码", "对应国家"], # 手动指定列名 skip_blank_lines=True, # 自动跳过空行 dtype={"整数编码": int} # 直接指定编码列为整数类型 )
适配提示:如果文件使用的是竖线、冒号这类特殊分隔符,只需要修改
sep参数的正则规则即可,比如竖线分隔就写sep=r"\|",冒号分隔就写sep=r":"。
内容的提问来源于stack exchange,提问作者Morgan Sell
相关产品推荐
相关产品推荐

