各国健康指标数据查询
目录
一、分步骤去逐步完善
步骤 1:准备文件
步骤 2:读取文件
逐行解释
步骤 3:处理一行数据
步骤 4:构建年份字典
逐行解析
1. 创建空字典
2. 初始化列索引
3. 遍历年份范围
4. 防止索引越界
5. 转换数据并处理异常
6. 存入字典并更新索引
7. 打印结果
步骤 5:构建全局字典
逐行解析
1. 创建外层字典
2. 遍历文件中的行
3. 分割每行数据
4. 提取国家名称
5. 创建年份字典
6. 存入外层字典
7. 输出结果
步骤 6:查询数据
逐行解析
1. 显示欢迎信息和可查询国家
2. 获取用户输入
3. 查询并输出结果
二、完整代码
一、分步骤去逐步完善
步骤 1:准备文件
-
将 CSV 文件
人口增长(年度百分比).csv
放在一个你能记住的位置(比如桌面)。 -
确认文件路径是否正确:
-
例如,如果文件在桌面,路径可能是:
r"C:\Users\你的用户名\Desktop\人口增长(年度百分比).csv"
-
代码中需要用
r
前缀处理路径中的反斜杠。
-
步骤 2:读取文件
# 定义文件路径(替换为你的实际路径)
file_path = r"D:\Python\健康医学数据分析\第6章 文件与数据处理源代码\人口增长(年度百分比).csv"# 打开文件(使用 with 自动关闭文件)
with open(file_path, "r", encoding="utf-8") as f:# 读取所有行(每行是一个字符串)lines = f.readlines()print("文件内容示例(前5行):")for line in lines[:5]:print(line.strip()) # 去掉换行符
逐行解释
-
file_path = r"..."
-
作用:定义文件的完整路径。
-
注意:
-
r
表示“原始字符串”,防止路径中的反斜杠\
被错误转义(例如\n
会被误认为是换行符)。 -
你需要将路径替换为你的 CSV 文件实际位置。
-
-
-
with open(...) as f:
-
作用:安全打开文件。
-
优点:使用
with
语句后,文件会在代码块结束后自动关闭,无需手动调用f.close()
。
-
-
lines = f.readlines()
-
作用:一次性读取文件的所有行,存入列表
lines
。 -
结果:
lines
是一个列表,每个元素是文件的一行内容(字符串形式)。
-
-
print("文件内容示例(前5行):")
-
作用:输出提示信息,告诉用户接下来要显示文件的前5行内容。
-
-
for line in lines[:5]:
-
作用:遍历
lines
列表的前5个元素(即文件的前5行)。 -
lines[:5]
的含义:列表切片,取从第0个元素到第4个元素(前5行)。
-
-
print(line.strip())
-
line.strip()
:去掉字符串首尾的空白字符(如空格、换行符\n
、制表符\t
等)。 -
目的:让输出更整洁,避免每行末尾有多余的换行。
-
步骤 3:处理一行数据
# 取一行示例数据(假设是第6行)
sample_line = lines[5].strip() # 去掉首尾空格和换行符
print("原始行数据:", sample_line)# 按逗号分割成列表
parts = sample_line.split(',')
print("分割后的列表:", parts)# 提取国家名称(假设在第一列)
country = parts[0]
print("国家名称:", country)# 提取1960年的数据(假设在第5列,索引为4)
value_1960 = parts[4]
print("1960年数据:", value_1960)
-
索引从0开始
Python 中列表索引从 0 开始计数:-
parts[0]
→ 第1列(国家名称) -
parts[4]
→ 第5列(1960年数据)
-
-
假设数据位置固定
-
这段代码假设国家名称在第1列,1960年数据在第5列。
-
如果实际 CSV 列顺序不同,需要调整索引。
-
-
潜在错误
-
如果行数不足6行(
lines[5]
会报IndexError
)。 -
如果分割后的
parts
列数不足5列(parts[4]
会报IndexError
)。
-
步骤 4:构建年份字典
# 创建一个字典存储年份数据
year_data = {}# 从第5列(索引4)开始,遍历1960~2021年
start_column = 4
for year in range(1960, 2022):if start_column >= len(parts):break # 防止越界# 将字符串转为浮点数(无法转换则设为None)try: