Python CSV提取修正:按要求输出南半球国家名称至result.txt
修正后的Python代码及问题解析
嘿,我帮你把这段代码修正过来,顺便梳理下原代码里的几个关键问题:
原代码存在的问题
- 输出文件名错误:需求要求写入
result.txt,但原代码打开的是average-latitude-longitude-countries.txt - 写入逻辑重复冗余:每次循环都把整个
joined列表转成字符串写入,导致文件里会出现累积重复的内容(比如第一次写["巴西"],第二次写["巴西","阿根廷"]) - 语法错误:最后一行的
' '是无效的换行写法,会触发语法报错 - 文件管理不规范:没有使用上下文管理器,可能存在文件未正确关闭的风险
修正后的代码
# 使用with上下文管理器自动管理文件,无需手动关闭 with open("average-latitude-longitude-countries.csv", "r") as infile, open("result.txt", "w") as outfile: # 跳过CSV的表头行 infile.readline() southern_countries = [] for line in infile: # 去除行尾换行符,避免分割后出现空元素 line = line.strip() splited = line.split(",") # 根据分割后的长度判断纬度和国家名称的索引 if len(splited) > 4: latitude = float(splited[3]) country_name = splited[2] else: latitude = float(splited[2]) country_name = splited[1] # 筛选南半球(纬度小于0)的国家 if latitude < 0: southern_countries.append(country_name) # 两种输出方式任选其一: # 方式1:每个国家单独占一行(更易读) for country in southern_countries: outfile.write(f"{country}\n") # 方式2:写入整个列表(和原代码逻辑类似,但只写入一次) # outfile.write(str(southern_countries))
修正说明
- 用
with语句打开文件,会自动在代码块结束后关闭文件,避免资源泄漏 - 修正了输出文件名,严格匹配需求的
result.txt - 调整了写入逻辑:先收集所有符合条件的国家,再统一写入,避免重复输出累积列表
- 修复了换行符的语法错误,同时用
line.strip()处理了行尾的换行符,避免分割后出现无效空元素 - 变量名更具语义化(比如
southern_countries代替joined),提升代码可读性
内容的提问来源于stack exchange,提问作者ironman
相关产品推荐
相关产品推荐

