You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现TSP:导入CSV城市坐标数据报错求助

Hey there! Let's fix those CSV import issues for your TSP project step by step.

解决TSP项目中自定义CSV坐标导入的核心问题

问题拆解

你碰到的两个关键障碍:

  1. UTF-8 BOM头干扰:CSV文件开头的是UTF-8 BOM标记,Python默认读取时不会自动处理,导致表头变成x,无法转换为浮点数。
  2. 小数分隔符为逗号:你的CSV用逗号表示小数(比如48,8582),但Python的csv模块默认把逗号当列分隔符,直接读取会导致坐标值被拆分或无法转成数值类型。

修正后的CSV加载函数

下面是同时解决两个问题的代码实现,替换你原来的Cities函数即可:

import csv

def load_cities_from_csv(file_path):
    cities = []
    # 用utf-8-sig编码打开文件,自动移除UTF-8 BOM头
    with open(file_path, 'r', encoding='utf-8-sig') as csv_file:
        # 假设你的CSV用分号分隔列(因为小数用了逗号),如果列分隔符是其他符号(比如制表符),请修改delimiter值
        csv_reader = csv.reader(csv_file, delimiter=';', quoting=csv.QUOTE_NONE)
        # 跳过表头行(如果你的CSV第一行是x、y表头的话)
        next(csv_reader)
        for row in csv_reader:
            # 将逗号小数分隔符替换为Python默认的点,再转换为浮点数
            x_coord = float(row[0].replace(',', '.'))
            y_coord = float(row[1].replace(',', '.'))
            cities.append((x_coord, y_coord))
    return cities

关键细节说明

  • 处理BOM头:encoding='utf-8-sig'会自动识别并移除文件开头的BOM标记,确保表头x、y能被正常读取。
  • 处理小数分隔符:
    1. 先确认你的CSV列分隔符——因为小数用了逗号,列分隔符通常是分号(;),所以在csv.reader里指定delimiter=';'。如果你的列分隔符是空格或其他符号,记得对应修改。
    2. 读取每个坐标值后,把逗号替换为点(.),再转换为浮点数,这样48,8582就能变成48.8582,符合Python的数值格式要求。

测试调用

使用时直接传入你的CSV文件路径即可:

# 替换成你的CSV文件实际路径
my_cities = load_cities_from_csv('custom_cities.csv')
print(my_cities)  # 打印验证坐标是否正确加载

如果你的CSV没有表头(第一行就是坐标数据),记得删除代码里的next(csv_reader)这一行。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 12:07:29